黑马程序员__Java集合框架SET集合
来源:互联网 发布:骨关节功能解剖学知乎 编辑:程序博客网 时间:2024/05/17 06:30
------- android培训、java培训、期待与您交流! ----------
Set集合
不允许存储重复元素,没有下标,无序集合,存储的顺序和取出的顺序不一定一致
Set接口中的方法,和Collection中的方法一致的
1. HashSet集合
底层是哈希表结构
线程不安全
允许存储null
无序,不重复
为什么存储自定义对象,重写了equals没有效果
HashSet底层的哈希表的原理,如何去掉重复对象呢
哈希值:
每一个对象,都有自己的哈希值
哈希值是一个对象建立后,JVM根据哈希算法,计算出来的一个十进制数
这个十进制数就是哈希值
Person@123EA21
123EA21 哈希值,哈希值不是地址值
在Object类中,有一个方法hashCode()计算哈希值的,本地方法
程序演示哈希值
结论,HashSet集合,存储对象的时候
依据是对象的哈希值码,如果对象的哈希值一致,再次比较equals
返回真,同一个对象,不存储
返回假,后进来的对象,像笼屉一样,挂靠在上一个对象的下面
哈希值,存储的是哈希值,桶状结构
当将对象存储到HashSet集合的时候,集合首先会调用对象的hashCode方法,获取哈希值
,如果两个对象的哈希值一致,再次调用equals方法
自定义定的对象,有肯能被存储到HashSet集合,必须重写hashCode equals方法
2. 两个对象
如果哈希值相同 equals 一定返回真吗 No
如果equals返回真,两个对象一定具有相同的哈希值吗 YES
3. TreeSet 集合
TreeSet集合,对存储到的对象进行排序
在TreeSet集合中,存储自定义对象的时候,抛出类型转换异常
Person不能被转换成java.lang.Comparable
此接口强行对实现它的每个类的对象进行整体排序。这种排序被称为类的自然排序
实现这个接口的累,进行整体排序,自然顺序
TreeSet集合,需要对存储的对象进行排序,TreeSet集合排序的依据是什么?
依据的是对象的自然顺序,凡是实现了Comparable接口的,都叫做自然顺序
Person类,没有实现Comparable接口,不具备自然顺序
JDK1.7,1.5版本,TreeSet存储一个对象,出现异常,对象没有自然顺序
JDK1.6版本,存储一个对象,不会出现异常,存储一个以上的时候,出现异常
存储的是String类对象,被TreeSet排序了,并且没有异常
String类实现了Comparable接口
String类,比较自然顺序的方法compareTo
s1.compareTo(s2)
如果s1 比 s2 小 小于0
如果s1 比 s2 大 大于0
如果s1 和s2一样 返回0
存储字符串的时候,TreeSet集合,会调用String类中的compareTo方法,实现排序
TreeSet(Comparator comparator)
构造一个新的空 TreeSet,它根据指定比较器进行排序。
TreeSet集合,构造方法中,传递一个参数,Comparator类型
Comparator是一个比较器,用来比较对象的
java.lang.Comparable 实现接口,类具备了自然顺序
java.util.Comparator 比较器,比较器优先
定义类,实现Comparator接口
建立TreeSet对象的时候,在构造方法中,传递接口的实现类对象
TreeSet集合,就会安照自定义的比较器进行排序了
定义比较器三步骤
定义类,实现java.util.Comparator接口
重写compare方法
建立TreeSet集合,传递比较器对象
4. TreeSet集合案例
集合中存储String对象,按照长度排序,如果长度一致,按照字典顺序排序
String类,自己具备自然顺序,实现长度排序,自己写比较器
Set集合总结
Set集合特点,无序,不重复,没有下标
1. HashSet
A. 底层哈希表结果,桶状结构
B. 线程不安全的
C. 允许存储null
D. 存储到HashSet集合中的对象,要求重写hashCode和equals方法,保证对象的唯一行
如果两个对象的哈希值(对象中的hashCode方法获取)一致,不是一个对象存储
如果两个对象的哈希值一致,集合再次调用对象的equals方法进行比较,equals返回真,同一对象不存储
如果两个对象的equals方法,返回假,就将后进来的对象,挂靠在前一个对象的下面
2. TreeSet
A. TreeSet集合会对存储的对象进行排序
B. 对象具备自然顺序
类实现Comparable接口,重写compareTo方法
C. TreeSet线程不安全的集合
D. 底层数据结构,二叉树
E. TreeSet自己具备比较性
自己定义比较器
定义类,实现java.util.Comparator接口
重写compare方法
建立TreeSet集合,传递比较器对象
F. 传递了比较器对象,TreeSet集合不会理会对象的自然顺序
------- android培训、java培训、期待与您交流! ----------
0 0
- 黑马程序员__Java集合框架SET集合
- 黑马程序员__Java集合框架Map集合
- 黑马程序员__Java 集合学习
- 黑马程序员__java之集合
- 黑马程序员:集合框架Set
- 黑马程序员-----------------集合框架-Set
- 黑马程序员:集合框架Set
- 黑马程序员:集合框架Set
- 黑马程序员-集合框架的Set集合
- 黑马程序员__JAVA基础__集合(一)
- 黑马程序员__JAVA基础__集合(二)
- 黑马程序员__Java集合Collection接口
- 黑马程序员_day18_集合框架 List 、Set
- 黑马程序员_集合框架(List,Set)
- 黑马程序员__集合框架(List,Set)
- 黑马程序员--集合框架(List,Set)
- 黑马程序员--集合框架(二)Set
- 黑马程序员-Java集合框架Set
- 使用MyEclipse的自动提醒功能卡死&&MyEclipse的激活
- WebKit之binding案例分析(testMediaQueryListListener.idl)
- poj3580 SuperMemo
- Could not create the view An unexpected exception……的问题
- python之路——面向对象
- 黑马程序员__Java集合框架SET集合
- JAVA:浅谈抽象类与接口
- 和为零的子矩阵
- ResourceBundle 和 Properties 读取Properties文件注意
- 安卓开发学习笔记(三)
- Unity ugui学习笔记 --cavas
- WebView常见问题总结
- Webkit之generate-bindings.pl源码分析
- future, packaged_task promise