Set接口下的集合
一、集合(定义字段的时候统一使用包装类)
1、集合大类分为List、Set、Map三种,其中,List集合是有序可重复的,并且可以使用普通for循环、增强for循环、正向迭代器、双向迭代器;Set集合是无序不可重复的,不可以使用普通for循环和双向迭代器,只能使用增强for循环和正向迭代器;Map集合也是无序不可重复的,只能存储键值对(也就是我们太容易对象),Map集合本身不能使用任意的循环方式。
二、Set集合
1、HashSet集合(HashSet集合里面传入了匿名对象的话,那么它的删除也是根据HashCode和equals方法来判断的。)
HashSet集合是无序、不可重复的,它的底层是使用了HashMap实现的,HashMap的底层是数组和链表实现的;无序指的是增加元素的顺序和取出元素的顺序不一定一致,不可重复是因为它使用了通过首先获取HashCode值,再通过Hash算法将HashCode值算出索引,最后比较equals方法来决定两个值是否重复(其中,如果两个数据通过HashCode值算出的索引一致,那么会在同索引处比较equals方法,如果不一致,则会通过链表结构将数据挂在此索引的位置,如果算出的索引一致,那么就不会使用equals方法)(其实你的HashCode值相等,通过Hash算法算出的索引也就像等,所以不必强调这个)
Set的继承特点:
Set 无序的,不可重复的,不能使用普通for循环和双向迭代器
|
|__HashSet TreeSet
List 有序的,并且数据可重复的可以使用偏头痛for循环、增强for循环、正向迭代器、双向迭代器
|
|___ArrayList LinkedList
2、TreeSet集合
TreeSet集合特点:无序(添加元素的顺序和取出元素的顺序不一定是相同的)、不可重复的(判断重复的方法:
①compareTo方法返回0,表示相等;②compare方法返回0,则表示相等),是基于二叉树实现的。
包装类都实现了comparable接口,因此都覆写了compareTo方法(具有了排序功能),一个普通类的对象本身是没有排序的功能的,但是由于实现了Comparable接口,因此对象就具有了排序的功能。
CompareTo方法如果返回正数、或者负数都会按照不一致的自然方法进行排序,但是如果返回0,则表示对象都相等,意味着TreeSet集合只存储了第一个元素
注意:TreeSet集合内部没有实现ListIterator接口,因此不能使用双向迭代器,又因为TreeSet集合是无序的,因此不能够使用普通for循环(不能按照指定的索引取到值)
注意:TreeSet容器存储的值必须要拥有自然排序或者定制排序(比较器)的能力
如果一个类实现了Comparator接口,那么这个类就是一个比较类,在TreeSet集合中有一个构造方法是
TreeSet(SortedSet<E> s) 构造一个按照比较类规则来进行比较集合中元素的方法,然后将这个比较类的对象传入集合的对象中,就可以使用定制排序(比较器)了(最好使用匿名内部类)。
Set接口下的集合的更多相关文章
- List接口下的集合
集合框架 List接口下的集合特点: Set接口下的集合特点: 1.都是有序的 1.都是无序的 2.都有下标 2.没有下标 3.都可以重复 3.不可重复(覆盖) List接口下的集合 1.ArrayL ...
- Map接口下的集合和泛型理解
一.Map接口 1. Map接口就是最顶层了,上面没有继承了.Map是一个容器接口,它与前面学的List.Set容器不同的是前面学的这些容器,一次只能传入一个元素,但是Map容器一次可以传入一对元素( ...
- C# 通过IEnumberable接口和IEnumerator接口实现自定义集合类型foreach功能
1.IEnumerator和IEnumerable的作用 其实IEnumerator和IEnumerable的作用很简单,就是让除数组和集合之外的类型也能支持foreach循环,至于foreach循环 ...
- .net 下的集合
集合的操作在编码的时候很常见.但是由于经常使用几种集合.而忽略了一些不常用的集合.在这里我整理下. 首先先了解下接口: 1.IEnumerable,返回一个循环访问集合的枚举器. 2.IEnumera ...
- 容器之List接口下各实现类(Vector,ArrayList 和LinkedList)的线程安全问题
Vector .ArrayList 和LinkedList都是List接口下的实现类,但是他们之间的区别和联系是什么呢? 首先: 然后: 如果您仅仅想知道结论,那么可以关闭了. 下面我讨论讨论为什么. ...
- IIC接口下的24C02 驱动分析
本节来学习IIC接口下的24C02 驱动分析,本节学完后,再来学习Linux下如何使用IIC操作24C02 1.I2C通信介绍 它是由数据线SDA和时钟SCL构成的串行总线,可发送和接收数据,是一个多 ...
- [知了堂学习笔记]_集合接口list与集合接口set的区别
在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...
- C++下实现同接口下多个类作为参数的调用和传参
/* 实现同接口下不同类的对象的转移 定义类的接口 定义多个继承该接口的类 定义管理类,把接口当作类型, 传入该接口下各种类的对象,进行操作 */ #include<iostream> # ...
- 集合接口list与集合接口set的区别
在Java中 除了 Map以外的集合的根接口都是Collection接口,而在Collection接口的子接口中,最重要的莫过于List和Set集合接口. 今天我们就来谈谈List集合接口与Set集合 ...
随机推荐
- Python认识到放弃
基础入门 计算机硬件基础 变量 数据类型 基本运算符 变量常量 流程控制 数据类型 数字,字符串,列表 元组,字典,集合 字符编码 python2 python3 文件处理 文件读写 指针移动 函数 ...
- Java使用AES算法进行加密解密
一.加密 /** * 加密 * @param src 源数据字节数组 * @param key 密钥字节数组 * @return 加密后的字节数组 */ public static byte[] En ...
- Python——安居客租房信息爬取(以南昌为例)
前言: 提前安装好所需要的库. 本代码的输入仅需要某个城市的租房地址首页即可,其他自会生成. 使用前请创建所需的目录,或者为代码添加os.makedir() 支持断点重爬,重行运行即可. header ...
- step into,step over,step out.
step into:单步执行,遇到子函数就进入并且继续单步执行(简而言之,进入子函数): step over:在单步执行时,在函数内遇到子函数时不会进入子函数内单步执行,而是将子函数整个执行完再停止, ...
- Ubuntu18.04格式化U盘为NTFS的方法
1.先安装工具ntfs-3g sudo apt-get install ntfs-3g 2.找到需要格式化的U盘在系统中的序号 df -h 找到U盘的序列号后记下来,例如“/dev/sdd1” 3.解 ...
- 【翻译】 Guice 动机——依赖注入的动机
原文链接 动机 将所有的内容连接在一起时应用开发的一个单调乏味的部分.有几种方式来将数据.服务.presetntation类连接到一起.为了对比这些方法,我将为披萨订购网站编写账单代码: public ...
- Linux的快捷键一
- Linux命令--tree
目录 tree 最常用 带颜色显示2级目录 排除显示某个目录 tree tree -C :颜色显示 tree -f : 显示文件全路径 tree -L 2 :只显示2层 tree -P *.pl :只 ...
- monkey日志解析
bash arg: -p (打印monkey命令携带的参数) bash arg: com.dapp.testAPP123 bash arg: --throttle bash arg: 200 bash ...
- PostgreSQL学习笔记(一)-安装PostgreSQL
PostgreSQL官网:https://www.postgresql.org/docs/11/index.html1.如何安装2.如何修改配置文件3.如何设置自动启动4.如何修改数据用户密码 本文环 ...