Java集合类框架—Set、HashSet、TreeSet
来源:互联网 发布:金海岸大酒店网络地图 编辑:程序博客网 时间:2024/05/01 07:39
- 概述
- HashSet
- TreeSet
- 如何自定义比较器
概述
Set :无序,不可重复。
HashSet :底层是使用了哈希表来支持的,特点: 存取速度快.
TreeSet :如果元素具备自然顺序 的特性,那么就按照元素自然顺序的特性进行排序存储。
HashSet
HashSet的实现原理:
往Haset添加元素的时候,HashSet会先调用元素的hashCode方法得到元素的哈希值 ,然后通过元素 的哈希值经过移位等运算,就可以算出该元素在哈希表中 的存储位置。
情况1: 如果算出元素存储的位置目前没有任何元素存储,那么该元素可以直接存储到该位置上。
情况2: 如果算出该元素的存储位置目前已经存在有其他的元素了,那么会调用该元素的equals方法与该位置的元素再比较一次,如果equals返回的是true,那么该元素与这个位置上的元素就视为重复元素,不允许添加,如果equals方法返回的是false,那么该元素运行 添加。
TreeSet
- 往TreeSet添加元素的时候,如果元素本身具备了自然顺序的特性,那么就按照元素自然顺序的特性进行排序存储。
往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,那么该元素所属的类必须要实现Comparable接口,把元素
的比较规则定义在compareTo(T o)方法上。如果比较元素的时候,compareTo方法返回 的是0,那么该元素就被视为重复元素,不允许添加.(注意:TreeSet与HashCode、equals方法是没有任何关系。)
往TreeSet添加元素的时候, 如果元素本身没有具备自然顺序 的特性,而元素所属的类也没有实现Comparable接口,那么必须要在创建TreeSet的时候传入一个
比较器。往TreeSet添加元素的时候,如果元素本身不具备自然顺序的特性,而元素所属的类已经实现了Comparable接口, 在创建TreeSet对象的时候也传入了比较器,那么是以比较器的比较规则优先使用。
如何自定义比较器
如何自定义定义比较器: 自定义一个类实现Comparator接口即可,把元素与元素之间的比较规则定义在compare方法内即可。
class 类名 implements Comparator{}
TreeSet是可以对字符串进行排序 的, 因为字符串已经实现了Comparable接口。
字符串的比较规则:
- 对应位置有不同的字符出现, 就比较的就是对应位置不同的字符。
- 对应位置上 的字符都一样,比较的就是字符串的长度。
- Java集合类框架—Set、HashSet、TreeSet
- Java集合框架-2.【Set】【HashSet】【TreeSet】
- 黑马程序员—Java集合框架(Set、HashSet、TreeSet)
- Java--集合(Set:HashSet,TreeSet)
- 集合框架__【Set集合】【HashSet】【TreeSet】
- 集合框架__【Set集合】【HashSet】【TreeSet】
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
- Java集合框架:Set(HashSet,LinkedHashSet,TreeSet)
- Java常见集合框架(十):Set之TreeSet、HashSet
- JavaSE入门学习36:Java集合框架之Set接口及其实现类HashSet和TreeSet
- Set集合HashSet,TreeSet
- [Java 13 类集合] BasicContainer, Collection, Set, HashSet, TreeSet
- Java集合框架-Set(TreeSet)
- 20151118 Set集合+HashSet类+TreeSet类
- Java集合框架3——HashSet、TreeSet
- java--集合框架的Hashset和Treeset
- Java集合框架(Set与Map,HashSet与HashMap,TreeSet与TreeMap)
- Set集合:HashSet、TreeSet、泛型
- 随机存储流笔记
- ibatis中常用的代码片段总结
- 什么是PXE及PXE启动
- Leetcode 283. Move Zeroes
- eclipse启动tomcat 访问http://localhost:8080 报404错误
- Java集合类框架—Set、HashSet、TreeSet
- Date、Calendar类
- 多干一点, 多向前一步
- QT5提示can not find -lGL的解决方法
- 【Linux C/C++】 第05讲 父子进程
- 学生信息管理系统总结(一)
- 01 像学任何编程语言一样,先从hello world开始
- debian mount windows share directies
- Xcode 在真机上运行的时候遇 A unknown error occurred