Java集合-SortedMap

SortedMapjava.util.SortedMap)接口是Map的子接口,SortedMap中增加了元素的排序,这意味着可以给SortedMap中的元素排序。

SortedMap的实现TreeMap

SortedMap接口的实现TreeMap (java.util.TreeMap).

创建TreeMap

可以通过TreeMap的构造函数创建TreeMap 实例:

 
SortedMap sortedMap = new TreeMap();

创建TreeMap使用Comparator

可以使用Comparator的实现作为TreeMap 构造函数的参数 ,这个Comparator将用于对存储在SortedMap中的键、值对的键进行排序:

Comparator comparator = new MyComparatorImpl();

SortedMap sortedMap = new TreeMap(comparator);

 

排序

SortedMap中的排序顺序要么是元素的自然排序顺序(如果它们实现了java.lang.Comparable),或由Comparator确定的顺序。

升序和降序排序

默认的元素迭代顺序是升序,开始是最小的元素,然后逐渐变大,也可以降序迭代,可以使用TreeMap.descendingKeySet()方法。

迭代SortedMap

迭代SortedMap和迭代一般的Map一样,既然SortedMap key是有顺序的,所以可以按顺序迭代key,通过调用SortedMap  keySet()迭代:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "one");
sortedMap.put("b", "two");
sortedMap.put("c", "three");

Iterator iterator = sortedMap.keySet().iterator();

while(iterator.hasNext()) {
    String key   = (String) iterator.next();

    String value = (String) sortedMap.get(key);
}

 

如果需要降序迭代则调用sortedMap.descendingKeySet().iterator()的方法:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "one");
sortedMap.put("b", "two");
sortedMap.put("c", "three");

Iterator iterator = sortedMap.descendingKeySet().iterator();

while(iterator.hasNext()) {
    String key   = (String) iterator.next();

    String value = (String) sortedMap.get(key);
}

 

获取Comparator

如果创建SortedMap时使用了Comparator,则可以通过SortedMapcomparator()方法获取Comparator

 
Comparator comparator = sortedMap.comparator();

获取第一个Key

SortedMap接口有个firstKey()方法可以获取第一个元素:

 
String firstKey = (String) sortedMap.firstKey();

获取最后一个Key

SortedMap接口有个lastKey()方法可以获取最后一个元素:

 
String lastKey = (String) sortedMap.lastKey();

Head Map

SortedMap接口有个headMap()方法,返回一个新的Map,这个方法有个参数key,返回的Map中的元素小于这个参数key:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "1");
sortedMap.put("c", "3");
sortedMap.put("e", "5");
sortedMap.put("d", "4");
sortedMap.put("b", "2");

SortedMap headMap = sortedMap.headMap("c");

System.out.println(headMap);

 

headMap中包含 ("a", "1")("b", "2"),因为"a""b"小于"c"

尾部Map

SortedMap接口有个tailMap()方法,这个方法返回大于等于参数key的键值对: 

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "1");
sortedMap.put("c", "3");
sortedMap.put("e", "5");
sortedMap.put("d", "4");
sortedMap.put("b", "2");

SortedMap tailMap = sortedMap.tailMap("c");

System.out.println(tailMap);

 

tailMap中包含 ("c", "3")("d", "4") ("e", "5"),因为"c", "d""e"大于或者等于参数"c"

map

SortedMap中还有个subMap(),这个方法返回SortedMap的一个子Map。subMap()方法中有两个参数是key的值,大于等于第一个key,小于第二个key:

SortedMap sortedMap = new TreeMap();

sortedMap.put("a", "1");
sortedMap.put("c", "3");
sortedMap.put("e", "5");
sortedMap.put("d", "4");
sortedMap.put("b", "2");

SortedMap subMap = sortedMap.subMap("b", "e");

System.out.println(subMap);

 

subMap中包含 ("b", "2) ("c", "3") ("d", "4") ,因为"b", "c" "d"都大于等于"b"并且小于 "e"

参考:http://tutorials.jenkov.com/java-collections/sortedmap.html

      https://blog.csdn.net/cgsyck/article/details/108449964

  • 3
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的Map集合是一种将键值对映射在一起的数据结构,可以通过键访问到对应的值。虽然Map本身不支持直接排序,但可以将其转化为List集合,然后通过对List进行排序来实现Map的排序。 通常情况下,Map的排序可以按键值和按值进行排序。按键值排序可以使用TreeMap等有序Map实现,也可以将Map转换为List后通过实现Comparator接口进行自定义排序。按值排序需要将Map转换为List并且使用Comparator接口实现自定义排序。 例如,下面是一个按键值排序的代码示例: ``` Map<String, Integer> map = new HashMap<>(); map.put("b", 2); map.put("a", 1); map.put("c", 3); Map<String, Integer> sortedMap = new TreeMap<>(map); System.out.println(sortedMap); // 输出 {a=1, b=2, c=3} ``` 上面的示例中,通过将HashMap转换为TreeMap,即可按键值排序输出。 下面是一个按值排序的代码示例: ``` Map<String, Integer> map = new HashMap<>(); map.put("b", 2); map.put("a", 1); map.put("c", 3); List<Map.Entry<String, Integer>> list = new ArrayList<>(map.entrySet()); Collections.sort(list, new Comparator<Map.Entry<String, Integer>>() { @Override public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) { return o1.getValue().compareTo(o2.getValue()); } }); System.out.println(list); // 输出 [(a, 1), (b, 2), (c, 3)] ``` 上面的示例中,将HashMap转换为List,并且实现Comparator接口按值排序输出。 总之,Java中的Map集合可以通过转换为List并且实现Comparator接口进行自定义排序,或者使用有序Map进行排序。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值