一.Set是一个接口,不能直接实例对象,但是可以通过多态来实例对象,但一般都用他已知的实现类,hashSet,Set类他是继承至Collection重写了Collection里的所有方法,Set里的元素没有索引,所以,他不能用普通for循环。Set集合中不包含重复的元素。
二.哈希值:JDK根据对象的地址或字符串来算出int型的数值,Object类中有一个方法可以获取对象的哈希值eg: public int hashCode();返回哈希值,特点:同一个对象多次调用 返回相同的哈希码,默认情况不同的对象返回不同的哈希值,但是通过方法得写可以返回相同的值eg:String  就重写了hashCode(),字符对象就返回相同的哈希码System.out.println("重地".hashCode());System.out.println("通话".hashCode());
三.HashSet运用了hash算法,所以,集合中对元素的迭代顺序不保证,随机排序,同时实现了Set接口,不有索引,所以不能用普通for循环遍历确保唯一性的流程:根据对象算出对像的存储地址,然后,判断该位置上是否有元素,没有直接存入,有元素则比较该元素的HashCode和equals()方法 比较是否相同,相同则为同一元素,不存入数据,不同则存入元素。

   使用HashSet时,想要确保元素的唯一性,必须重写:hashCode()和equals()这两个方法 ,重写步骤和重写toString()一样,Alt+inster
四.LinkedHashSet集合 由哈希表和链表实现的Set接口,存入元素和取出元素的顺序是一致的,且不重复(哈希表,确保不重复)
五.TreeSet集合 由间接的实现了Set接口,是有序的,这里的有序不是指数据存取的顺序,而是指集合中的元素按一定顺序排列的。排序:自然排序和比较器排序 使用了那种排序方法取决于采用了那种构造方法TreeSet():无参构造方法 ,采用的自然排序方法(1-9,A-Z) 基于:NavigableSet来实现的TreeSet(Comparator comp),根据指定的比较器进行排序。TreeSet集合没有索引,所以,不能用普通for循环遍历。TreeSet() 无参构造方法(如:MyTreeSetDemo中的:A2),就是利用的自然排序,让集合中元素所属的类实现Comparable接口,重写compareTo(T)方法,在重写方法时,一定要注意主要条件和次要条件如Student类 代码中的 :A1TreeSet(comparaTo): 有参构造方法,集合就利用 comparaTo比较器给定的方法进行排序,也就是让构造方法接收Comparator的实现对象重写CompareTo(t1,t2)方法,这里有两种方式来处理比较器,内部类:TreeSetWithComparableDemo  中A3单独写比较器:StudentComparator类   TreeSetWithComparableDemo A4和A5

学生类:

package OneStageF;/*
implements Comparable<Student>:TreeSet()集合时必须要调用比较器方法,来实现对象的排序*/
public class Student implements Comparable<Student> {//----定义成员变量-----private String name;private int age;//----定义构造方法-----public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}//----定义成员方法------public void Show() {System.out.println(this.name + "," + this.age);}//----get,set -----public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}//----重写方法区-----//重写toString()方法,是为了输出元素@Overridepublic String toString() {return "Student{" +"name='" + name + '\'' +", age=" + age +'}';}/*重写compareTo(),是为了实现对象存在集合中,必须实现的比较方法return 0: 相等 判断重复值,return 1: 大于0,正序排列 从小到大,return -1: 小于0,倒序排列  从大到小*/@Overridepublic int compareTo(Student stu) {   //A1int num = this.getAge() - stu.getAge(); //升序  主要条件//int num = stu.getAge() - this.getAge(); //降序int num2 = num == 0 ? this.getName().compareTo(stu.getName()) : num;  //次要条件,名字排序return num2;}
}

无参构造TreeSet 类的调用

