11、集合--Set接口
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接口
在“集合框架”中有两种比较接口,分别时Comparable和Comparator接口
像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接口相关推荐
- java list 接口_Java 集合 List接口
[TOC] List接口 概述有序的 collection(也称为序列).此接口的用户可以对列表中每个元素的插入位置进行精确地控制.用户可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的 ...
- Java集合Collection接口中的常用方法演示
Java集合Collection接口中的常用方法演示 添加 add(Objec tobj) 和 addAll(Collection coll) 获取有效元素的个数 int size() 清空集合 vo ...
- 11.集合之List
集合 1.定义 1.集合可以看作是一种容器,用来存储对象信息的容器,并且长度是可变的. 因为对象是可以创建无限个数的,而对象数组是开辟固定长度的存储空间,显然用对象是不合适的 对象数组长度不可变化并且 ...
- 2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型
2021-06-19复习java Collection集合 Iterator接口_迭代器 增强for循环 泛型 Collection集合 java.util.coLlection接口 所有单列集合的最 ...
- (1)学习数组,集合,IEnumerable接口,引申学习迭代器
发展:数组-->集合-->泛型 (1)数组 1. 数组数据结构是System.Array类的一个实例. 2. System.Array类的语法为 [SerializableAttribut ...
- Java从零开始学二十三(集合Map接口)
一.Map接口 Collection.Set.List接口都属于单值的操作,即:每次只能操作一个对象,而Map与它们不同的是,每次操作的是一对对象,即二元偶对象,Map中的每个元素都使用key à v ...
- Java集合——Map接口学习总结
一.HashMap实现类 1.常用方法 增加:put(K key, V value)删除:clear() remove(Object key)修改:查看:entrySet() get(Object k ...
- 【干货】产品经理必知的11个微信接口
微信近日开放JS-SDK接口,业界可谓是欢欣鼓舞.奔走相告,目测将激起一大波第三方开发商的创新产品!真真是H5开发者的利好!但也有用户表示,还不了解JS-SDK接口到底是啥,究竟怎么用.这里,我们引用 ...
- java的set接口_Java集合-Set接口
importorg.junit.Test;import java.util.*;/*** * Collection接口:单列集合,用来存储一个一个的对象 * (不常用)子接口Set:存储无序的.不可重 ...
最新文章
- 【组队学习】【35期】动手学数据分析
- caffe-gpu ubuntu 安装_如何在Linux中安装vnStat和vnStati监视网络流量
- android键盘映射(转)-- good 1,android UI
- Java+MyEclipse+Tomcat (三)配置MySQL及查询数据显示在JSP网页中
- 去掉控制台程序的黑框框
- 网络安全习惯_健康习惯,确保良好的网络安全
- MySQL工作笔记-检索出某一时间段中的数据,并更新
- ssh连接远程主机执行脚本的环境变量问题
- windows下常用DOS命令
- 30套后台管理界面分享
- acdream 1401 Lempel-Ziv Compression
- Burp Suite安装和使用方法
- stm8 RTC自动唤醒
- centos7查看ip命令
- 2.3 从外部置入图片 [Ps教程]
- 初学者学习app2sd并且成功使用它的全过程
- DuerOS业绩亮眼,如何成为了百度财报新增长点?
- 【模拟+线段树】 hdu4262 Juggler
- 使用 OpenCV 识别图片中的猫咪
- K-means均值聚类算法python代码实现
热门文章
- 客户端负载均衡Ribbon之一:Spring Cloud Netflix负载均衡组件Ribbon介绍
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- centOS 7 安装man中文版手册
- InfoPath 揭秘 (一)
- 红帽喊话开发者:我们将支持 OpenJDK 8 到2023年
- Java HttpSession 详解
- kubernetes之kubedns部署
- Httpservlet cannot be resolved to a type的原因与解决方法
- Eclipse启动时DDMS files not found: D:\Eclipse\adt-bundle-windows-x86_64-20131030\sdk\tool
- VS2012+EF6+Mysq