2013-06-10 2 views
0

LinkedSortedMap 나는 삽입 순서로 이송 될 필요가있는 목록을 가지고있다. 그러나 floorEntry 및 ceilingEntry 값을 사용하여 "시작 지점"을 찾고 싶습니다.자바 : 통과하여 w/o LinkedList의에서 처음 floorEntry()를 얻는 방법에 대해 설명합니다.

그래서 나는 다음 원하는 작업과 모음이 필요합니다> = 또는 <이 = (바닥

  • 모든 값을 찾을 :

    1. 자주 삽입/이런 식으로 통과하는
    2. 필요 끝에 추가 , 천장)
    3. 다음을이 순서로 통과하십시오.
    4. 기준과 일치하는 각 항목을 제거하십시오.

그래서 컬렉션을 정렬 순서대로 정렬해야하며 정렬 된 값을 기준으로 임의 액세스가 필요합니다.

는 LinkedSortedMap 같은 뭔가가 있나요? 그러나 이것이 확실하게 작동하지 않을 수도 있습니다.

나는 LinkedList의에서 값의 첫 번째 floorEntry()을 찾을 수있는 방법을

? floorEntries가 연결된 목록을 어떻게 찾을 수 있습니까? 즉

============== ============================= =

//I have timeseries of Ints. 
TimeSeries<Int> collection = new LinkedList<>() 

/* 
FindAndRemove is to remove first n Ints that are <= x 
*/ 

FindAndRemove1(Int x,int n) { 
    //return an iter to filtered subset of collection 
    iter = collection.floorEntrySet(x) 
    for (int i =0; i<n; i++) { 
    iter.remove() 
    if (!iter.hasnext) break; 
    iter->next 
} 


FindAndRemove2(Int x,int n) { 
    //return an collection.iter to oldest Int that is <= x 
    iter = collection.floorEntry(x) 
    for (int i = 0; iter.hasnext; iter.next) { 
     if (iter.x > x) 
     continue; 

     iter.remove() 
     if (++i > n) break; 
    } 
} 

답변

0

당신이 제거를 지원할 수 있도록하려면, 당신은에있는 개체의 키를 찾아 키가 자동 증가 정수를

TreeMap<Integer, Object> sortedMap; 
HashMap<Object, Integer> lookupMap; 
int key; 

public void add(Object obj) { 
    sortedMap.put(key, obj); 
    lookupMap.put(obj, key); 
    key++; 
} 

사용 조회지도를하는 트리 맵을 사용할 수 있습니다 정렬 된 맵을 검색 한 다음 검색된 키를 사용하여 정렬 된 맵에서 바닥/천장 쿼리를 수행 할 수 있습니다.

Google은 한 방향으로 해시 맵과 다른 방향

+0

실 거예요 작품에 트리 맵을 사용하여 사용자의 요구에 맞게 적용 할 수있을 수있는 HashBiMap 있습니다. 컬렉션을 시간별로 정렬해야합니다 ....하지만 시간과 가치에 따라 조회를 수행해야합니다. 좋아 보이는 -이 경우 – jaybny

+0

@jaybny는 –

+0

확인 위의 내 편집을 참조하십시오. 그러나 lookupMap에 floor를해야하므로 lookupMap은 SortedMap이어야합니다. 어쩌면 명확히하기 위해 내 질문을 편집해야 할 수도 있습니다. – jaybny