TreeSet学习,比较器学习
一.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学习,比较器学习相关推荐
- 深度学习 免费课程_深入学习深度学习,提供15项免费在线课程
深度学习 免费课程 by David Venturi 大卫·文图里(David Venturi) 深入学习深度学习,提供15项免费在线课程 (Dive into Deep Learning with ...
- vs2010 学习Silverlight学习笔记(7):控件样式与模板
概要: 终于知道Silverlight--App.xaml是干什么用的了,不仅可以用来封装样式(类似css),还可以制定控件模版...好强大的功能啊. 封装: 继续学习<一步一步学Silverl ...
- 与 Linux 一起学习:学习打字
"与 Linux 一起学习"的所有文章: 与 Linux 一起学习:学习打字 与 Linux 一起学习:学习物理 与 Linux 一起学习:学习音乐 与 Linux 一起学习:学习 ...
- 还只看花书,西瓜书?一文告诉你如何正确学习深度学习,从理论到实战。
如今春招已接近尾声,大家都知道今年就业形势整体不乐观,不仅应聘人数远远大于招聘岗位,而且面试难度加大,想拿到理想的offer更是难上加难! 这段时间,很多人都在自我充电,我也经常在后台给读者解答很多深 ...
- 最新版动手学习深度学习和GAN电子书免费下载!
今天给大家推荐一个GAN方面的优质公众号---机器学习与生成对抗网络.该公众号里分享了几本深度学习.GAN等好的电子书资源! 强烈推荐李沐等人的<动手学习深度学习>最新版!完整中文版 PD ...
- 2020人工智能课程超级大列表:深度学习-强化学习-图神经网络-自然语言处理等...
关注上方"深度学习技术前沿",选择"星标公众号", 资源干货,第一时间送达! 本篇博文主要为大家介绍一个课程网站,汇集了机器学习,深度学习.强化学习的各个方面, ...
- Deep Learning(深度学习)学习笔记整理系列之(五)
Deep Learning(深度学习)学习笔记整理系列 zouxy09@qq.com http://blog.csdn.net/zouxy09 作者:Zouxy version 1.0 2013-04 ...
- 从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!...
从团购网的漏洞看网站安全性问题 -- 安全 -- IT技术博客大学习 -- 共学习 共进步!: "" (Via.) 转载于:https://www.cnblogs.com/devo ...
- Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例
2019独角兽企业重金招聘Python工程师标准>>> 原文地址:Guava库学习:学习Guava EventBus(二)EventBus 事件订阅示例 上一篇Guava库学习:学习 ...
- java php mysql_系统学习javaweb13----MYSQL学习(使用PHP、SQL)1
系统学习javaweb13----MYSQL学习(使用PHP.SQL.mysqladmin)1 (本随笔是自学笔记,我学习的教程来自"菜鸟教程|MYSQL教程",十分感谢!) 目录 ...
最新文章
- LeetCode简单题之删除字符使字符串变好
- 第5章 案例研究: QuickCheck
- CentOS 初体验二十四:redis常用命令:Set
- rest_framework12:多登陆方式与自动签发token/配置过期时间
- RTP/RTCP/RTSP协议初探
- 深度学习实践与部署(开篇)
- 2020 OpenInfra Days China 圆满落幕,100+ 全球大咖共话开源基础设施智未来
- 【重磅】这家技术贼牛的开源公司开始狂招人啦!
- 迷茫中,请指教,谢谢!
- vue 用百度地图实现链家找房的效果
- 创建AD9361的vivado工程并导入SDK(ZYNQ平台)
- 基于51单片机用按键和nrf24l01模块控制小车移动
- 用opencv和python读取医学图片:mha
- Linux平台提取DSDT,ubuntu下提取DSDT SSDT
- python snmp_cmds库snmpwalk 中文正常显示方法
- python终端打印表格
- 固态硬盘跟机械硬盘的区别
- 俄罗斯 搜索引擎 邮箱创建
- react中ref使用方法解析
- 【知识图谱】实践篇——基于医疗知识图谱的问答系统实践(Part5-完结):信息检索与结果组装