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 ...
随机推荐
- uoj#388. 【UNR #3】配对树(线段树合并)
传送门 先考虑一个贪心,对于一条边来说,如果当前这个序列中在它的子树中的元素个数为奇数个,那么这条边就会被一组匹配经过,否则就不会 考虑反证法,如果在这条边两边的元素个数都是偶数,那么至少有两组匹配经 ...
- Kali Linux 工具清单
Kali Linux 工具清单 Information Gathering acccheck ace-voip Amap Automater bing-ip2hosts braa CaseFile C ...
- maven - 初识
一.Maven是什么? Maven官网的描述:Apache Maven is a software project management and comprehension tool. Based o ...
- Selenium 开源书(一): Selenium历史
Selenium历史 Selenium最初由Jason Huggins于2004年开发,作为ThoughtWorks的内部工具.Huggins后来加入了ThoughtWorks的其他程序员和测试人员, ...
- 【手撸一个ORM】第八步、查询工具类
一.实体查询 using MyOrm.Commons; using MyOrm.DbParameters; using MyOrm.Expressions; using MyOrm.Mappers; ...
- net core建站
带你快速进入.net core的世界 阅读目录 vmware虚拟机安装 CentOS7.3安装 Windows的客户端软件 .NET Core1.1安装 nginx1.12.1安装 配置防火墙 ...
- 040 Combination Sum II 组合总和 II
给定候选号码数组 (C) 和目标总和数 (T),找出 C 中候选号码总和为 T 的所有唯一组合.C 中的每个数字只能在组合中使用一次.注意: 所有数字(包括目标)都是正整数. 解决方案集不 ...
- 050 Pow(x, n)
实现 pow(x, n).示例 1:输入: 2.00000, 10输出: 1024.00000示例 2:输入: 2.10000, 3输出: 9.26100详见:https://leetcode.com ...
- MVC View与Controller分离
新建了一个 Separate 解决方案, 如下图 Separate.UI UI层. 引用 Separate.Home Separate.Home 把Home控制器分享到 一个类库中 并引用(Sy ...
- Mybatis find_in_set 子查询,替代 in
1. Mapper文件 2.dao层 3.生成Sql