2013-06-14 1 views
1

Im 자바 초보자입니다. 그는이 메서드에 전달되어, 나는 time_starttime_stop에 대한 사용자로부터 입력을받을복합 키의 경우 맵을 사용하십시오

public void filter(Long time_start, Long time_stop){ 
    ArrayList<Long> time = new ArrayList<Long>(); 
    ArrayList<Integer> stream = new ArrayList<Integer>(); 
    ArrayList<Integer> cpuid = new ArrayList<Integer>(); 
    ArrayList<Integer> token = new ArrayList<Integer>(); 
} 

: 나는 자바에서 다음과 같은 방법이있다. ArrayList 시간은 사용자가 입력 한 값을 포함합니다 (time_starttime_stop 모두). 내가 원하는 것은 이것이다. 주어진 시작과 끝 시간마다 ... ArrayList를 살펴보고 time_start부터 time_end까지 time, stream, cpuid and token을 반환한다. ArrayList 시간의 각 값은 고유합니다.

어떻게해야합니까? Java에 Map 인터페이스가 있지만 입력으로 하나의 키만 받아 들일 수 있다는 것을 알고 있습니다. 나는 범위의 값을 찾고 그 범위에 해당하는 모든 필드를 출력하고 싶다.

아무에게 나에게이 일을 올바르게하고 최선의 방법을 말해 줄 수 있습니까? 시간, cpuid 등의 ArrayLists는 매우 클 수 있습니다.

+0

메소드에'static' 변수를 선언 할 수 없습니다. 코드가 컴파일되지 않습니다. – fge

+0

@fge 죄송합니다. 정확한 코드가 아닙니다. – user2358330

+0

'static'을 제거하고'List '을 찾고 계십니까? – NINCOMPOOP

답변

3

java.util.NavigableMap을 사용할 수 있습니다. 범위를 검색하고, 거의 일치하는 항목을 검색하고, 필요한 모든 항목을 검색 할 수있는 메소드가 있습니다.

병렬 목록을 사용하는 대신 하나의 객체에서 각 이벤트의 시간, 스트림, cpuid 및 토큰 값의 튜플을 나타내는 클래스를 정의해야합니다. 나는 지금이 클래스를 Data이라고 부를 것이다.

time_start에서 time_stop의 범위에서 키를 사용하여 항목을 얻으려면, 당신은이 작업을 수행 할 수 있습니다

NavigableMap<Long,Data> myMap; 

public NavigableMap filter(Long time_start, Long time_stop){ 
    return myMap.subMap(time_start, time_stop); 
} 
+0

안녕하세요. 답변 주셔서 감사합니다. 난 그냥 바보 같은 의심, myMap.submap에 의해 반환되는 범위 내의 모든 필드를 어떻게 인쇄합니까? 또는 해당 서브맵 내의 각 필드를 개별적으로 액세스하려면 어떻게합니까? 해당 범위의 CPU만을 인쇄하고 싶습니다. – user2358330

+1

@ user2358330 서브맵의 항목 세트를 반복하여 액세스 할 수 있습니다 (향상된 for-loop로 수행 할 것이지만 이는 유일한 방법은 아닙니다). 반복되는 변수의 타입은'Map.Entry '이며, getter 메소드로 액세스 할 수있는 키와 값 멤버가 있습니다. 그런 다음 '데이터'유형의 항목 값에 액세스하여 cpuid를 얻을 수 있습니다. – AJMansfield

3

를 사용하여 자바의 우수한 OO 기능과

public class DataPoint { 
    startTime; 
    endTime; 
    stream; 
    cpuId; 
    token; 
} 

저장 같은 것을 만드는 것이 당신의 목록에. 그리고 네, 컴파일되지 않습니다, 나는 당신에게 실제 구현을 둡니다.

+0

+1 여러 목록을 사용하는 것보다 훨씬 낫습니다! – Guillaume

+1

나는 OP가 각 이벤트가 단지 하나의 시간 값을 가지고 있다는 것을 의미한다고 생각하고 그는 시작과 끝 사이의 값을 갖는 데이터 포인트를 _retrieve_하고 싶다. – AJMansfield

+0

@AJMansfield 그는 데이터 저장소를 위해 Map 를 사용하는 것을 제외하고는 동일한 원칙을 계속 사용할 수 있습니다 (일부 데이터 복제를 제공하더라도 타임 스탬프를 기반으로 검색하는 것이 더 빠를 수 있습니다. 검색된 인스턴스의 구성원 나열 및 쿼리). – jwenting

관련 문제