1 package cn.itcast.p5.treeset.demo;
2
3 import java.util.Iterator;
4 import java.util.TreeSet;
5
6 import cn.itcast.p.bean.Person;
7
8 public class TreeSetDemo {
9
10 public static void main(String[] args) {
11 // TODO Auto-generated method stub
12 // demo1();
13 TreeSet ts = new TreeSet(/*new ComparatorByName()*/);//比较器排序优先于person的自然排序,实际开发比较器常用,person一般会实现comparator接口
14 /*
15 * 以Person对象的年龄进行从小到大的排序。
16 *
17 */
18 ts.add(new Person("zhangsan",28));
19 ts.add(new Person("wangwu",29));
20 ts.add(new Person("lisi",21));
21 ts.add(new Person("zhouqi",29));
22 ts.add(new Person("zhaoliu",25));//Person cannot be cast to class java.lang.Comparable
23
24 Iterator it = ts.iterator();
25
26 while(it.hasNext()) {
27 Person p = (Person)it.next();
28
29 System.out.println(p.getName()+":"+p.getAge());
30 }
31 }
32
33
34
35 /**
36 *
37 */
38 public static void demo1() {
39 TreeSet ts = new TreeSet();
40
41 ts.add("abc");
42 ts.add("zaa");
43 ts.add("aa");
44 ts.add("nba");
45 ts.add("cba");
46
47 Iterator it = ts.iterator();
48
49 while(it.hasNext()) {
50 System.out.println(it.next());
51 }
52 }
53
54 }

TreeSetDemo

 1 package cn.itcast.p.bean;
2
3 public class Person /*treeset用*/implements Comparable {
4 private String name;
5 private int age;
6
7
8 public Person() {
9 super();
10 // TODO Auto-generated constructor stub
11 }
12 public Person(String name, int age) {
13 super();
14 this.name = name;
15 this.age = age;
16
17 }
18
19 @Override
20 public int hashCode() {
21 System.out.println(this+".....hashCode");
22 // TODO Auto-generated method stub
23 return name.hashCode()+age*27;//age后面乘以一个数增大离散程度,减少返回哈希值相等的几率
24 //好比张三哈希值20 年龄40 李四哈希值30,年龄30 结果哈希值一样
25 //乘一个数后就不一样了离散程度变大了
26
27
28 //return 100;//会比较equals
29 }
30 public boolean equals(Object obj) {
31 //健壮性
32 if (this == obj) {//有可能传入相同的对象,可以先行判断是否为同一对象add(p) add(p)这种传入两次
33 return true;
34 }
35 if (!(obj instanceof Person)) {//判断是否为Person类型,类型不一致也不应该传入
36 throw new ClassCastException("类型错误");
37 }
38
39 // System.out.println(this+"...equals...."+obj);
40 Person p = (Person)obj;
41
42
43 return this.name.equals(p.name) && this.age == p.age;
44 }
45 public String getName() {
46 return name;
47 }
48 public void setName(String name) {
49 this.name = name;
50 }
51 public int getAge() {
52 return age;
53 }
54 public void setAge(int age) {
55 this.age = age;
56 }
57 //ctrl+alt+s 快捷构造set,get方法 初始化等
58 public String toString() {
59 return name+":"+age;
60 }
61 @Override
62 public int compareTo(Object o) {//对象的自然排序(treeset)
63 // TODO Auto-generated method stub
64 Person p = (Person)o;
65 int temp = this.age - p.age;
66 return temp==0?this.name.compareTo(p.name):temp;//主要条件次要条件,以年龄
67
68 // int temp = this.name.compareTo(p.name);
69 // return temp==0?this.age-p.age:temp;//以名字为主要条件
70 /*
71 * if (this.age>p.age)
72 * return 1;
73 *
74 * if (this.age<p.age)
75 * return -1;
76 * if (this.age == p.age) {
77 * return this.name.compareTo(p.name);
78 * }
79 */
80
81 }
82 }

Person

见集合框架TXT

