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
相关推荐
TreeMap类实现了SortedMap接口,是一个基于树形结构的SortedMap实现类。TreeMap类使用树形结构来存储键值对,能够以一定的顺序来排序键值对。 Set接口 Set接口继承自Collection接口,是一个无序的集合,不能包含...
Map.Entry代表键值对,SortedMap接口提供了按键排序的Map,NavigableMap进一步提供了导航功能,便于查找最近的键值对。 5. **Set接口** Set接口代表不允许重复元素的集合,继承自Collection接口。Set接口没有顺序...
- TreeMap实现了SortedMap接口,它按照key的自然顺序或自定义比较器进行排序。它使用红黑树结构,支持高效的查找、插入和删除操作。 4. **SortedSet和SortedMap接口**: - SortedSet接口扩展了Set接口,其元素...
本文将深入探讨标题中提到的HashMap类、IdentityHashMap类、SortedMap接口以及自定义类在Map中的使用,以及随机数在集合中的应用。 首先,HashMap类是Java中最常用的Map实现之一,它基于哈希表,提供了O(1)的平均...
HashMap是最基本的Map实现,不保证元素顺序,而TreeMap实现了SortedMap接口,可以按键的自然顺序或自定义比较器进行排序。 List接口中的方法如`add()`、`add(int index, E element)`、`addAll()`、`clear()`、`...
对于Map,排序主要是针对其键进行,可以使用SortedMap接口的实现类如TreeMap,或者使用Map的entrySet(),然后对其进行排序。 在实际编程中,选择合适的集合类取决于具体需求。例如,如果需要保持元素的插入顺序,...
6. **SortedMap接口**: - SortedMap是Map的一个子接口,它要求Map中的键按照升序排列,主要实现类是TreeMap。 7. **常用方法及工具类Collections**: - Collections工具类提供了很多静态方法,如对List进行排序...
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类
#### 八、SortedMap接口 `SortedMap` 是`Map` 的子接口,它保证了键的排序,通常使用`TreeMap` 来实现。 #### 九、依赖关系 在集合框架中,“依赖”是指一个类或接口对另一个类或接口的使用。例如,`Collection` ...
集合继承结构图展示了集合类之间的层次关系,例如List接口继承自Collection,SortedMap接口继承自Map,并且都规定了特定的排序规则。灰色部分表示已被废弃或不推荐使用的类和接口,如Vector和Stack,它们在多线程...
Java中实现Map排序的方式主要有两种,一种是使用TreeMap,另一种是使用SortedMap接口。HashMap内部元素是无序的,它不会记录插入顺序,也不保证顺序。如果需要有序的Map,可以使用TreeMap,它会根据键的自然顺序进行...
TreeMap则实现了SortedMap接口,元素按key的自然排序或者自定义比较器排序。 在Java 8及以后的版本中,HashMap进行了优化,引入了链表和红黑树的混合结构,当哈希冲突较多导致链表过长时,链表会自动转换为红黑树,...
- `TreeMap`是基于红黑树的SortedMap接口实现,它可以按照键的自然顺序或者自定义的比较器进行排序。 - `TreeMap()`:创建一个空的TreeMap实例。 - `TreeMap(Map m)`:根据给定的Map创建一个新的TreeMap。 - `...
HashMap是基于哈希表的Map实现,不保证元素顺序,而TreeMap实现了SortedMap接口,保证了键的排序。Hashtable与HashMap类似,但它是线程安全的。 在多线程环境中,Java集合框架提供了一些线程安全的类,如Vector、...
SortedMap接口则保证键的排序规则。 文件中提到了几个重要的实现类: 1. **ArrayList**:ArrayList是一个动态数组,可以自动增长容量。它提供了toArray()方法将集合转换为数组,以及通过Arrays.asList()创建列表。...
TreeMap实现了SortedMap接口,保持键的自然顺序或自定义顺序;LinkedHashMap则保留插入顺序或访问顺序。 **ArrayList与LinkedList的区别** - 插入/删除:ArrayList在中间插入或删除元素需要移动后续元素,效率较低...
Java集合API采用了一种基于接口的架构设计,其中定义了一系列的接口来规范集合的行为,并提供了多个实现类以满足不同的需求。 ##### 3.1 接口与实现 - **`Collection`**:这是所有集合的根接口,它提供了集合的...