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 ...
随机推荐
- express解决ajax跨域访问session失效问题
最近在学习express,就用以前做的项目来进行express前后端分离的练手了,在做登陆注册的时候发现跨域的时候,session的值是会失效的,导致session里面的数据获取为undefined, ...
- .bat 文件学习
参考文章:http://www.cnblogs.com/glaivelee/archive/2009/10/07/1578737.html 重点: @echo off 关闭回显,不显示脚本中的命令 e ...
- 51nod1244 欧拉函数之和 杜教筛
和上一题差不多,一个是μ*I=e,一个是φ*I=Id 稍改就得到了这题的代码 (我会告诉你我一开始逆元算错了吗) #include <bits/stdc++.h> #define MAX ...
- 洛谷P4719 【模板】动态dp
https://www.luogu.org/problemnew/show/P4719 大概就是一条链一条链的处理(“链”在这里指重链),对于每一条链,对于其上每一个点,先算出它自身和所有轻儿子的贡献 ...
- 使用CSS3的translate和transition功能,控制一个两个div块的联动
之前的工作有接触到一些css3的新特性.div块的移动和回到初始位置,可以利用在开发中的很多地方.这里记录下来,下次就不用辛苦的灾区百度了. <html> <head> < ...
- centos下svnadmin的部署过程
1. 安装SVN #yum –y install subversion 2. 安装openjdk #yum –y list java* #yum –y install java-1.8.0 ...
- (转)Centos7安装配置NFS服务和挂载
Centos7安装配置NFS服务和挂载 原文:https://www.u22e.com/601.html NFS简介 NFS(Network File System)即网络文件系统,是FreeBSD支 ...
- MapReduce作业的执行流程
MapReduce任务执行总流程 一个MapReduce作业的执行流程是:代码编写 -> 作业配置 -> 作业提交 -> Map任务的分配和执行 -> 处理中间结果 -> ...
- vi命令使用
在vi下如何显示行号? 按Esc切换到命令行模式,输入: :set nu 如果您想每次进入vi都标出行号,编辑~/.vimrc文件.也就是在用户的主目录下,编辑存档.vimrc文件.里边写一行: se ...
- watir 的api在线文档
http://rubydoc.info/gems/watir-webdriver/frames http://rdoc.info/gems/watir-webdriver/frames http:// ...