Set概述
- 1,Set接口继承Collection接口。
- 2,Set接口常用实现类:
- (1)HashSet:
①实现了 Set 接口
②“它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变”
③允许使用 null 元素 - (2)LinkedHashSet
①HashSet的子类
②由于该实现类对象维护着一个运行于所有元素的双重链接列表,由于该链接列表定义了迭代顺序,所以在遍历该实现类集合时按照元素的插入顺序进行遍历 - (3)TreeSet
①既实现Set接口,同时也实现了SortedSet接口,具有排序功能
②存入TreeSet中的对象元素需要实现Comparable接口
HashSet常用方法
- 1、向集合中添加元素(add)
//例
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();//调用HashSet无参构造方法,在HashSet中定义了一个HashMap类型的
//成员属性map,并在无参构造方法中,创建一个HashMap对象赋值给map。
set.add("小强");//向集合中添加元素:小强
set.add("小明");//注意:HashSet中没有相同的元素,不会按照保存的顺序存储数据;遍历是不能保证下次结果和上次相同
}
}
add方法实质是map全局变量调用了Map类的方法
//HashSet中的部分源码
private transient HashMap<E,Object> map;//HashMap类型的成员属性map
public HashSet() { //无参构造方法
map = new HashMap<>(); //新建map对象并赋值
}
public boolean add(E e) { //定义add方法
return map.put(e, PRESENT)==null;//通过map调用Map中的put方法,把我们在add中传入的元素,存入到map对象的key值中
}
- 2、获取集合容器中有多少个元素(size)
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
System.out.println(set.size());//获取集合容器中元素个数并输出
}
}
/*运行结果
2*/
- 3、判断集合是否为空(isEmpty):空,true;非空,false。
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
System.out.println(set.isEmpty());
set.add("小强");
set.add("小明");
System.out.println(set.isEmpty());
}
}
/*运行结果
true
false*/
- 4、清空集合容器中元素(clear)
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
set.clear();
System.out.println(set.isEmpty());
}
}
/*运行结果
true*/
- 5、判断元素中是否包含参数指定对象(contains)
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
System.out.println(set.contains("小强"));
System.out.println(set.contains("小红"));
}
}
/*运行结果
true
false*/
- 6、删除元素(remove)
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
System.out.println(set.remove("小强"));
System.out.println(set.contains("小强"));
}
}
/*运行结果
true
false*/
HashSet遍历
- 1、因为是无序的,所以无法使用普通for循环语句,但仍可以使用加强语句
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
for (String s : set) {
System.out.println(s);
}
}
}
/*运行结果
小明
小强*/
- 2、将HashSet中数据转存至Iterator类的对象,通过Iterator类的方法进行遍历
import java.util.HashSet;
public class Test {
public static void main(String[] args) {
HashSet<String> set = new HashSet<String>();
set.add("小强");
set.add("小明");
Iterator<String> iterator = set.iterator();//将HashSet中数据转存至iterator
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}