您的位置:首页 > 其它

集合框架Set

2019-03-23 21:05 92 查看
集合框架Set
Day20------集合框架set

1 Set
Set:下方的接口有两个

HashSet: 是一个类

ThreeSet: 是一个类

无序,不可重复的容器
不能够添加重复元素

添加重复的元素的时候,就会把它覆盖了,变成一个。而且打印出来的顺序是依次排序的
相对于Lise:
有序可重复。两个相反的。
2 HashSet

构造方法来构造对象
特点:无序不重复的。(添加的顺序是无序的),打印是有序的,添加你可以随意添加

实例:无序是表示添加顺序无序


判断重复的标准是:hashcode值一样不一样
造成上边这种结果的解决方案:覆写hashCode

覆写了过后就一样了


这儿是把hashCode变成了1,那么后边的所有hashCode都编程1了。

覆写了hashCode之后还是会创建四个对象,这个不会改变的。

如果去掉两个就会比较的是地址了。 比较地址就会用equals来比较

覆写equals之后就变成一个了;

所以;影响hashset判断的条件就有两个;是用hashcode值和equals值来判断是否重复
实际开发情况:
直接 ctrl+shift+s 点一下生成hashCode方法即可,根据业务需求改变方法。

事实真名:hashcode是无序的,有序只是假象。

3 TreeSet
他是拥有自然排序的;

概念:Treeset是会排序的。(是无序不可重复的)
判断重复的标准是: 你要想排序必须实现computerable接口————-覆写computer To方法,

放入一个Interget类型的数字进去就报错了,而放在HashSet里边就不会
因为:TreeSet是会排序的,而HashSet不会排序的。 这就是导致报错的原因
上述类型为:类型转换异常
接口和实现类的差别:
接口下边实现的类也可以调用接口里边的方法;
Comparable:对实现它的每个类的对象进行排序。

里边有个方法:

比较

和传入compareTo(Object obj)里边传入的obj对象是否相等

实现的是

如果类要取对对象排序就实现compab就可以了
目的:比较对象

第一步:实现

第二步:覆写comparable接口里边的compareTo方法,这是个类

TreeSet具有排序功能:

对象的排序。
注意:自定义类的话必须实现接口comparable
功能自己去定义;

逻辑根据自己去设置;

在computer接口里边有两个方法,用来指定排序,当没有源码或者别人部门进行排序的时候我们就需要自己定义一个类去实现computer接口,然后覆写里边的computer方法。

自定义类指定的进行排序。

下方自定义类实现computer接口,
上方就可以new自定义类的对象了,然后在进行排序。
里边会返回三个整数;
0==排序第一个自身。
-1倒着排序
1顺着排序。
这是基于自定义类的排序。记住必须实现接口

这是自定义类的逻辑排序实现;

4 作业:
2、请说说ArrayList LinkedList HashSet TreeSet 底层的实现原理(建议多多百度几次),目前先了解一个大概
答:ArrayList:
1:底层实现是数组,默认长度是10.
2:add(),判断是否数组越界,是数组扩容为原来的两倍。
3:remove(),copy数组,size-1,释放空虚的空间。
HashSet:
底层实现是一个HashMap,把值存在map的key上,value存的是一个object对象,就是说底层的HashMap中value都是一样的。
HashSet是无序的,不允许重复。
LinkedHashSet:
基础自HashSet,底层实现是一个LinkedHashMap,通过equals()方法比较两个对象是否相等,初始容量16,加载因子0.75f.
使用链表维护数据的顺序,所有说是有序,不重复的,对象都是存在底层map的key上,所有允许有且只有一个对象为null。
LinkedList:
1.LinkedList基于链表实现
2.对于随机访问get和set,ArrayList觉得优于LinkedList,因为LinkedList要移动指针。
3.对于新增和删除操作add和remove,LinedList比较占优势,因为ArrayList要移动数据。
4.查找操作indexOf,lastIndexOf,contains等,两者差不多。

3、请说说==和equals的区别
答:==数用来比较基本的数据类型 在比较引用数据类型时比较的时对象的地址
Equals 比较的是对象的属性是否相等。

0、画Collection体系结构图

2、如果一个类已经实现了Comparable接口,然后把这个类的对象放入一个具有比较器的TreeSet,那么TreeSet会按照哪种规则来比较呢?

3、验证TreeSet判断对象是否重复和对象的equals有关系
4、设计一个学生类,具有字段:姓名,年龄,身高字段,然后创建多个学生对象保存到TreeSet中去;请使用自然排序和定制排序(比较器)分别实现如下效果: 先按照年龄排序,如果年龄相等则按照身高排序

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: