Java中HashMap是一种用于存储“键”和“值”信息对的数据结构。不同于LinkedListHashMap,它不会维持插入元素的顺序。因此在键或值的基础上排序HashMap是一个很难的面试题。
Map是键值对的集合接口,它的实现类主要包括,HashMap、TreeMap、Hashtable以及LinkedHashMap等。其中这四者的区别如下:
HashMap:我们最常用的Map,它根据key的HashCode存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null,允许多条记录的Value为Null。非同步的。
TreeMap:能够把它保存的记录根据key进行排序,默认是按升序排序,也可以指定排序的比较器。当用Iterator遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
HashTable:与HashTable类似,不同的是:Key和Value的值均不允许为Null,它支持线程的同步,即任意时刻只有一个线程能写HashTable,因此也导致了HashTable在写入时会比较缓慢。
LinkedListHashMap:保存了记录的插入顺序,在用Iterator遍历LinkedListHashMap时,先得到的记录肯定是先插入的,在遍历的时候会比HashMap慢。key和value均为空,非同步的。
TreeMap:能够把它保存的记录根据key值进行排序,默认是按升序排序,也可以跟
1、创建一个简单的HashMap,并插入一些键和值。
Map<String,Integer> aMap=new HashMap<String,Integer>();
//adding keys and values
aMap.put("Five", 5);
aMap.put("Seven",7);
aMap.put("Four", 4);
aMap.put("Eight", 8);
aMap.put("One", 1);
aMap.put("Two", 2);
aMap.put("Three", 3);
2、利用Set entrySet():返回Entry对象的视图集,即影像中的键值对
Set<Entry<String,Integer>> set=aMap.entrySet();
3、从上述set创建LinkedList。我们将排序这个链表来解决顺序问题。
List<Map.Entry<String,Integer>> aList=new LinkedList<Entry<String,Integer>>(set);
4、使用Collections的内置方法,排序值的列表
Collections.sort(aList,new Comparator<Entry<String,Integer>>(){
public int compare(Entry<String,Integer> o1,Entry<String,Integer> o2){
return o1.getValue().compareTo(o2.getValue());
}
})
5、Collections.sort()是一个内置方法。它在Collections类中重载,这两种方法是
public static <T extends Comparable<? super T>> void sort(List<T> list)
public static <T> void sort (List<T> list,Comparator<? super T> c)
网友评论