赞
踩
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被筛掉了)
存取顺序不一致:输出的顺序与输入的顺序不一定一致,此即为存取顺序不一致,并不是一定不一致。
我们存入数据的顺序是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介绍结束!!!
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。