一、map是键值对的集合接口,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。其中这四者的区别如下(简单介绍):
1、HashMap:我们最常用的Map,它根据key的HashCode 值来存储数据,根据key可以直接获取它的Value,同时它具有很快的访问速度。HashMap最多只允许一条记录的key值为Null(多条会覆盖);允许多条记录的Value为 Null。非同步的。
2、TreeMap: 能够把它保存的记录根据key排序,默认是按升序排序,也可以指定排序的比较器,当用Iterator 遍历TreeMap时,得到的记录是排过序的。TreeMap不允许key的值为null。非同步的。
3、Hashtable: 与 HashMap类似,不同的是:key和value的值均不允许为null;它支持线程的同步,即任一时刻只有一个线程能写Hashtable,因此也导致了Hashtale在写入时会比较慢。
4、LinkedHashMap: 保存了记录的插入顺序,在用Iterator遍历LinkedHashMap时,先得到的记录肯定是先插入的在遍历的时候会比HashMap慢。key和value均允许为空,非同步的。
二、
1、TreeMap
TreeMap默认是升序的,如果我们需要改变排序方式,则需要使用比较器:Comparator。
1)Comparator可以对集合对象或者数组进行排序的比较器接口,实现该接口的public compare(T o1,To2)方法即可实现排序,该方法主要是根据第一个参数o1,小于、等于或者大于o2分别返回负整数、0或者正整数。
2)对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<
super T>
c)方法,该方法根据指定比较器产生的顺序对指定列表进行排序。但是有一个前提条件,那就是所有的元素都必须能够根据所提供的比较器来进行比较。
2、HashMap
我们都是HashMap的值是没有顺序的,他是按照key的HashCode来实现的。
double类型是不行的,必须是它的包装类型Double,定义如下:
TreeMap<String,Map<String,Double>> treeMap = new TreeMap<String,Map<String,Double>>();
不知道楼主指的顺序是什么。使用Map的,向来只关心键值,只要有key,就能取出value;如果没有key,也无法取出value,从来不会关心顺序问题,也根本没有意义。
如果楼主想通过循环取值,建议不要用map了,这和map的初衷不符。楼主可以用List来实现。
以上就是关于如何对map中的value进行排序全部的内容,包括:如何对map中的value进行排序、TreeMap<> 的key是String,value是另一个map<String,double> 怎么定义这个TreeMap、java map存储的是键顺序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)