타임 스탬프가 지정된 시간보다 길면 내 LinkedHashMap에서 개체를 가져 오는보다 효율적인 방법이 있는지 궁금합니다. 나는. 다음보다 더 나은 뭔가 내 구현에서LinkedHashMap 검색, 순차 검색보다 빠른 방법?
Iterator<Foo> it = foo_map.values().iterator();
Foo foo;
while(it.hasNext()){
foo = it.next();
if(foo.get_timestamp() < minStamp) continue;
break;
}
내 각 개체는 기본적으로 세 가지 값이 있습니다에 "ID", "타임 스탬프"및 "데이터". 객체는 타임 스탬프 순서대로 처리되므로 세트를 통해 반복자를 호출하면 링크 된 hashmap 계약에 따라 필요한 결과가 표시됩니다. 지도는 객체의 ID에 맞춰져 있으므로 ID별로 빠르게 조회 할 수 있습니다.
그러나 타임 스탬프 조건을 사용하여 검색하면 결과가 정렬 된 반복기가 표시됩니다. 이것은 일반 해시 맵보다 개선 된 것이지만, 다음 항목이 지정된 것보다 더 높은 타임 스탬프로 발견 될 때까지 계속 범위의 많은 부분을 순차적으로 반복해야합니다.
결과가 이미 정렬되었으므로 순회보다 빨리 검색 할 수있는 반복기 (또는 컬렉션)에 전달할 수있는 알고리즘이 있습니까? 대안으로 트리 맵을 사용했다면 전반적인 속도 이점을 제공하겠습니까? 아니면 본질적으로 백그라운드에서 동일한 것을 수행하고 있습니까? 컬렉션이 삽입 순서에 따라 이미 정렬되었으므로 트리 맵에 훨씬 많은 오버 헤드가 필요하다고 생각하고 있습니까?
데이터가 잠겨 있으므로 동시성이 문제되지 않습니다. 그래, 바이너리 검색은 엄청난 개선이 될 것이지만 나는 ID 매핑을 포기할 수 없다. –
두 가지 데이터 구조로 가능하다고 생각합니다. id와 timestamp만을 포함하는 객체를 보유하고있는 오래된 낡은 hashmap과 arraylist. 객체를 제거하는 것은 대응하는 타임 스탬프를 제거하기 위해 arraylist를 검색해야하므로 조금 까다 롭습니다. 그러나 타임 스탬프 검색은 훨씬 빠를 것이라고 생각합니다. –