2014-12-08 5 views
3

다음과 같은 키 - 값 시스템 (HashMap)이 있습니다. 여기서 String은 "2014/12/06"과 같은 키입니다.Java에서 LinkedHashMap의 값을 키의 일부로 가져옵니다.

LinkedHashMap<String, Value> 

그래서, 나는 키를 알고 항목을 검색 할 수 있지만, 내가 무엇을 찾고있어 내가 모든 값을 검색 할 수있는 방법, 키 일치 partialy, 내 말은 값의 목록을 검색하는 방법입니다 2014 년?

나는 목록의 모든 항목을 테스트하거나, 무차별 대항력 등의 해결책을 피하고 싶습니다.

감사합니다.

+0

이 방법으로 항목에 정기적으로 액세스해야하는 경우 [MapFilter] (http://stackoverflow.com/questions/17813940/is-there-a-way-to-get- 특정 - 특정 - 필터링 된 키 -리스트 - 내부 - 특성 - 파일 - 인 - 17814755 # 17814755). – OldCurmudgeon

답변

5

제외하고 모든 키 반복의 무차별 솔루션을하고부터, 나는 두 가지 옵션을 생각할 수 있습니다 : 첫 번째를 찾을 수 있도록

  1. 은 키가 정렬되어있는 트리 맵을 사용하여 키 => "2014/01/01"(map.getCeilingEntry("2014/01/01") 사용)을 클릭하고 거기에서 모든 키를 가져갑니다.

  2. 지도의 계층 구조 - 예 : Map<String,Map<String,Value>>을 사용하십시오. 바깥 쪽 Map의 키는 1 년입니다. 내부 맵의 키는 전체 날짜입니다. 당신이 오직 키의 첫 번째 부분를 사용하여 항목을 검색 할 거라면

+0

지도의 계층 구조가 정말 좋은 해결책 인 것 같습니다. 감사합니다. – Octal

0

LinkedHashMap에서만 가능하지 않습니다. 순서가 지정된 목록에 키를 복사 할 수있는 경우 이진 검색을 수행 한 다음 전체 키로 LinkedHashMap.get (...)을 수행 할 수 있습니다.

0

는, 당신은 TreeMap보다는 LinkedHashMap합니다. LinkedHashMap은 삽입 순서에 따라 정렬되지만 아무런 용도가 없지만 TreeMap은 자연 순서에 따라 정렬되거나 사용자가 제공 한 Comparator으로 정렬됩니다. 즉, 2014으로 시작하는 첫 번째 항목을 효율적으로 (로그 시간에) 찾을 수 있고 일치하지 않는 첫 번째 항목까지 찾을 수 있습니다.

의 부품 중 어느 부품이든과 일치시킬 수있는 경우 간단한 Map 이상의 완전히 다른 솔루션이 필요합니다. 전체 텍스트 검색 및 색인 생성을 조사해야합니다. Lucene과 같은 것을 시도해 볼 수 있습니다.

0

비슷한 해의 값이 비슷한 접두사가있는 해시 주위에 해시되도록 값에 대한 해시 함수를 구체화 할 수 있습니다. 그것은 효율적이지 않을 것입니다 (해시 분포가 좋지 않음). HashMaps의 정신에도 미치지 못합니다. 선택한 순서를 유지하는 TreeMaps 같은 다른 맵 구현을 사용하십시오.