集合之HashSet/TreeSet原理
来源:互联网 发布:华视身份证阅读器软件 编辑:程序博客网 时间:2024/05/19 11:48
Set集合
1.HashSet
只去重复, 没有顺序
HashSet的add方法会调用hashCode和equals, 所以存储在HashSet中的对象需要重写这两个方法.
2.TreeSet
去重复, 并且可以按照某种顺序排序
TreeSet的add方法会将对象转为Comparable, 然后调用compareTo方法, 所以存储在TreeSet中的对象必须实现Comparable, 重写compareTo方法
3.LinkedHashSet
HashSet的子类, 去重复, 并且保留存储顺序
4.迭代方式
使用迭代器Iterator
使用增强for循环
HashSet原理:
/*
* 如果我们希望一个集合有去重复的功能, 可以在它的add方法中检查要添加的对象在集合中是否存在.
* 迭代集合中每个元素, 和要添加的比较, 如果相同, 就不存.
*
* 如果使用上述方法, 当集合元素特别多的时候, 效率会很低.
*例如: 集合中有1万个元素, 当存储下一个的时候, 需要和前面1万个都比较, 效率较低.
*
* HashSet的工作原理:
* 每次存储对象的时候, 调用对象的hashCode()方法, 计算一个哈希值. 在集合中查找是否包含哈希值相同的元素.
* 如果没有哈希值相同元素, 直接存入.
* 如果有哈希值相同的元素, 逐个使用equals()方法比较.
* 比较结果全为false就存入.
* 如果比较结果有true则不存.
*
* 如何将自定义类对象存入HashSet进行去重复
* 类中必须重写hashCode()方法和equals()方法
* equals()方法中比较所有属性
* hashCode()方法要保证属性相同的对象返回值相同, 属性不同的对象尽量不同
TreeSet原理:
/*
* TreeSet存储对象的时候, 可以排序, 但是需要指定排序的算法
*
* Integer能排序(有默认顺序), String能排序(有默认顺序), 自定义的类存储的时候出现异常(没有顺序)
*
* 如果想把自定义类的对象存入TreeSet进行排序, 那么必须实现Comparable接口
* 在类上implement Comparable
* 重写compareTo()方法
* 在方法内定义比较算法, 根据大小关系, 返回正数负数或零
* 在使用TreeSet存储对象的时候, add()方法内部就会自动调用compareTo()方法进行比较, 根据比较结果使用二叉树形式进行存储
*/
- 集合之HashSet/TreeSet原理
- 集合之HashSet/TreeSet原理
- 黑马程序员--集合之HashSet/TreeSet原理
- Java 集合 5:HashSet ,TreeSet 实现原理
- JAVA集合之---TreeSet、HashSet、EnumSet
- Set集合HashSet,TreeSet
- 小东吖 之 java Set接口 HashSet集合 TreeSet集合
- HashSet集合和TreeSet集合
- 黑马程序员_集合之Set(HashSet与TreeSet)
- 【Java集合之Set】HashSet、TreeSet、LinkedHashSet区别
- Java笔记之HashSet与TreeSet集合的运用
- Java常见集合框架(十):Set之TreeSet、HashSet
- Java集合之四Set、HashSet、LinkedHashSet、TreeSet
- Set集合:HashSet、TreeSet、泛型
- 【insigma】集合Set (HashSet、TreeSet)
- 集合 LinkedList、Hashset、TreeSet --基础
- Java--集合(Set:HashSet,TreeSet)
- 集合框架__【Set集合】【HashSet】【TreeSet】
- Yii2.0数据库操作增删改查详解 [ 2.0 版本 ]
- JavaScript深度克隆
- Java程序名验证是否是回文字符
- 1087. All Roads Lead to Rome (30)
- UDP在WiFi环境中的丢包问题
- 集合之HashSet/TreeSet原理
- thinkphp5踩坑之部署到服务器模板不存在
- 求命题公式的主范式
- APP拍照扫描识别银行卡SDK
- Jxls+Spring MVC实现Excel导出
- LeetCode 6. ZigZag Conversion
- RBF神经网络对iris鸢尾花数据集进行分类识别
- 基于矢量数据的逆地理编码功能实现
- c++实验5--数组分离