目录
一)Set集合概念
Set接口和List接口一样,同时继承了Collection接口,它与Collection接口中的方法一致,并没有对Collection接口进行功能上的扩充,只是比Collection接口更加严格了。
tips:Set集合取出元素的方式可以采用:1.迭代器,2.强for循环
二)Set集合与List集合的区别:
- 与List接口不同的是,Set接口中元素无序
- 都会以某种规则保证存入的元素不出现重复。
三)Set集合的常见实现类
-
HashSet
底层数据结构是哈希表。(无序,唯一)
如何来保证元素唯一性?
1.依赖两个方法:hashCode()和equals() -
LinkedHashSet
底层数据结构是链表和哈希表。(FIFO插入有序,唯一)
1.由链表保证元素有序
2.由哈希表保证元素唯一 -
TreeSet
底层数据结构是红黑树。(唯一,有序)
1. 如何保证元素排序的呢?
自然排序
比较器排序
2.如何保证元素唯一性的呢?
根据比较的返回值是否是0来决定
HashSet类代码
package com.Good;
//Hashset集合
import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class B_set {
public static void main(String[] args) {
Set set=new HashSet();
set.add(1);//1.添加元素
set.add("dsl");
set.add(2);
set.add("wlz");
System.out.println(set); //[1, 2, wlz, dsl]
set.remove("dsl");//2.删除元素
System.out.println(set); //[1, 2, wlz]
//获取集合的元素个数
System.out.println(set.size()); //3
//包含元素 false/true;
System.out.println(set.contains("wlz"));//true
//迭代器遍历
Iterator it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());//1 2 wlz(隔行显示)
}
//增强for循环遍历
for(Object obj:set){
System.out.println(obj);//1 2 wlz(隔行显示)
}
set.clear();//清除集合
System.out.println(set);//[]
}
}
TreeSet类代码
package com.Good;
import java.util.Iterator;
//TreeSet集合 ,使用相同的类型
import java.util.Set;
import java.util.TreeSet;
public class B_treeSet {
public static void main(String[] args) {
Set<Integer> set=new TreeSet<>();
set.add(5);
set.add(2);
set.add(4);
set.add(3);
System.out.println(set); //[2, 3, 4, 5]默认排序
set.remove(5);//删除
set.contains(2);//包含
// set.clear(); //清除集合
//迭代器遍历
Iterator it=set.iterator();
while(it.hasNext()){
System.out.println(it.next());//2 3 4(隔行显示)
}
//增强for循环
for(Object obj:set){
System.out.println(obj);//2 3 4(隔行显示)
}
}
}