Java面试题-如何对HashMap按键值进行排序

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 aMap=new HashMap();

//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> set=aMap.entrySet();

3、从上述set创建LinkedList。我们将排序这个链表来解决顺序问题。

List> aList=new LinkedList>(set);

4、使用Collections的内置方法,排序值的列表

Collections.sort(aList,new Comparator>(){

    public int compare(Entry o1,Entry o2){

    return o1.getValue().compareTo(o2.getValue());

}

})

5、Collections.sort()是一个内置方法。它在Collections类中重载,这两种方法是

public static > void sort(List list)

public static void sort (List list,Comparator c)

你可能感兴趣的:(Java面试题-如何对HashMap按键值进行排序)