등의 HashMap <문자열, 정수>와 TreeSet의,종류의 유형 예를 들어
TreeSet<HashMap<String,Integer>> myTree = new TreeSet<HashMap<String,Integer>>();
나는 HashMap의에서 정수 값을 기준으로 TreeSet의 정렬합니다. 우리가 이것을 할 수있는 좋은 방법이 있습니까?
등의 HashMap <문자열, 정수>와 TreeSet의,종류의 유형 예를 들어
TreeSet<HashMap<String,Integer>> myTree = new TreeSet<HashMap<String,Integer>>();
나는 HashMap의에서 정수 값을 기준으로 TreeSet의 정렬합니다. 우리가 이것을 할 수있는 좋은 방법이 있습니까?
당신은
public static Set<HashMap<String, Integer>> myTree = new TreeSet<>(
new Comparator<HashMap<String, Integer>>() {
@Override
public int compare(HashMap<String, Integer> o1,
HashMap<String, Integer> o2) {
return (o2.get(key)).compareTo(o1.get(key));
}
});
그냥 정수의 키
key
교체, 사용자 정의 비교를 설계하고 생성자와 같은
TreeSet
에 제공해야합니다. 당신이 다음 다른 방법으로 주위를 정렬 할 경우
,
교체와
o2.get(key)).compareTo(o1.get(key)
,
o1.get(key)).compareTo(o2.get(key)
"HashMap에서 Integer 값을 기반으로이 트리 집합을 정렬"한 것처럼이 요구 사항은 의미가 없거나 복잡하고 혼동스러운 디자인을 나타냅니다.
실제 값 집합을 기반으로 컬렉션을 주문 하시겠습니까? 아니면 Tuple2와 같은지도를 스탠드 인으로 사용하고 계십니까?
귀하의 의도가 전자라면 확실하게 고객 비교자를 만들 수 있습니다. 그 Comparator의 의미는 대부분의 사람들에게는 명백하지 않을 것이며 삽입/삭제시 O (n^2) -ish 동작을 나타내는 구현으로 끝날 것입니다.
그리고 후자 인 경우 시스템이 다시 혼란 스러울 수 있지만 불변량은 훨씬 저조한 모델이됩니다. 즉, 이라고 가정하면 각 Map에는 정확히 하나의 키 - 값 바인딩이 포함되어 있으며 런타임 검사와 함께이 제약 조건을 확실히 적용하고 javadoc 등에서 문서화 할 수 있지만 Map 유형을 직관적으로 사용하지는 않습니다. 이 경우, JB Nizet이 언급 한 것처럼 String과 Integer 필드로 컨테이너 클래스를 생성하는 것이 훨씬 더 좋을 것입니다. 그리고 Comparator를 사용하거나 클래스를 Comparable을 사용하여이 클래스의 컬렉션을 쉽게 정렬 할 수 있습니다 .
사용자 정의를 제공'비교기 <의 HashMap <문자열, 정수 >> ''TreeSet'의 생성자에 대해 호출합니다. 그래도 이것은 이상한 디자인처럼 보입니다. –
** ** 정수 값입니까? 왜 하나의 키와 하나의 값을 저장하기 위해 Map을 사용합니까? String 필드와 Integer 필드가 포함 된 클래스를 만들어야합니다. –