HashSet集合中不能包含重复元素,并且不会对集合中的元素进行排序,其常用的方法包括:
基本操作:
int size();
boolean isEmpty();
boolean contains(E element);
boolean add(E element);
boolean remove(E element);
Iterator<E> iterator();
批量操作:
boolean containsAll(Collection<E> c);
boolean addAll(Collection<E> c); //取得并集
boolean removeAll(Collection<E> c); //删除交集元素
boolean retainAll(Collection<E> c); //取得交集
void clear();
数组操作:
Object[] toArray(); //将集合转化为Object数组
E[] toArray(new E(c.size)); //将c集合转化为E数组
代码示例如下所示:
注:Collections.singleton(e) 的含义是:生成一个只含有一个元素e的集合
package test;
import java.util.Collection;
import java.util.HashSet;
import java.util.Iterator;
import com.sun.xml.internal.ws.policy.privateutil.PolicyUtils.Collections;
public class Test {
public static void main(String args[]) {
int[] a= {6,5,4,3,2,1,1,5,6,7};
HashSet<Integer> hs=new HashSet<>(); //所有的集合中存储的元素的类型都不会是基本数据类型!!!使用菱形推断创建对象
for(int i:a) {
if(!hs.add(i))
System.out.println(i+"已存在!"); //HashSet中的元素不允许重复!
hs.add(i);
}
/*for(int i=0;i<a.length;i++) {
if(!hs.add(a[i]))
System.out.println(a[i]+"已存在!");
hs.add(a[i]);
}*/
if(!hs.isEmpty()) { //判断集合是否为空
System.out.println("hs不为空");
}
if(hs.contains(7)) { //判断集合是否包含元素
System.out.println("集合hs中包括元素7");
}
for(int j : hs) {
System.out.print(j+" ");
}
System.out.println();
HashSet<Integer> h=new HashSet<>();
h.add(102); //添加元素102
//h.remove(102); 删除元素102
h.add(103);
h.add(2);
if(hs.containsAll(h)) { //判断集合是否包含另一集合的所有元素
System.out.println("hs集合中包含h集合中的所有元素");
}
else {
System.out.println("hs集合中不包含h集合中的所有元素");
}
//hs.addAll(h); 将集合h中的所有元素添加到hs中
hs.removeAll(h); //删除hs和h的交集中的元素
//hs.retainAll(h); 取得hs和h的交集的元素
//hs.clear(); 删除所有hs的元素
Object[] objects=hs.toArray(); //HashSet.toArray()的无参方法
for(Object o:objects) {
System.out.print(o+" ");
}
System.out.println();
Integer[] mid=hs.toArray(new Integer[hs.size()]); //HashSet.toArray()的带参方法
for(Integer integer:mid) {
System.out.print(integer+" ");
}
System.out.println();
hs.removeAll(java.util.Collections.singleton(7)); //Collections.singleton(7):生成只有一个元素7的集合
Iterator<Integer> iterator=hs.iterator();
while(iterator.hasNext()) {
System.out.print(iterator.next()+" ");
}
System.out.println();
}
}
结果如下:
在添加复杂类对象时,可以重写hashCode()和equals()方法,防止输入重复
package test;
import java.util.HashSet;
class Student{
private int id;
private String name;
public Student() {
}
public Student(int id, String name) {
this.id = id;
this.name = name;
}
@Override
public int hashCode() {
return id;
}
@Override
public boolean equals(Object obj) {
if(obj instanceof Student) {
Student student=(Student)obj;
return this.id==student.id;
}
else
return false;
}
}
public class Test {
public static void main(String args[]) {
Student s1=new Student(01,"张三");
Student s2=new Student(01,"李四");
HashSet<Student> hSet=new HashSet<>();
hSet.add(s1);
hSet.add(s2);
System.out.println("大小为:"+hSet.size()); //add()方法是系统先判断hashCode()是否相等,然后再调用equals()
}
}