Set是集合体系中较为重要的接口,它具有单列存储的特点,即一次只能添加一个元素。它具有三大特点:
不可重复:当存入相同的数据时,重复的元素将会被自动去除,集合中不会有重复的值。
存取顺序不一致:存入数据的顺序与输出数据的顺序不一定一致。
没有带索引方法:无法使用普通for循环来遍历输出Set集合。
由于Set是一个接口,因此我们在创建Set对象时必须指定其实现类,其常用的实现类有HashSet和TreeSet。
接下来我们将结合代码来具体学习Set相关知识。
Set应知应会
Set作为接口,它最常见的实现类是HashSet和TreeSet,作为接口它抽取了所有实现类的共有方法,所有实现Set接口的实现类均可使用这些方法。例如HashSet和TreeSet均可使用如下共有方法。
方法名 | 说明 |
---|---|
boolean add(E e) | 添加元素 |
boolean remove(Object o) | 从集合中移除指定的元素 |
void clear() | 清空集合中的元素 |
boolean contains(Object o) | 判断集合中是否存在指定的元素 |
boolean isEmpty() | 判断集合是否为空 |
int size() | 集合的长度,也就是集合中元素的个数 |
具体实现类为HashSet的Set
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//普通输出
System.out.println(set);
}
具体实现类为TreeSet的Set
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为TreeSet
Set<String> set=new TreeSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//普通输出
System.out.println(set);
}
接下来我们就以实现类为HashSet的Set来具体举例
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//调用remove()方法删除数据
set.remove("zhangsan");
//普通输出
System.out.println(set);
}
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//调用clear()方法清空数据
set.clear();
//普通输出
System.out.println(set);
}
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//调用contains()方法判断集合中是否存在指定的元素
boolean aoao = set.contains("aoao");
System.out.println(aoao);
boolean aoAo = set.contains("AoAo");
System.out.println(aoAo);
}
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//调用isEmpty()方法判断集合是否为空
boolean empty = set.isEmpty();
System.out.println(empty);
//调用clear()方法清空集合数据
set.clear();
//调用isEmpty()方法判断集合是否为空
boolean empty1 = set.isEmpty();
System.out.println(empty1);
}
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("zhangsan");
set.add("lisi");
set.add("wangwu");
set.add("zhaoliu");
//调用size()方法获取集合的长度
int size = set.size();
System.out.println(size);
}
我们增添两个aoao和两个daidai数据
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("aoao");
set.add("lisi");
set.add("wangwu");
set.add("daidai");
//普通输出
System.out.println(set);
}
存取顺序不一致:输出的顺序与输入的顺序不一定一致,此即为存取顺序不一致,并不是一定不一致。
我们存入数据的顺序是aoao,daidai,bobo,lisi,wangwu,zhangsan
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aoao");
set.add("daidai");
set.add("bobo");
set.add("lisi");
set.add("wangwu");
set.add("zhangsan");
//普通输出
System.out.println(set);
}
运行结果:(我们看到输出的顺序是aoao,lisi,bobo,zhangsan,wangwu,daidai)
我们存入数据的顺序是aa,bb,cc,dd,ee,ff
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aa");
set.add("bb");
set.add("cc");
set.add("dd");
set.add("ee");
set.add("ff");
//普通输出
System.out.println(set);
}
运行结果:(我们看到输出的顺序是aa,bb,cc,dd,ee,ff)
因为Set没有带索引的方法,因此遍历Set集合时只能使用普通输出语句,forEach语句和Iterator迭代器
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aa");
set.add("bb");
set.add("cc");
set.add("dd");
set.add("ee");
set.add("ff");
//普通输出
System.out.println(set);
}
public static void main(String[] args) {
//创建一个数据类型为String的Set对象,并指明其实现类为HashSet
Set<String> set=new HashSet<>();
//调用add()方法增添数据
set.add("aa");
set.add("bb");
set.add("cc");
set.add("dd");
set.add("ee");
set.add("ff");
//forEach语句输出Set集合
//由于Set集合的数据类型为String,因此s的数据类型为String
//其中s即为set的复用名,相当于set
for (String s : set) {
System.out.println(s);
}
}
当然我们也可以使用其他数据类型来创建Set对象,并用forEach()语句
public static void main(String[] args) {
//创建一个数据类型为Character的Set对象,并指明其实现类为HashSet
Set<Character> set=new HashSet<Character>();
//调用add()方法增添数据
set.add('a');
set.add('b');
set.add('v');
set.add('d');
set.add('e');
set.add('z');
//forEach语句输出Set集合
//由于Set集合的数据类型为Character,因此c的数据类型为Character
//其中c即为set的复用名,相当于set
for (Character c : set) {
System.out.println(c);
}
}
public static void main(String[] args) {
//创建一个数据类型为Character的Set对象,并指明其实现类为HashSet
Set<Character> set=new HashSet<Character>();
//调用add()方法增添数据
set.add('a');
set.add('b');
set.add('v');
set.add('d');
set.add('e');
set.add('z');
//Iterator迭代器输出Set集合
//由于Set的数据类型为Character,因此Iterator的数据类型也为Character
Iterator<Character> iterator=set.iterator();
//iterator.hasNext()的作用是判断当前位置是否存在元素,若存在元素则为true,否则为false
while(iterator.hasNext()){
//iterator.next()的作用是获取当前位置元素,之后指向下一个位置
System.out.println(iterator.next());
}
}
OK!!!Set介绍结束!!!