`

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中常用的数据结构

    TreeMap类实现了SortedMap接口,是一个基于树形结构的SortedMap实现类。TreeMap类使用树形结构来存储键值对,能够以一定的顺序来排序键值对。 Set接口 Set接口继承自Collection接口,是一个无序的集合,不能包含...

    Java容器类接口框架总览1

    Map.Entry代表键值对,SortedMap接口提供了按键排序的Map,NavigableMap进一步提供了导航功能,便于查找最近的键值对。 5. **Set接口** Set接口代表不允许重复元素的集合,继承自Collection接口。Set接口没有顺序...

    Java集合框架

    - TreeMap实现了SortedMap接口,它按照key的自然顺序或自定义比较器进行排序。它使用红黑树结构,支持高效的查找、插入和删除操作。 4. **SortedSet和SortedMap接口**: - SortedSet接口扩展了Set接口,其元素...

    Java中大集合

    本文将深入探讨标题中提到的HashMap类、IdentityHashMap类、SortedMap接口以及自定义类在Map中的使用,以及随机数在集合中的应用。 首先,HashMap类是Java中最常用的Map实现之一,它基于哈希表,提供了O(1)的平均...

    学习笔记 java\CoreJava笔记\CoreJava_day11

    HashMap是最基本的Map实现,不保证元素顺序,而TreeMap实现了SortedMap接口,可以按键的自然顺序或自定义比较器进行排序。 List接口中的方法如`add()`、`add(int index, E element)`、`addAll()`、`clear()`、`...

    Java集合排序及java集合类详解

    对于Map,排序主要是针对其键进行,可以使用SortedMap接口的实现类如TreeMap,或者使用Map的entrySet(),然后对其进行排序。 在实际编程中,选择合适的集合类取决于具体需求。例如,如果需要保持元素的插入顺序,...

    java的集合类教学

    6. **SortedMap接口**: - SortedMap是Map的一个子接口,它要求Map中的键按照升序排列,主要实现类是TreeMap。 7. **常用方法及工具类Collections**: - Collections工具类提供了很多静态方法,如对List进行排序...

    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集合知识大全

    #### 八、SortedMap接口 `SortedMap` 是`Map` 的子接口,它保证了键的排序,通常使用`TreeMap` 来实现。 #### 九、依赖关系 在集合框架中,“依赖”是指一个类或接口对另一个类或接口的使用。例如,`Collection` ...

    2020老杜最新Java零基础进阶视频教程-集合课件

    集合继承结构图展示了集合类之间的层次关系,例如List接口继承自Collection,SortedMap接口继承自Map,并且都规定了特定的排序规则。灰色部分表示已被废弃或不推荐使用的类和接口,如Vector和Stack,它们在多线程...

    java实现的map排序

    Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...

    Java集合框架常见面试题.pdf

    TreeMap则实现了SortedMap接口,元素按key的自然排序或者自定义比较器排序。 在Java 8及以后的版本中,HashMap进行了优化,引入了链表和红黑树的混合结构,当哈希冲突较多导致链表过长时,链表会自动转换为红黑树,...

    java中MAp介绍

    - `TreeMap`是基于红黑树的SortedMap接口实现,它可以按照键的自然顺序或者自定义的比较器进行排序。 - `TreeMap()`:创建一个空的TreeMap实例。 - `TreeMap(Map m)`:根据给定的Map创建一个新的TreeMap。 - `...

    Java集合框架使用总结.pdf

    HashMap是基于哈希表的Map实现,不保证元素顺序,而TreeMap实现了SortedMap接口,保证了键的排序。Hashtable与HashMap类似,但它是线程安全的。 在多线程环境中,Java集合框架提供了一些线程安全的类,如Vector、...

    java集合类的讲解文件

    SortedMap接口则保证键的排序规则。 文件中提到了几个重要的实现类: 1. **ArrayList**:ArrayList是一个动态数组,可以自动增长容量。它提供了toArray()方法将集合转换为数组,以及通过Arrays.asList()创建列表。...

    Java集合Collection、List、Set、Map使用详解

    TreeMap实现了SortedMap接口,保持键的自然顺序或自定义顺序;LinkedHashMap则保留插入顺序或访问顺序。 **ArrayList与LinkedList的区别** - 插入/删除:ArrayList在中间插入或删除元素需要移动后续元素,效率较低...

    java集合API

    Java集合API采用了一种基于接口的架构设计,其中定义了一系列的接口来规范集合的行为,并提供了多个实现类以满足不同的需求。 ##### 3.1 接口与实现 - **`Collection`**:这是所有集合的根接口,它提供了集合的...

Global site tag (gtag.js) - Google Analytics