import java.util.TreeSet;public class MyTreeSetDemo {public static void main(String[] args) {//定义集合对象TreeSet<Student> ts = new TreeSet<Student>();  //  A2  TreeSet() 无参构造方法来创建集合,需要Student类实现Comparable//实例学生对象Student stuA = new Student("李X", 34);Student stuB = new Student("王X", 18);Student stuC = new Student("李XX", 18);Student stuD = new Student("张X", 35);//用add()方法加入学生对象ts.add(stuA);ts.add(stuB);ts.add(stuC);ts.add(stuD);//增加for遍历集合for(Student stu :ts){stu.Show();}}}

有 参构造TreeSet 类的调用

import java.util.Comparator;
import java.util.TreeSet;public class TreeSetWithComparableDemo {public static void main(String[] args) {//生成一个学生类的比较器StudentComarator stuComp = new StudentComarator();  //A4//利用TreeSet()有参构造方法来创建集合,并指定比较器 内部类TreeSet<Student> ts = new TreeSet<Student>(stuComp); //A5/*利用内部类来写 比较器的第二种写法  A3TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {@Overridepublic int compare(Student stuA, Student stuB) {int compAge = stuA.getAge() - stuB.getAge();//三目运算符: 条件A ?运算1:运算2   A为真返回运行1,A为假返回 运算2int compName = compAge == 0 ? stuA.getName().compareTo(stuB.getName()) : compAge;return compName;}});*///实例学生对象Student stuA = new Student("李Xx", 34);Student stuB = new Student("王Xx", 18);Student stuC = new Student("李X", 18);Student stuD = new Student("张Xx", 35);Student stuE = new Student("孙XX", 18);//用add()方法加入学生对象ts.add(stuA);ts.add(stuB);ts.add(stuC);ts.add(stuD);ts.add(stuE);//增加for遍历集合for (Student stu : ts) {stu.Show();}}
}

学生类比较器:

import java.util.Comparator;public class StudentComarator implements Comparator<Student> {@Overridepublic int compare(Student stuA, Student stuB) {int compAge = stuA.getAge() - stuB.getAge();//三目运算符: 条件A ?运算1:运算2   A为真返回运行1,A为假返回 运算2int compName = compAge == 0 ? stuA.getName().compareTo(stuB.getName()) : compAge;return compName;}
}

TreeSet学习,比较器学习相关推荐

  1. 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程

    深度学习 免费课程 by David Venturi 大卫·文图里(David Venturi) 深入学习深度学习,提供15项免费在线课程 (Dive into Deep Learning with ...

  2. vs2010 学习Silverlight学习笔记(7):控件样式与模板

    概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...

  3. 与 Linux 一起学习:学习打字

    "与 Linux 一起学习"的所有文章: 与 Linux 一起学习:学习打字 与 Linux 一起学习:学习物理 与 Linux 一起学习:学习音乐 与 Linux 一起学习:学习 ...

  4. 还只看花书,西瓜书?一文告诉你如何正确学习深度学习,从理论到实战。

    如今春招已接近尾声,大家都知道今年就业形势整体不乐观,不仅应聘人数远远大于招聘岗位,而且面试难度加大,想拿到理想的offer更是难上加难! 这段时间,很多人都在自我充电,我也经常在后台给读者解答很多深 ...

  5. 最新版动手学习深度学习和GAN电子书免费下载!

    今天给大家推荐一个GAN方面的优质公众号---机器学习与生成对抗网络.该公众号里分享了几本深度学习.GAN等好的电子书资源! 强烈推荐李沐等人的<动手学习深度学习>最新版!完整中文版 PD ...

  6. 2020人工智能课程超级大列表:深度学习-强化学习-图神经网络-自然语言处理等...

    关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本篇博文主要为大家介绍一个课程网站,汇集了机器学习,深度学习.强化学习的各个方面, ...

  7. Deep Learning(深度学习)学习笔记整理系列之(五)

    Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...

  8. 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...

    从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!: "" (Via.) 转载于:https://www.cnblogs.com/devo ...

  9. Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例

    2019独角兽企业重金招聘Python工程师标准>>> 原文地址:Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例 上一篇Guava库学习:学习 ...

  10. java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1

    系统学习javaweb13----MYSQL学习(使用PHP.SQL.mysqladmin)1 (本随笔是自学笔记,我学习的教程来自"菜鸟教程|MYSQL教程",十分感谢!) 目录 ...

最新文章

  1. LeetCode简单题之删除字符使字符串变好
  2. 第5章 案例研究: QuickCheck
  3. CentOS 初体验二十四:redis常用命令:Set
  4. rest_framework12:多登陆方式与自动签发token/配置过期时间
  5. RTP/RTCP/RTSP协议初探
  6. 深度学习实践与部署(开篇)
  7. 2020 OpenInfra Days China 圆满落幕,100+ 全球大咖共话开源基础设施智未来
  8. 【重磅】这家技术贼牛的开源公司开始狂招人啦!
  9. 迷茫中,请指教,谢谢!
  10. vue 用百度地图实现链家找房的效果
  11. 创建AD9361的vivado工程并导入SDK(ZYNQ平台)
  12. 基于51单片机用按键和nrf24l01模块控制小车移动
  13. 用opencv和python读取医学图片:mha
  14. Linux平台提取DSDT,ubuntu下提取DSDT SSDT
  15. python snmp_cmds库snmpwalk 中文正常显示方法
  16. python终端打印表格
  17. 固态硬盘跟机械硬盘的区别
  18. 俄罗斯 搜索引擎 邮箱创建
  19. react中ref使用方法解析
  20. 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part5-完结):信息检索与结果组装

热门文章

  1. 第七代微软小冰发布:全双工语言交互技术已经通过车载设备完成测试
  2. 支付宝/财付通霸占移动支付市场:还有谁能拥有姓名?
  3. 抢先一步 华为将于7月26日发布首款5G智能手机
  4. 红米旗舰机命名Redmi X?卢伟冰:会有更好的名字
  5. 苹果官网上架Apple Watch Series 3官翻机:1869元起
  6. Java并发编程之LinkedBlockingQueue
  7. 撩开Docker的面纱
  8. hashmap扩容线程安全问题_HashMap在1.7 1.8中的线程安全问题
  9. 我的docker随笔32:sftp服务部署
  10. Golang实践录:静态资源文件整合:web服务