坑爹的集合

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/kingdelee/article/details/84492006
本节实例介绍对Map中的记录根据键进行排序,Map对象的键是Integer类型,排序结果可以是升序也可以是降序。
关键技术剖析:
l 只有TreeMap能够把保持的记录根据键排序,因此,可以把其他Map转换成TreeMap,转换的方法是把Map对象当做参数构造TreeMap。
l TreeMap默认用升序排序,可以指定排序用的比较器。比较实现Comparator接口。

import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;

public class SortMap1 {
// 输出map
private static void output(Map map) {
// 第一种方法用 map.entrySet()遍历
Iterator it = map.entrySet().iterator();
while (it.hasNext()) {
Map.Entry<Integer, String> s = (Entry<Integer, String>) it.next();
int key = s.getKey();
String value = s.getValue();
// System.out.println("map的键是:"+key+",值是:"+value);
}

// 第二种方法用map.keySet()遍历
it = map.keySet().iterator();
while (it.hasNext()) {
int key = (Integer) it.next();
String value = (String) map.get(key);
System.out.println("map的键是:" + key + ",值是:" + value);

}

}

public static void main(String[] args) {
Map map = new HashMap();
map.put(new Integer(5), "aaa");
map.put(new Integer(8), "bbb");
map.put(new Integer(4), "ccc");
map.put(new Integer(7), "ddd");
map.put(new Integer(3), "eee");
map.put(new Integer(1), "fff");
System.out.println("初始化后的map:");
output(map);

// 借助TreeMap的排序功能给mayMap排序
Map treeMap = new TreeMap(map);
System.out.println("排序后的map:");
output(treeMap);

// 用自定义的比较器排序
TreeMap newTreeMap = new TreeMap(new MyComparator());
newTreeMap.putAll(map);
System.out.println("用自定义的比较器排序后的map:");
output(newTreeMap);
}
}
//比较器
class MyComparator implements Comparator {

@Override
public int compare(Object o1, Object o2) {
int i1 = (Integer) o1;
int i2 = (Integer) o2;
if (i1 > i2) {
return -1;
}
if (i1 < i2) {
return 1;
}
return 0;
}
}



注意:c1 > c2,return -1是降序,return 1是升序

@Test
public void compareTest() {
List<Integer> list = new ArrayList<Integer>();
list.add(3);
list.add(8);
list.add(2);
list.add(1);
list.add(4);
list.add(0);

Collections.sort(list, new Comparator<Integer>() {

@Override
public int compare(Integer o1, Integer o2) {
if (o1 > o2) {
return -1;
}
else {
return 1;
}
}
});
System.out.println(list.toString());
}
[8, 4, 3, 2, 1, 0]
展开阅读全文

没有更多推荐了,返回首页