Java从入门到精通19==》List接口、Set接口、HashSet集合
文章目录
一、List接口
1、什么是List接口
有序集合,这里的有序指的是存取顺序,用户可以精确控制列表中每个元素的插入位置,用户可以通过整数索引访问元素,并搜索列表中的元素,与Set集合不同,列表通常允许重复的元素
总结:
有序、索引、重复
2、如何使用List接口
由于是接口,没有构造方法,因此想要得到实例则通过
这里使用多态手法
代码展示:
List list= new ArrayList();
3、了解数据结构
1.栈结构
先进后出
想象成弹夹,先加载后弹出
2.队列结构
先进先出
想象成排队,先排的人先走
3.数组结构
查询快、增删慢
原因:
查询快:
通过索引,可以快速访问指定位置的元素
增删元素慢:
指定索引位置增加元素:需要创建一个新数组,将指定新元素存储在指定索引位置,再把原数组元素根据索引,复制到新数组对应索引的位置。
指定索引位置删除元素:需要创建一个新数组,把原数组元素根据索引,复制到新数组对应索引的位置,原数组中指定索引位置元素不复制到新数组中。
4.链表结构
查询慢、增删快
查找元素慢:
想查找某个元素,需要通过连接的节点,依次向后查找指定元素
增删元素快:
它不需要移动其他元素的位置。链表中每个节点都包含一个指向下一个节点的引用,通过修改节点的引用指向,可以快速地在链表中添加或删除元素
4、ArrayList集合
其底层是数组,所以查询快、增删慢
集合常用方法
若用Arraylist创建一个名为list的数组,则
- list.add(元素)
向数组尾部添加一个元素 - list.size()
获取集合长度 - list.get(索引)
获取数组索引位置数据 - list.add(索引,元素)
向索引位置插入一个元素,若索引为1,则执行完后索引1位置为新值,其他的往后移 - list.set(索引,元素)
将索引位置的旧元素换为新元素 - list.clear()
移除所以元素 - list.isEmpty()
判断数组是否含有元素,若无,则返回true若有,则返回false - list.contians(元素)
判断数组中是否含有此元素,若有返回true,若没有返回false - list.remove(索引)
移除索引处元素,并将其返回 - list.remove(元素)
移除集合中第一次出现的这个元素
5、LinkedList集合
其底层是链表所以查询慢、增删快
- public void addFirst(E e)
在该列表开头插入指定的元素 - public void addLast(E e)
将指定的元素追加到此列表的末尾 - public E getFirst()
返回此列表中的第一个元素 - public E getLast()
返回此列表中的最后一个元素 - public E removeFirst()
从此列表中删除并返回第一个元素 - public E removeLast()
从此列表中删除并返回最后一个元素
二、Set接口
1、什么是Set接口
Set接口是Collection的子接口,set接口没有提供额外的方法。Set 集合不允许包含相同的元素,如果试把两个相同的元素加入同一个 Set 集合中,则添加操作失败。Set 判断两个对象是否相同不是使用 == 运算符,而是根据 equals 方法
特点
它里面的集合,所存储的元素就是不重复的且存取无序,没有索引所以不能使用普通for循环遍历
2、Set的使用
由于是接口,所以用多态方式实例化对象
特点:
无序
示例:
不重复(如果Set中已经存在相同的元素,则添加操作无效。)
示例:
方法:
-
add(E e)
向Set中添加一个元素。 -
remove(Object o)
从Set中移除指定的元素。 -
contains(Object o)
判断Set中是否包含指定的元素。 -
size()
返回Set中元素的数量。 -
isEmpty()
判断Set是否为空。 -
clear()
清除Set中的所有元素。 -
iterator()
返回Set的迭代器,可以用于遍历Set中的所有元素。
需要注意的是,Set接口中的元素是无序的,因此不能使用下标访问元素
三、HashSet集合
1、什么是HashSet集合
HashSet集合是Java中的一种集合类,它是基于哈希表实现的无序集合,不允许存储重复的元素。HashSet允许添加、删除和查找元素,并具有常数级别的性能。HashSet实现了Set接口,因此它继承了Set的所有特性。与其他集合类相比,HashSet具有较高的性能和较低的空间复杂度。它是线程不安全的,不能在多线程环境下使用。
2、API中的HashSet集合
查阅HashSet集合的API介绍:此类实现Set接口,由哈希表支持(实际上是一个 HashMap集合)。HashSet集合不能保证的迭代顺序与元素存储顺序相同。
3、特点
- 底层数据结构是哈希表
- 存取无序
- 不可以存储重复元素
- 没有索引,不能使用普通for循环遍历
4、哈希值
1.什么是哈希值
是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值
2.如何获取哈希值
Object类中的public int hashCode():返回对象的哈希码值
3.哈希值的特点
- 同一个对象多次调用hashCode()方法返回的哈希值是相同的
- 默认情况下,不同对象的哈希值是不同的。而重写
5、构造方法
HashSet集合的构造方法有以下几种:
-
HashSet()
创建一个空的HashSet集合对象,初始容量为16,负载因子为0.75。 -
HashSet(Collection<? extends E> c)
创建一个包含指定集合元素的HashSet集合对象,其中元素按照它们由集合的迭代器返回的顺序添加到此集合中。 -
HashSet(int initialCapacity)
创建一个空的HashSet集合对象,指定其初始容量。 -
HashSet(int initialCapacity, float loadFactor)
创建一个空的HashSet集合对象,指定其初始容量和负载因子。
其中,initialCapacity是初始容量,loadFactor是负载因子,用于控制HashSet集合的填充因子。当元素数量超过容量×负载因子时,HashSet集合会进行扩容,容量扩大为当前容量的2倍。
6、HashSet集合常用方法
-
add(Object o): 添加元素,如果添加成功返回true,否则返回false。
-
clear(): 清空集合中的所有元素。
-
contains(Object o): 判断集合中是否包含指定元素,如果包含返回true,否则返回false。
-
isEmpty(): 判断集合是否为空,如果为空返回true,否则返回false。
-
iterator(): 返回一个迭代器,用于遍历集合中的元素。
-
remove(Object o): 删除集合中的指定元素,如果删除成功返回true,否则返回false。
-
size(): 返回集合中元素的个数。
-
toArray(): 将集合中的元素转换为数组,并返回该数组。
注意事项:
-
HashSet集合中的元素是无序的。
-
HashSet集合中的元素不允许重复。
-
HashSet集合中的元素必须重写equals方法和hashCode方法,以确保集合中的元素唯一性。
-
HashSet集合的底层实现是哈希表,因此添加、删除、查找元素的效率较高。