Set集合、HashSet、LinkedHashSet

1.Set集合

Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历

2.1HashSet
java. util.HashSet集合implements Set接口
无序不允重复元素
没有索引,没有带索引的方法,也不能使用普通的for循环遍历
是一个无序的集合,存储元素和取出元素的顺序有可能不一致
底层是一个哈希表结构(查询的速度非常的快)

public static void main(String[] args) {
Set<Integer> set = new HashSet<>();
//使用add方法往集合中添加元素
set .add(1);,
set. add(3);
set. add(2);
set . add(1);
//使用迭代器遍历set集合
Iterator<Integer> it = set. iterator();
while (it.hasNext()){
Integer n = it.next();
System. out . println(n);//1,2,3
}
//使用增强for遍历set集合
System. out. print1n(---------------");
for (Integer i : set) {
System. out . println(i);
}
}
2.2HashSet集合存储数据的结构(哈希表)

哈希表特点,查询速度快

什么是哈希表呢?
在JDK1.8之前,哈希表底层采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。
但是当位于一个桶中的元素较多 ,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中 ,哈
希表存储采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找
时间。

2.3 HashSet存储自定义类型元素

给HashSet中存放自定义类型元素时,需要重写对象中的hashCode和equals方法,建立自己的比较方式,才能保
证HashSet集合中的对象唯一

hashSet存储元素的原理

 HashSet存储自定义类型元素

LinkedHashSet集合

public class LinkedHashSet<E>
extends HashSet <E>
implements Set <E>, Cloneable, Serializable
具有可预知迭代顺序的Set接口的哈希表和链接列表实现。此实现与HashSet. 的不同之外在于,后者维护着-个运行于所有条目的双重链接列表。此
链接列表定义了迭代顺序,即按照将元素插入到set中的顺序(插入顺序)进行迭代。注意,插入顺序不受在set中重新插入的元素的影响。
(如果在s. contains(e)返回true 后立即调用s. add(e),则元素e会被重新插入到set s中。)
LinkedHashSet集合特点:
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),

有序不允许重复
 

3. 可变参数

可变参数:是JDK1.5之后出现的新特性
使用前提:
当方法的参数列表数据类型已经确定, 但是参数的个数不确定,就可以使用可变参数.
使用格式:定义方法时使用
修饰符返回值类型方法名(数据类型.. .变量名){}
可变参数的原理:
可变参数底层就是一个数组,根据传递参数个数不同,会创建不同长度的数组,来存储这些参数
传递的参数个数,可以是0个(不传递),1,2...多个

猜你喜欢

转载自blog.csdn.net/weixin_51980491/article/details/112917804