java.util.Set接口 extends Collection接口
Set接口的特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
java.util.HashSet集合 implements Set接口
HashSet特点:
1.不允许存储重复的元素
2.没有索引,没有带索引的方法,也不能使用普通的for循环遍历
3.是一个无序集合,存储元素和取出元素的顺序有可能不一致
4.底层是一个哈希表结构(查询的速度非常的快)
Set<Integer> set = new HashSet<>();
可以用迭代器来遍历或者增强for循环
-
哈希值
- 哈希值:是一个十进制的整数,由系统随机给出(就是对象的地址值,是一个逻辑地址,是模拟出来得到地址,不是数据实际存储的物理地址)
在Object类有一个方法,可以获取对象的哈希值
int hashcode()返回该对象的哈希码值。
-
HashSet集合存储数据的结构(哈希表)
-
Set集合存储自定义类型元素
- 必须重写hashCode方法和equals方法
- alt + insert 插入
-
LinkedHashSet集合(util包,Set接口的实现类)
LinkedHashSet集合特点:
底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序,元素不能重复
HashSet<String> set = new HashSet<>();
set.add("www");
set.add("bbb");
set.add("bbb");
set.add("hhh");
System.out.println(set);
LinkedHashSet linked = new LinkedHashSet<>();
linked.add("www");
linked.add("bbb");
linked.add("bbb");
linked.add("hhh");
System.out.println(linked);