`

JAVA SortedMap接口

 
阅读更多

SortedMap接口主要提供有序的Map实现。

 

Map的主要实现有HashMap,TreeMap,HashTable,LinkedHashMap。

 

TreeMap实现了SortedMap接口,保证了有序性。默认的排序是根据key值进行升序排序,也可以重写comparator方法来根据value进行排序。

 

HashMap与TreeMap的比较

 

public class SortedMapTest2 {

 

public static void main(String[] args) {

 

Map<String,Object> hashMap = new HashMap<String,Object>();

hashMap.put("1", "a");

hashMap.put("5", "b");

hashMap.put("2", "c");

hashMap.put("4", "d");

hashMap.put("3", "e");

Set<Entry<String, Object>> entry = hashMap.entrySet();

for(Entry<String, Object> temp : entry){

System.out.println("hashMap:"+temp.getKey()+" 值"+temp.getValue());  

}

 

System.out.println("\n");  

 

SortedMap<String,Object> sortedMap = new TreeMap<String,Object>();

sortedMap.put("1", "a");

sortedMap.put("5", "b");

sortedMap.put("2", "c");

sortedMap.put("4", "d");

sortedMap.put("3", "e");

Set<Entry<String, Object>> entry2 = sortedMap.entrySet();

for(Entry<String, Object> temp : entry2){

System.out.println("sortedMap:"+temp.getKey()+" 值"+temp.getValue());  

}

 

}

 

}

运算的结果为

 

hashMap:1 值a

hashMap:2 值c

hashMap:3 值e

hashMap:4 值d

hashMap:5 值b

 

sortedMap:1 值a

sortedMap:2 值c

sortedMap:3 值e

sortedMap:4 值d

sortedMap:5 值b

看上去还以为HashMap也保证了有序性,其实是随机的,如果值设置的复杂一点,如下例:

 

public class SortedMapTest3 {

 

public static void main(String[] args) {

 

Map<String,Object> hashMap = new HashMap<String,Object>();

hashMap.put("1b", "a");

hashMap.put("2", "b");

hashMap.put("4b", "d");

hashMap.put("3", "c");

hashMap.put("2b", "d");

hashMap.put("3b", "c");

Set<Entry<String, Object>> entry = hashMap.entrySet();

for(Entry<String, Object> temp : entry){

System.out.println("hashMap:"+temp.getKey()+" 值"+temp.getValue());  

}

 

System.out.println("\n");  

 

SortedMap<String,Object> sortedMap = new TreeMap<String,Object>();

sortedMap.put("1b", "a");

sortedMap.put("2", "b");

sortedMap.put("4b", "d");

sortedMap.put("3", "c");

sortedMap.put("2b", "d");

sortedMap.put("3b", "c");

Set<Entry<String, Object>> entry2 = sortedMap.entrySet();

for(Entry<String, Object> temp : entry2){

System.out.println("sortedMap:"+temp.getKey()+" 值"+temp.getValue());  

}

 

}

 

}

运算的结果是:

 

hashMap:2b 值d

hashMap:1b 值a

hashMap:2 值b

hashMap:3 值c

hashMap:4b 值d

hashMap:3b 值c

 

sortedMap:1b 值a

sortedMap:2 值b

sortedMap:2b 值d

sortedMap:3 值c

sortedMap:3b 值c

sortedMap:4b 值d

很显然只有TreeMap保证了有序性。

 

那如果想要根据value值来进行排序

 

public class SortedMapTest {

 

public static void main(String[] args) {

 

SortedMap<String,String> sortedMap = new TreeMap<String,String>();

sortedMap.put("1", "a");

sortedMap.put("5", "b");

sortedMap.put("2", "c");

sortedMap.put("4", "d");

sortedMap.put("3", "e");

Set<Entry<String, String>> entry2 = sortedMap.entrySet();

for(Entry<String, String> temp : entry2){

System.out.println("修改前 :sortedMap:"+temp.getKey()+" 值"+temp.getValue());  

}

System.out.println("\n");  

 

//这里将map.entrySet()转换成list

        List<Map.Entry<String,String>> list = 

        new ArrayList<Map.Entry<String,String>>(entry2);

        

        Collections.sort(list, new Comparator<Map.Entry<String,String>>(){

 

@Override

public int compare(Entry<String, String> o1, Entry<String, String> o2) {

// TODO Auto-generated method stub

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

}

       

        });

        

        for(Map.Entry<String,String> temp :list){

        System.out.println("修改后 :sortedMap:"+temp.getKey()+" 值"+temp.getValue());  

        }

}

 

}

运行结果为:

 

修改前 :sortedMap:1 值a

修改前 :sortedMap:2 值c

修改前 :sortedMap:3 值e

修改前 :sortedMap:4 值d

修改前 :sortedMap:5 值b

 

修改后 :sortedMap:1 值a

修改后 :sortedMap:5 值b

修改后 :sortedMap:2 值c

修改后 :sortedMap:4 值d

修改后 :sortedMap:3 值e

————————————————

版权声明:本文为CSDN博主「石硕页」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/u014209205/article/details/80480621

 

分享到:
评论

相关推荐

    Java期末复习-类集框架

    SortedMap接口、HashMap类、Hashtable类、Properties类、Map.Entry接口、WeakHashMap类、IndentityHashMap类 集合输出: Iterator、ListIterator、foreach、废除的Enumeration Collections工具类 Comparable接口、...

    java集合框架 解析

    java集合框架 3.6. LinkedHashSet类 ...4.2. SortedMap接口 4.3. AbstractMap抽象类 4.4. HashMap类和TreeMap类 4.4.1. HashMap类 4.4.2. TreeMap类 4.5. LinkedHashMap类 4.6. WeakHashMap类 4.6. IdentityHashMap类

    Java开发详解.zip

    031313_【第13章:Java类集】_SortedMap类笔记.pdf 031314_【第13章:Java类集】_集合工具类:Collections笔记.pdf 031315_【第13章:Java类集】_Stack类笔记.pdf 031316_【第13章:Java类集】_属性类:Properties...

    疯狂JAVA讲义

    7.6.2 SortedMap接口和TreeMap实现类 276 7.6.3 WeakHashMap实现类 279 7.6.4 IdentityHashMap实现类 280 7.6.5 EnumMap实现类 281 7.7 HashSet和HashMap的性能选项 282 7.8 操作集合的工具类:Collections 283...

    java-immutable-collections:Java的高效ImmutablePersistent集合

    Java的不可变集合 概述 Java库的不可变集合(JImmutable ... JImmutables.sortedMap() JImmutables.sortedMap(Comparator) LinkedHashMap JImmutableMap JImmutables.insertOrderMap() 哈希集 JImmutableSet

    Map实现类1

    3. Map的遍历方式 4. Map接口主要方法 5. SortedMap接口主要方法 6. NavigableMap接口主要方法 8. 参考 3. Map的遍

    java-basic:java基础测试-java8

    java-basicJava基础的一些测试:例如 ...&gt; Deque(双端队列):LinkedBlockingDequeMap(散列接口)-&gt; SortedMap(可排序的map)==============&gt;&gt;接口方法?1.1Queue队列接口: 入队:add() offer() 出队:remove() pee

    java的集合类教学

    集合类Collection:集合层次中的根接口,JDK没有提供这个接口直接的实现类。 Set:不能包含重复的元素。SortedSet是一个按照升序排列元素的Set。 List:是一个有序的集合,可以包含重复的元素。提供了按索引访问的...

    Java容器.xmind

    SortedMap 标记: class TreeMap 对键进行排序 HashTable 标记: class Properties 标记: class 线程安全,速度慢,不允许存放null键,null值,已被HashMap替代。 Collections 标记: 均以synchronized实现, 性能...

    Java并发编程(学习笔记).xmind

    线程安全的对象在其内部实现同步,因此多个接口可以通过公有接口来进行访问 保护对象:被保护的对象只能通过特定的锁来访问 将对象封装到线程安全对象中 由特定锁保护 保护对象的方法 对象的...

    java集合-TreeMap的使用

    TreeMap是一种基于红黑树实现的有序映射(SortedMap)。它实现了NavigableMap接口,可以按照键的自然顺序或自定义排序规则对键值对进行排序和访问。

    kcache:由Apache Kafka支持的内存中缓存

    KCache-由Apache Kafka支持的内存中缓存 KCache是​​一个客户端库,提供了由...KafkaCache的实例实现java.util.SortedMap接口。 这是一个示例用法: import io.kcache.* ; String bootstrapServers = " localhost:90

    javaSE代码实例

    14.7.5 SortedMap接口与TreeMap类 305 14.7.6 映射的遍历 308 14.8 栈在Java中的实现 309 14.8.1 Stack类的使用 309 14.8.2 Deque接口的使用 310 14.8.3 利用栈计算数学表达式 311 14.9 集合元素的常用...

    安卓毕业设计app项目源码6-android-interviewer:安卓面试官

    java集合框架Collection collection是集合框架的根,定义了集合操作的通用行为 继他之后存在四个子接口 list,map,set,queue list是有序collection接口 实现: arraylist是基于数组实现list接口的 线程不同步   ...

Global site tag (gtag.js) - Google Analytics