Java 对Map进行排序的实现方法
HashMap与TreeMap的区别
HashMap:
最常用的Map,根据键值可以获取Value值,HashMap通过键值的hash来决定存储的位置,存取速度非常快,同时它的这一性质也决定了它不可能存在键值相同的元素同时存在,后加入的会替换先加入的.使用迭代器输出的顺序是键被添加的顺序,不会进行自动排序
TreeMap:
会对存如的元素按键的大小升序排列,使用迭代器输出的时候是有序的,默认升序.
下面是实现排序的代码
输出结果的方法
迭代器输出Map
的元素
public void IteratorPrint(Map map) {
Set set = map.keySet();
Iterator iterator = set.iterator();
while (iterator.hasNext()) {
int key = iterator.next();
int value = (int) map.get(key);
System.out.println(key + ":" + value);
}
}
输出List>
的方法
public void ListPrint(List<Map.Entry<Integer,Integer>> list) {
for (int i = 0; i < list.size(); i++) {
Map.Entry<Integer, Integer> map = list.get(i);
System.out.println(map.getKey()+":"+map.getValue());
}
}
按键的升序的方法(默认的)
Map map1 = new TreeMap<>()
map1.put(3, 2)
map1.put(4, 6)
map1.put(2, 5)
map1.put(1, 3)
IteratorPrint(map1)
输出结果
1:3
2:5
3:2
4:6
按键的降序的方法
Map<Integer, Integer> map2 = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
map2.put(3, 2);
map2.put(4, 6);
map2.put(2, 5);
map2.put(1, 3);
IteratorPrint(map2);
输出
4:6
3:2
2:5
1:3
按值的升降排序的方法(升序降序就一行代码的差距)
Map<Integer, Integer> map3 = new TreeMap<>();
map3.put(3, 2);
map3.put(4, 6);
map3.put(2, 5);
map3.put(1, 3);
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map3.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue()-o2.getValue();
}
});
ListPrint(list);
输出就不贴了,跟上面的一样
主要代码都上了,最后贴一下测试代码,复制可运行
import java.util.*;
public class TreeMapTest {
public TreeMapTest() {
System.out.println("Map按键升序");
Map<Integer, Integer> map1 = new TreeMap<>();
map1.put(3, 2);
map1.put(4, 6);
map1.put(2, 5);
map1.put(1, 3);
IteratorPrint(map1);
System.out.println("Map按键降序");
Map<Integer, Integer> map2 = new TreeMap<>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2 - o1;
}
});
map2.put(3, 2);
map2.put(4, 6);
map2.put(2, 5);
map2.put(1, 3);
IteratorPrint(map2);
System.out.println("Map按值升降序");
Map<Integer, Integer> map3 = new TreeMap<>();
map3.put(3, 2);
map3.put(4, 6);
map3.put(2, 5);
map3.put(1, 3);
List<Map.Entry<Integer, Integer>> list = new ArrayList<Map.Entry<Integer, Integer>>(map3.entrySet());
Collections.sort(list, new Comparator<Map.Entry<Integer, Integer>>() {
@Override
public int compare(Map.Entry<Integer, Integer> o1, Map.Entry<Integer, Integer> o2) {
return o1.getValue()-o2.getValue();
}
});
ListPrint(list);
}
public void ListPrint(List<Map.Entry<Integer,Integer>> list) {
for (int i = 0; i < list.size(); i++) {
Map.Entry<Integer, Integer> map = list.get(i);
System.out.println(map.getKey()+":"+map.getValue());
}
}
public void IteratorPrint(Map map) {
Set<Integer> set = map.keySet();
Iterator<Integer> iterator = set.iterator();
while (iterator.hasNext()) {
int key = iterator.next();
int value = (int) map.get(key);
System.out.println(key + ":" + value);
}
}
public static void main(String[] args) {
new TreeMapTest();
}
}