一、HashSet是集合方法中Set的实现类:其主要特点为:
1、不存在迭代性:存入该实现类对象中的元素是无序的
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
for (String letters : set) {
System.out.println(letters);
}
}
}
执行结果:可以看出无序性
2、帮助实现Hashmap实现类的遍历
3、HashSet对象创建:
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
}
}
}
一、引包
二、确定泛型:不可以使用基本类型作为泛型:但是可以把基本类型包装
二、HashSet的常用方法:
1、add()方法:将新元素添加到集合中
public HashSet() {
map = new HashMap<>();
}
从上面的HashSet构造方法中可以看到,当创建一个HashSet对象时,事实上就是新建了一个HashMap对象->map储存对象的全局变量
解析:实现add()方法:
public boolean add(E e) {
return map.put(e, PRESENT)==null;
}
add存储数据时,实则是将数据通过HashMap中的put(有关方法在HashMap中详细讲解)方法,可以看到其中PRESENT是一个常量,即将输出的数据通过return map.put(e, PRESENT)==null;的方式保存到HashSet创建的map集合中,进行存储;
2、size() 方法:输出长度
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
System.out.println(set.size());
}
}
很明显,长度为3;
3、remove(Object obj) 移除指定元素
很明显,由于HashSet的无迭代性,所以一切有关索引的全部失效
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
System.out.println(set.remove("Tom"));
}
}
输出结果为: true
指定删除HashSet中的指定元素;返回值为:boolean型
4、isEmpty() 检查是否为空字符
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
System.out.println(set.isEmpty());
}
}
运行结果为:false 所以非空
5、clear() 、 contains(Object o) 清空元素与是否包含:
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
System.out.println(set.contains("Tom"));
set.clear();
System.out.println(set.isEmpty());
}
}
此时输出的为:为 true true
第一个true是因为包含Tom 第二个true是因为元素已经清空
三、HashSet的遍历
1、由于HashSet的中元素的非迭代型,所以在使用遍历是不可以通过索引进行遍历
2、foreach遍历
import java.util.HashSet;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
set.contains("Tom");
for (String letters : set) {
System.out.println(letters);
}
}
}
3、Iterator遍历
import java.util.HashSet;
import java.util.Iterator;
public class HasSet {
public static void main(String[] args) {
HashSet<String> set =new HashSet<String>();
set.add("Tom");
set.add("Jim");
set.add("jerry");
Iterator<String> iterator=set.iterator();
while(iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
四、总结
总体来讲,HashSet与ArrayList集合之间的相似度很高,搭建可以相互借鉴