TreeMap 底层是红黑树 排序是根据key值进行的 添加元素时异常 Comparable异常 Comparator比较自定义对象放在键的位置
package com.swift; import java.util.Comparator;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap; public class Map_keySet_entrySet { public static void main(String[] args) {
/*
* TreeMap 集合存储自定义对象,并使用 2 中方式遍历获取
*/ Map<Person,String> hm = new HashMap<Person, String>();
hm.put(new Person("lisi",18), "加拿大");
hm.put(new Person("zhangsa",17), "澳大利亚");
hm.put(new Person("zhangsa",17), "澳大利亚");
hm.put(new Person("wangwu",20), "新加坡");
hm.put(new Person("zhaoliu",19), "新西兰");
hm.put(new Person("zhaoliu",19), "新西兰");
hm.put(new Person("lisa",22), "迪拜"); //使用TreeMap无法排序比较是会出现Comparable错误 这时需要自己弄比较器
Map<Person,String> tree = new TreeMap<Person, String>(new Comparator<Person>() { @Override
public int compare(Person arg0, Person arg1) {
int num=arg0.getAge()-arg1.getAge();
return num==0?arg0.getName().compareTo(arg1.getName()):num;
} });
tree.put(new Person("lisisi",18), "china"); //keySet方法一
Set<Person> set=hm.keySet();
for(Person per:set) {
System.out.println("人员:"+per.toString()+"来自:"+hm.get(per));
} Set<Person> set1=tree.keySet();
for(Person per:set1) {
System.out.println("人员:"+per.toString()+"来自:"+tree.get(per));
} //entrySet方法二
for(Map.Entry<Person, String> en:hm.entrySet()) {
System.out.println();
System.out.println("人员:"+en.getKey().toString()+"来自:"+en.getValue());
} Map<Person,String> tree1 = new TreeMap<Person, String>(new Comparator<Person>() { @Override
public int compare(Person arg0, Person arg1) {
int num=arg0.getAge()-arg1.getAge();
return num==0?arg0.getName().compareTo(arg1.getName()):num;
} });
tree1.put(new Person("fengqichanglin",18), "langyabang");
System.out.println();
Iterator<?> it=tree1.entrySet().iterator();
while(it.hasNext()) {
Entry<Person,String> entry=(Entry<Person, String>) it.next();
System.out.println(entry.getKey().toString()+entry.getValue());
} } }
package sortmap_demo; import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import java.util.TreeMap; public class CollectionsSort { public static void main(String[] args) { Map<Integer,User> map=new TreeMap<Integer,User>();
map.put(1,new User("张三",28));
map.put(2,new User("李四",29));
map.put(3,new User("王五",30));
map.put(4,new User("赵六",31));
Set<Entry<Integer, User>> set = map.entrySet();
List<Entry<Integer, User>> list = new ArrayList<Entry<Integer, User>>(set);
Collections.sort(list,new Comparator<Entry<Integer, User>>() { @Override
public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
return o2.getValue().getAge()-o1.getValue().getAge();
}
});
for (Entry<Integer, User> u : list) {
System.out.println(u.getKey()+"--"+u.getValue());
}
}
}
不颠倒key和value的位置,用list集合api排序的方法
TreeMap根据key的Comparator对象排序方法
package sortmap_demo; import java.util.Comparator;
import java.util.Map;
import java.util.TreeMap; public class HashMapDemo { public static void main(String[] args) { Map<User,Integer> map=new TreeMap<User,Integer>(new Comparator<User>() { @Override
public int compare(User o1, User o2) {
if(o1.getAge()>o2.getAge()){
return -1;
}else if(o1.getAge()==o2.getAge()){
return 0;
}else{
return 1;
}
}
});
map.put(new User("张三",28),1);
map.put(new User("李四",29),2);
map.put(new User("王五",30),3);
map.put(new User("赵六",31),4);
for (User u : map.keySet()) {
System.out.println(u+"--"+map.get(u));
}
}
}
TreeMap 底层是红黑树 排序是根据key值进行的 添加元素时异常 Comparable异常 Comparator比较自定义对象放在键的位置的更多相关文章
- TreeMap:是基于红黑树的Map接口的实现
> TreeMap:是基于红黑树的Map接口的实现. 红黑树:平衡二叉树 取出时,可以有三种方式:前序遍历,中序遍历,后序遍历 >排序: A 自然排序 --TreeMap无参构造 Tre ...
- stl map底层之红黑树插入步骤详解与代码实现
转载注明出处:http://blog.csdn.net/mxway/article/details/29216199 本篇文章并没有详细的讲解红黑树各方面的知识,只是以图形的方式对红黑树插入节点需要进 ...
- 红黑树之 原理和算法详细介绍(阿里面试-treemap使用了红黑树) 红黑树的时间复杂度是O(lgn) 高度<=2log(n+1)1、X节点左旋-将X右边的子节点变成 父节点 2、X节点右旋-将X左边的子节点变成父节点
红黑树插入删除 具体参考:红黑树原理以及插入.删除算法 附图例说明 (阿里的高德一直追着问) 或者插入的情况参考:红黑树原理以及插入.删除算法 附图例说明 红黑树与AVL树 红黑树 的时间复杂度 ...
- 【算法】通过TreeMap理解红黑树
本文以Java TreeMap为例,从源代码层面,结合详细的图解,剥茧抽丝地讲解红黑树(Red-Black tree)的插入,删除以及由此产生的调整过程. 总体介绍 Java TreeMap实现了So ...
- TreeMap红黑树
Java TreeMap实现了SortedMap接口,也就是说会按照key的大小顺序对Map中的元素进行排序,key大小的评判可以通过其本身的自然顺序(natural ordering),也可以通过构 ...
- 红黑树规则,TreeSet原理,HashSet特点,什么是哈希值,HashSet底层原理,Map集合特点,Map集合遍历方法
==学习目标== 1.能够了解红黑树 2.能够掌握HashSet集合的特点以及使用(特点以及使用,哈希表数据结构) 3.能够掌握Map集合的特点以及使用(特点,常见方法,Map集合的遍历) 4.能够掌 ...
- 【深入理解Java集合框架】红黑树讲解(上)
来源:史上最清晰的红黑树讲解(上) - CarpenterLee 作者:CarpenterLee(转载已获得作者许可,如需转载请与原作者联系) 文中所有图片点击之后均可查看大图! 史上最清晰的红黑树讲 ...
- 通过分析 JDK 源代码研究 TreeMap 红黑树算法实现
本文转载自http://www.ibm.com/developerworks/cn/java/j-lo-tree/ 目录: TreeSet 和 TreeMap 的关系 TreeMap 的添加节点 Tr ...
- java中treemap和treeset实现(红黑树)
java中treemap和treeset实现(红黑树) TreeMap 的实现就是红黑树数据结构,也就说是一棵自平衡的排序二叉树,这样就可以保证当需要快速检索指定节点. TreeSet 和 Tre ...
随机推荐
- java 多线程下载文件并实时计算下载百分比(断点续传)
多线程下载文件 多线程同时下载文件即:在同一时间内通过多个线程对同一个请求地址发起多个请求,将需要下载的数据分割成多个部分,同时下载,每个线程只负责下载其中的一部分,最后将每一个线程下载的部分组装起来 ...
- Maven对坐标的管理 自动导入传递依赖 坐标和传递依赖分级显示
- H.天神的密码
链接:https://ac.nowcoder.com/acm/contest/903/H 题意: 2018年,icebound打开了神殿.而在2019年,icebound正在试图破解天神的密码,以期获 ...
- Educational Codeforces Round 65 (Rated for Div. 2) C. News Distribution
链接:https://codeforces.com/contest/1167/problem/C 题意: In some social network, there are nn users comm ...
- UVa1471
保留有价值的数字的做法,实际上这道题因为n只有1e5,所以不需要这种优化. #include<bits/stdc++.h> #define inf 0x3f3f3f3f ; using n ...
- Hive_Hive的数据模型_桶表
对数据进行HASH运算,放在不同文件中,降低热块,提高查询速度. 例如:根据sname进行hash运算存入5个桶中. create table bucket_table(sid int, sname ...
- TestNG ABC
TestNG ABC 资源 官网 :http://testng.org/doc/index.html Maven示例 <dependency> <groupI ...
- 第十五章 提升用户体验 之 设计实现MVC controllers 和 actions
1. 概述 controllers 和 actions 是 ASP.NET MVC4中非常重要的组成部分. controller管理用户和程序间的交互,使用action作为完成任务的方式. 如果是包含 ...
- 学JS的书籍
1.JavaScript DOM 编程艺术 [说明] 这本书最大的特点就是简明易懂,循序渐进,适合初学者,非常容易上手. 计划:三天读完 读书总结:待写 2.Javascript权威指南 特点是权威. ...
- C++ 中函数后面跟const是什么意思
问题:c++:void display( ) const 中的const是什么意思?简答:意思是除了表明了mutable的成员变量以外该类的其他的成员变量在这个函数内一律不能修改. 详细:加const ...