JavaMap键值对排序按key排序和按Value排序
⼀.理论准备
Map是键值对的集合接⼝,它的实现类主要包括:HashMap,TreeMap,Hashtable以及LinkedHashMap等。
TreeMap:基于红⿊树(Red-Black tree)的 NavigableMap 实现,该映射根据其键的⾃然顺序进⾏排序,或者根据创建映射时提供的 Comparator 进⾏排序,具体取决于使⽤的构造⽅法。
HashMap的值是没有顺序的,它是按照key的HashCode来实现的,对于这个⽆序的HashMap我们要怎么来实现排序呢?参照TreeMap的value排序。
Map.Entry返回Collections视图。
⼆.key排序
TreeMap默认是升序的,如果我们需要改变排序⽅式,则需要使⽤⽐较器:Comparator。Comparator可以对集合对象或者数组进⾏排序的⽐较器接⼝,实现该接⼝的public compare(T o1,To2)⽅法即可实现排序,如下:
import java.util.Comparator;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
public class TreeMapTest {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>(
new Comparator<String>() {
public int compare(String obj1, String obj2) {
// 降序排序
return obj2pareTo(obj1);
}
});
map.put("b", "ccccc");
map.put("d", "aaaaa");
map.put("c", "bbbbb");
map.put("a", "ddddd");
Set<String> keySet = map.keySet();
Iterator<String> iter = keySet.iterator();
while (iter.hasNext()) {
String key = ();
System.out.println(key + ":" + (key));
}
}
}
运⾏结果如下:
d:aaaaa
java集合排序怎么实现c:bbbbb
b:ccccc
a:ddddd
三.value排序
上⾯例⼦是对根据TreeMap的key值来进⾏排序的,但是有时我们需要根据TreeMap的value来进⾏排序。
对value排序我们就需要借助于Collections的sort(List<T> list, Comparator<? super T> c)⽅法,该⽅法根据指定⽐较器产⽣的顺序对指定列表进⾏排序。但是有⼀个前提条件,那就是所有的元素都必须能够根据所提供的⽐较器来进⾏⽐较,如下:
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.TreeMap;
public class TreeMapTest {
public static void main(String[] args) {
Map<String, String> map = new TreeMap<String, String>();
map.put("a", "ddddd");
map.put("c", "bbbbb");
map.put("d", "aaaaa");
map.put("b", "ccccc");
//这⾥将Set()转换成list
List<Map.Entry<String,String>> list = new ArrayList<Map.Entry<String,String>>(Set()); //然后通过⽐较器来实现排序
Collections.sort(list,new Comparator<Map.Entry<String,String>>() {
//升序排序
public int compare(Entry<String, String> o1,
Entry<String, String> o2) {
Value()Value());
}
});
for(Map.Entry<String,String> mapping:list){
System.out.Key()+":"+Value());
}
}
}
运⾏结果如下:
d:aaaaa
c:bbbbb
b:ccccc
a:ddddd
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论