集合框架-TreeSet集合的更多相关文章

  1. 集合框架-TreeSet集合-二叉树

    1 package cn.itcast.p5.treeset.demo; 2 3 import java.util.Iterator; 4 import java.util.TreeSet; 5 6 ...

  2. JAVASE02-Unit04: 集合框架 、 集合操作 —— 线性表

    Unit04: 集合框架 . 集合操作 -- 线性表 操作集合元素相关方法 package day04; import java.util.ArrayList; import java.util.Co ...

  3. 集合框架-TreeSet

    TreeSet是Set集合的常见子类. TreeSet:底层结构是 二叉树 元素是有排序的,但是不可以有重复元素. 相关代码演练: /* TreeSet ;元素是有序的,但是不可以元素重复. */ i ...

  4. java 集合框架(TreeSet操作,自动对数据进行排序,重写CompareTo方法)

    /*TreeSet * treeSet存入数据后自动调用元素的compareTo(Object obj) 方法,自动对数据进行排序 * 所以输出的数据是经过排序的数据 * 注:compareTo方法返 ...

  5. 《java入门第一季》之集合框架TreeSet存储元素自然排序以及图解

    这一篇对TreeSet做介绍,先看一个简单的例子: * TreeSet:能够对元素按照某种规则进行排序.  * 排序有两种方式  * A:自然排序: 从小到大排序  * B:比较器排序    Comp ...

  6. 集合框架-Map集合

    * Map集合和Collection集合的区别? * Map集合存储元素是成对出现的,Map集合的键是唯一的,值是可重复的.可以把这个理解为:夫妻对 * Collection集合存储元素是单独出现的, ...

  7. 集合框架-Set集合

    代码: Collection c = new ArrayList(); c.add("hello"); c.add("world"); c.add(" ...

  8. 浅谈集合框架六——集合扩展:Arrays工具类、集合与数组相互转换方式;

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

  9. 浅谈集合框架五——集合框架扩展:Collections工具类的使用,自定义比较器

    最近刚学完集合框架,想把自己的一些学习笔记与想法整理一下,所以本篇博客或许会有一些内容写的不严谨或者不正确,还请大神指出.初学者对于本篇博客只建议作为参考,欢迎留言共同学习. 之前有介绍集合框架的体系 ...

随机推荐

  1. c++参数入栈顺序和参数计算顺序

    关于 本文涉及到代码,演示环境为:win10 + VS2017 ,ubuntu+clang clang版本: 参数入栈顺序 顺序 几种常见的函数参数入栈顺序,还有两种就不介绍了(__clrcall._ ...

  2. 【九度OJ】题目1087:约数的个数 解题报告

    [九度OJ]题目1087:约数的个数 解题报告 标签(空格分隔): 九度OJ 原题地址:http://ac.jobdu.com/problem.php?pid=1087 题目描述: 输入n个整数,依次 ...

  3. 【LeetCode】724. Find Pivot Index 解题报告(Python)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 先求和,再遍历 日期 题目地址:https://le ...

  4. 【LeetCode】738. Monotone Increasing Digits 解题报告(Python)

    [LeetCode]738. Monotone Increasing Digits 解题报告(Python) 标签(空格分隔): LeetCode 作者: 负雪明烛 id: fuxuemingzhu ...

  5. 【LeetCode】74. Search a 2D Matrix 解题报告(Python & C++)

    作者: 负雪明烛 id: fuxuemingzhu 个人博客: http://fuxuemingzhu.cn/ 目录 题目描述 题目大意 解题方法 左下或者右上开始查找 顺序查找 库函数 日期 题目地 ...

  6. Gradient-based Hyperparameter Optimization through Reversible Learning

    目录 概 主要内容 算法 finite precision arithmic 实验 Maclaurin D, Duvenaud D, Adams R P, et al. Gradient-based ...

  7. 基于Spring MVC + Spring + MyBatis的【野生动物保护系统】

    资源下载:https://download.csdn.net/download/weixin_44893902/45603787 练习点设计: 模糊查询.删除.新增.修改 一.语言和环境 实现语言:J ...

  8. maven打包报错 Fatal error compiling: tools.jar not found: C:\Program Files\Java\jre1.8.0_151\..\lib\tool

    maven 打包报错  [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.5.1:comp ...

  9. 发布 vscode 插件 Cnblogs Client For VSCode 预览版

    为了方便大家使用 vscode 发布博文,我们做了一个小插件,今天发布预览版,欢迎大家试用并反馈问题与建议. 插件的英文名称是 Cnblogs Client For VSCode,简称是 vscode ...

  10. python 日志logging设置按天进行保存,保存近7天,过期日志自动清理

    参考文章(写的很详细):https://www.cnblogs.com/xujunkai/p/12364619.html 前言: 跑接口自动化或者其他程序运行时,如果只能保存一份log文件,可能会存在 ...