Set如同一个罐子,可以把对象丢尽set集合

集合里多个对象之间没有明显的顺序

Set集合与Collection基本类似没有提供额外的方法

可以说Set就是一个Collection,只不过行为不同

Set不允许包含两个相同的元素

如果添加两个相同的元素,add()方法会返回false,并且不会添加新元素

基础知识

1、Hash表

Hash表是一种数据结构,用于查找对象。

Hash表位每个对象计算出一个整数称为Hash Code(哈希码)

Hash表是个链接式的队列

每个列表称为一个buckets(哈希表元)

对象位置的计算index = hashCode % buckets

HashCode为对象哈希码

buckets为哈希表元总数

添加元素时

有时会遇到已经填充了元素的哈希表元

这种情况称为Hash Collections 哈希冲突

此时必须判断该元素是否以及该存在该哈希表中

2、Comparable接口和Comparator接口

在“集合框架”中有两种比较接口,分别时ComparableComparator接口

像String和Integer等Java内建实现Comparable接口提供一定的排序方式

但是只能实现该接口一次

2.1、Comparable接口

在java.lang中,接口Comparable适用于一个类有自然排序

假定对象集合时同一个类型,该接口允许我们把集合排序成自然顺序

主要的方法:

利用Comparable接口创建自己的类

只是实现compareTo()方法的问题

通常就是依赖几个数据成员的自然排序

同时类也应该覆盖equals()和hashCode()方法确保两个相等的对象返回一个哈希码

2.2、Comparator接口

可以使用自己的排列顺序

可以实现Comparator接口来定义一个比较器

---int compare(Object o1,Object o2):对o1、o2进行比较

---boolean equals(Object obj)z=:指示对象obj是否和比较器相等

2.3、SortedSet接口

提供了一个特殊的set接口SortedSet,他保持元素的有序顺序

此接口主要用于排序操作

即实现此接口的子类都属于排序的子类

添加到SortedSet实现类的元素都必须实现Comparable接口

否则必须给他的构造函数提供一个Compatator接口类的实现

类TreeSet是他的唯一一份实现

因为集必须包含唯一的项

如果添加元素时比较两个元素导致了0返回值

那么新元素姐没有添加进去

如果两个元素相等

但是如果不相等的话接下来就应该修改比较方法

让比较方法和equals()的效果一致

1、Comparator comparator():返回对元素进行排序时使用的比较器

  如果使用Comparable接口的compareTo()方法对元素进行比较,则返回null

2、Object first():返回有序集合中第一个元素

3、Object last():返回有序集合中的最后一个元素

4、SotredSet subSet(Object fromElement,Object toElement):

  反回从fromElement至toElement范围内的SoredSet视图集

5、SotredSet headSet(Object toElement):返回SotredSet的一个视图,期内各个元素皆小于toElement

6、SotredSet tailSet(Object fromElement):返回SotredSet的一个视图,期内各个元素皆大于fromElement(可等于)

2.4、AbstractSet

AbstractSet类覆盖了Object的equals()和hashCode()方法

以确保两个相等的集返回的相同的哈希码

如果两个集大小相等且包含相同元素,则这两个集相等

按照定义,集的哈希码是集中元素哈希码的总和

因此无论按照内部的顺序如何,两个相等的集都会有相同的哈希码

2.5、HashSet和TreeSet

Java集合框架支持Set接口的两种普通实现

在更多情况下回使用HashSet存储重复自由的集合

考虑到效率,添加到HashSet的对象需要采用恰当分配哈希码的方式来实现hashCode()

虽然大多数系统类覆盖了Object中缺省的hashCode()和equals()实现

当创建自己要添加HashSet时,需要覆盖这两个方法

当我们要从集合中以有序的方式插入和抽取元素时

Tree实现会有用处

添加到TreeSet的元素必须时可排序的

2.6、LinkedHashSet

是HashSet的扩展

如果想要跟踪添加给HashSet的元素的顺序

使用LinkedHashSet实现会有很大的帮助

LinkedHashSet的迭代器按照元素的插入顺序来访问各个元素

它提供了一个可以快速访问各个元素的有序集合

同时也增加了实现的代价

因为哈希表元中的各个元素都是通过双重链接式列表链接在一起

转载于:https://www.cnblogs.com/Mrchengs/p/10849787.html

11、集合--Set接口相关推荐

  1. java list 接口_Java 集合 List接口

    [TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...

  2. Java集合Collection接口中的常用方法演示

    Java集合Collection接口中的常用方法演示 添加 add(Objec tobj) 和 addAll(Collection coll) 获取有效元素的个数 int size() 清空集合 vo ...

  3. 11.集合之List

    集合 1.定义 1.集合可以看作是一种容器,用来存储对象信息的容器,并且长度是可变的. 因为对象是可以创建无限个数的,而对象数组是开辟固定长度的存储空间,显然用对象是不合适的 对象数组长度不可变化并且 ...

  4. 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型

    2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...

  5. (1)学习数组,集合,IEnumerable接口,引申学习迭代器

    发展:数组-->集合-->泛型 (1)数组 1. 数组数据结构是System.Array类的一个实例. 2. System.Array类的语法为 [SerializableAttribut ...

  6. Java从零开始学二十三(集合Map接口)

    一.Map接口 Collection.Set.List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à v ...

  7. Java集合——Map接口学习总结

    一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...

  8. 【干货】产品经理必知的11个微信接口

    微信近日开放JS-SDK接口,业界可谓是欢欣鼓舞.奔走相告,目测将激起一大波第三方开发商的创新产品!真真是H5开发者的利好!但也有用户表示,还不了解JS-SDK接口到底是啥,究竟怎么用.这里,我们引用 ...

  9. java的set接口_Java集合-Set接口

    importorg.junit.Test;import java.util.*;/*** * Collection接口:单列集合,用来存储一个一个的对象 * (不常用)子接口Set:存储无序的.不可重 ...

最新文章

  1. 【组队学习】【35期】动手学数据分析
  2. caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量
  3. android键盘映射(转)-- good 1,android UI
  4. Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
  5. 去掉控制台程序的黑框框
  6. 网络安全习惯_健康习惯,确保良好的网络安全
  7. MySQL工作笔记-检索出某一时间段中的数据,并更新
  8. ssh连接远程主机执行脚本的环境变量问题
  9. windows下常用DOS命令
  10. 30套后台管理界面分享
  11. acdream 1401 Lempel-Ziv Compression
  12. Burp Suite安装和使用方法
  13. stm8 RTC自动唤醒
  14. centos7查看ip命令
  15. 2.3 从外部置入图片 [Ps教程]
  16. 初学者学习app2sd并且成功使用它的全过程
  17. DuerOS业绩亮眼,如何成为了百度财报新增长点?
  18. 【模拟+线段树】 hdu4262 Juggler
  19. 使用 OpenCV 识别图片中的猫咪
  20. K-means均值聚类算法python代码实现

热门文章

  1. 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
  2. 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
  3. centOS 7 安装man中文版手册
  4. InfoPath 揭秘 (一)
  5. 红帽喊话开发者:我们将支持 OpenJDK 8 到2023年
  6. Java HttpSession 详解
  7. kubernetes之kubedns部署
  8. Httpservlet cannot be resolved to a type的原因与解决方法
  9. Eclipse启动时DDMS files not found: D:\Eclipse\adt-bundle-windows-x86_64-20131030\sdk\tool
  10. VS2012+EF6+Mysq