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
JAVA SortedMap接口的更多相关文章
- Java 数据类型:集合接口Map:HashTable;HashMap;IdentityHashMap;LinkedHashMap;Properties类读取配置文件;SortedMap接口和TreeMap实现类:【线程安全的ConcurrentHashMap】
Map集合java.util.Map Map用于保存具有映射关系的数据,因此Map集合里保存着两个值,一个是用于保存Map里的key,另外一组值用于保存Map里的value.key和value都可以是 ...
- SortedMap接口:进行排序操作。
回顾:SortedSet是TreeSet的实现接口,此接口可以排序. SortedMap接口同样可以排序,是TreeMap的实现接口,父类. 定义如下: public class TreeMap< ...
- SortedMap接口的实现类TreeMap介绍和实现Comparator自定义比较器(转)
与SortedSet接口类似,SortedMap也是一个结构,待排序的Map,其一个比较常用的实现类是TreeMap. TreeMap的put(K key, V value)方法在每添加一个元素时,都 ...
- SortedMap接口
SortedMap接口是排序接口,只要是实现了此接口的子类,都属于排序的子类,TreeMap也是此接口的一个子类. import java.util.Map; import java.util.Sor ...
- 深入理解Java的接口和抽象类(转)
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- 深入理解Java的接口和抽象类
深入理解Java的接口和抽象类 对于面向对象编程来说,抽象是它的一大特征之一.在Java中,可以通过两种形式来体现OOP的抽象:接口和抽象类.这两者有太多相似的地方,又有太多不同的地方.很多人在初学的 ...
- java微信接口之五—消息分组群发
一.微信消息分组群发接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/message/mass/sendall?access_t ...
- java微信接口之四—上传素材
一.微信上传素材接口简介 1.请求:该请求是使用post提交地址为: https://api.weixin.qq.com/cgi-bin/media/uploadnews?access_token=A ...
- android 学习随笔二十七(JNI:Java Native Interface,JAVA原生接口 )
JNI(Java Native Interface,JAVA原生接口) 使用JNI可以使Java代码和其他语言写的代码(如C/C++代码)进行交互. 问:为什么要进行交互? 首先,Java语言提供的类 ...
随机推荐
- 关于Clipboard和GlobalAlloc函数的关系
一句话:为了满足进程间通信,使用了clipboard的方法,clipboard是系统提供的一段任何进程都可以访问的公共内存块,malloc 和new分配的动态内存块是在进程的私有地址空间分配的,所以必 ...
- 【AtCoder Beginner Contest 074 C】Sugar Water
[链接]h在这里写链接 [题意] 让你在杯子里加糖或加水. (4种操作类型) 糖或水之间有一定关系. 糖和水的总量也有限制. 问你糖水浓度的最大时,糖和糖水的量. [题解] 写个dfs就好. 每次有4 ...
- 【CS Round #48 (Div. 2 only)】Water Volume
[链接]h在这里写链接 [题意] 在这里写题意 [题解] 枚举0在哪个位置就好. [错的次数] 0 [反思] 在这了写反思 [代码] #include <bits/stdc++.h> us ...
- 解题报告 之 HDU5305 Friends
解题报告 之 HDU5305 Friends Description There are people and pairs of friends. For every pair of friend ...
- 公钥,私钥和数字签名这样最好理解 分类: B3_LINUX 2015-05-06 16:25 59人阅读 评论(0) 收藏
一.公钥加密 假设一下,我找了两个数字,一个是1,一个是2.我喜欢2这个数字,就保留起来,不告诉你们(私钥),然后我告诉大家,1是我的公钥. 我有一个文件,不能让别人看,我就用1加密了.别人找到了这个 ...
- 11、DMA操作说明
先理解cache的作用CPU在访问内存时,首先判断所要访问的内容是否在Cache中,如果在,就称为“命中(hit)”,此时CPU直接从Cache中调用该内容:否则,就 称为“ 不命中”,CPU只好去内 ...
- Nginx+Tomcat+Memcached实现会话保持(MSM)
会话保持的三种方式 Session sticky会话绑定:通过在前端调度器的配置中实现统一session发送至同一后发端服务器 Session cluster会话集群:通过配置Tomcat保持所有To ...
- [Angular] Bind async requests in your Angular template with the async pipe and the "as" keyword
Angular allows us to conveniently use the async pipe to automatically register to RxJS observables a ...
- 《今天你买到票了吗?——从铁道部12306.cn站点漫谈电子商务站点的“海量事务快速处理”系统》
<今天你买到票了吗?--从铁道部12306.cn站点漫谈电子商务站点的"海量事务快速处理"系统> 首发地址: http://bbs.hpx-party.org/thre ...
- 借助gdb实现pstack
pstack.sh: #! /bin/sh if [ -z $1 ] then echo "gdb script for print stack" echo "usage ...