> Java > java지도 시간 > 본문

값별로 정렬되는 JavaMap 구현 방법

高洛峰
풀어 주다: 2017-01-19 09:48:04
원래의
1881명이 탐색했습니다.

Map은 키-값 쌍의 컬렉션 인터페이스입니다. 구현 클래스에는 주로 HashMap, TreeMap, Hashtable 및 LinkedHashMap 등이 포함됩니다.

•TreeMap: Red-Black 트리를 기반으로 하는 NavigableMap 구현으로, 키의 자연스러운 순서에 따라 정렬되거나 사용된 구성 방법에 따라 맵을 생성할 때 제공된 Comparator에 따라 정렬됩니다.

•HashMap의 값이 순서가 아닙니다. 키의 HashCode에 따라 구현됩니다. 순서가 지정되지 않은 HashMap에 대한 정렬을 어떻게 구현합니까? TreeMap의 값 정렬을 참고하세요.

Map.Entry는 컬렉션 보기를 반환합니다.

키별 정렬

TreeMap은 기본적으로 오름차순으로 정렬됩니다. 정렬 방법을 변경해야 하는 경우 비교기인 Comparator를 사용해야 합니다. Comparator는 컬렉션 개체나 배열을 정렬할 수 있는 비교기 인터페이스입니다. 이 인터페이스의 공용 Compare(T o1, To2) 메서드를 구현하면 정렬이 가능합니다.

참고: 다음 코드는 Jdk1.6에서 테스트되었습니다.

TreeMap은 기본적으로 키 기준 오름차순으로 정렬됩니다.

public static void keyUpSort() {
// 默认情况,TreeMap按key升序排序
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------正常情况,TreeMap按key升序排序--------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
로그인 후 복사

정렬 수정 TreeMap의 방법, 키에 의한 내림차순 정렬

public static void keyDownSort() {
// TreeMap,按key降序排序
// 降序排序比较器
Comparator<String> keyComparator = new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
// TODO Auto-generated method stub
return o2.compareTo(o1);
}
};
Map<String, Integer> map = new TreeMap<String, Integer>(keyComparator);
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
System.out.println("------------TreeMap按key降序排序--------------------");
for (Map.Entry<String, Integer> entry : map.entrySet()) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
로그인 후 복사

값에 의한 정렬

다음은 TreeMap에 의한 값에 의한 오름차순 정렬만 보여줍니다. , 이는 HashMap에도 적용됩니다.

TreeMap의 정렬 방법을 수정하고 Value의 오름차순으로 정렬

참고: 일반적인 상황에서는 Collections.sort() 메서드를 사용하여 Map을 정렬할 수 없지만 Map을 변환할 수 있습니다. 목록으로 다시 정렬하세요.

public static void valueUpSort() {
// 默认情况,TreeMap按key升序排序
Map<String, Integer> map = new TreeMap<String, Integer>();
map.put("acb1", 5);
map.put("bac1", 3);
map.put("bca1", 20);
map.put("cab1", 80);
map.put("cba1", 1);
map.put("abc1", 10);
map.put("abc2", 12);
// 升序比较器
Comparator<Map.Entry<String, Integer>> valueComparator = new Comparator<Map.Entry<String,Integer>>() {
@Override
public int compare(Entry<String, Integer> o1,
Entry<String, Integer> o2) {
// TODO Auto-generated method stub
return o1.getValue()-o2.getValue();
}
};
// map转换成list进行排序
List<Map.Entry<String, Integer>> list = new ArrayList<Map.Entry<String,Integer>>(map.entrySet());
// 排序
Collections.sort(list,valueComparator);
// 默认情况下,TreeMap对key进行升序排序
System.out.println("------------map按照value升序排序--------------------");
for (Map.Entry<String, Integer> entry : list) {
System.out.println(entry.getKey() + ":" + entry.getValue());
}
}
로그인 후 복사

테스트 결과

------------正常情况,TreeMap按key升序排序--------------------
abc1:10
abc2:12
acb1:5
bac1:3
bca1:20
cab1:80
cba1:1
------------TreeMap按key降序排序--------------------
cba1:1
cab1:80
bca1:20
bac1:3
acb1:5
abc2:12
abc1:10
------------map按照value升序排序--------------------
cba1:1
bac1:3
acb1:5
abc1:10
abc2:12
bca1:20
cab1:80
로그인 후 복사

위는 에디터에서 소개한 Java Map을 Value별로 정렬한 것이다. 질문이 있으신 경우 메시지를 남겨주시면 편집자가 제 시간에 답변해 드리겠습니다. 또한 PHP 중국어 웹사이트를 지원해 주신 모든 분들께 감사드립니다!

값에 따른 JavaMap 정렬 구현 방법과 관련된 더 많은 기사를 보려면 PHP 중국어 웹사이트를 주목하세요!


관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