HashSet.add() — 添加元素
public boolean add(E e)
如果指定的元素尚不存在,则将其添加到此集合中。更正式地,将指定的元素e这套如果此集合不包含任何元素e2,使得 Objects.equals(e, e2)。如果此set已包含该元素,则调用将保持set不变并返回false。
HashSet.remove() — 删除元素
public boolean remove(Object o)
如果存在,则从该集合中移除指定的元素。更正式地说,移除元素e,使得 Objects.equals(o, e),如果此set包含这样的元素。返回true此set是否包含该元素(或等效地,如果此set因调用而更改)。(一旦调用返回,该集合将不包含该元素。
HashSet.clear() —删除所有元素
public void clear()
删除此集合中的所有元素。此调用返回后,该集将为空。
HashSet.contains() — 是否包含指定元素
public boolean contains(Object o)
true如果此set包含指定的元素,则返回。更正式地说,返回true当且仅当此set包含的元素e,使得 Objects.equals(o, e)。
HashSet.isEmpty() — 是否为空
public boolean isEmpty()
true如果此set不包含任何元素,则返回
HashSet.size() — 集合中元素个数
public boolean isEmpty()
true如果此set不包含任何元素,则返回
测试示例
package day_3_30;
import java.util.HashSet;
import java.util.Iterator;
public class HashSetTest {
public static void main(String[] args) {
// testHashSet(); //测试hashSet存储基本类型的数据
testHashSet2(); //测试hashSet存储对象
}
private static void testHashSet() {
// 新建HashSet
HashSet hashSet = new HashSet();
// 将元素添加到Set中
hashSet.add("a");
hashSet.add("b");
hashSet.add("c");
hashSet.add("d");
hashSet.add("e");
hashSet.add(12);
hashSet.add("12");
hashSet.add("c");
// hashSetTraverse(hashSet);
// 判断HashSet是否包含某个值
System.out.printf("HashSet contains a :%s\n", hashSet.contains("a"));
System.out.printf("HashSet contains g :%s\n", hashSet.contains("g"));
//删除某一个元素
hashSet.remove("c");
hashSetTraverse(hashSet);
// 新建一个包含b、c、f的HashSet
HashSet anotherHashSet = new HashSet();
anotherHashSet.add("b");
anotherHashSet.add("c");
anotherHashSet.add("f");
// 克隆一个hashSetClone,内容和hashSet一模一样
HashSet hashSetClone = (HashSet)hashSet.clone();
// 删除“hashSetClone中,属于anotherHashSet的元素”
hashSetClone.removeAll(anotherHashSet);
// 打印hashSetClone
System.out.printf("removeset : %s\n", hashSetClone);
//==============================================================================================
// 克隆一个retainset,内容和hashSet一模一样
HashSet retainset = (HashSet)hashSet.clone();
// 保留“retainset中,属于otherSet的元素”
retainset.retainAll(anotherHashSet);
// 打印retainset
System.out.printf("retainset : %s\n", retainset);
}
private static void testHashSet2() {
HashSet hashSet = new HashSet();
hashSet.add(new User(1,"张三"));
hashSet.add(new User(1,"张三"));
hashSet.add(new User(2,"李四"));
hashSet.add(new User(3,"王五"));
hashSetTraverse(hashSet);
//思考:为什么看似同样的对象,为什么不去重?
//这里我们需要先来了解一个概念
/*HashMap集合判断两个元素相等的标准:两个对象的equals方法相等,并且hashCode方法返回值也相等..*/
//我们来看一下hashSet中的hashCode
System.out.println("\nhashSet中的hashCode值:");
for(Object obj:hashSet) {
System.out.print(obj.hashCode() + "\t");
}
//是不是明白了,对象为什么没有去重.那有应该如何实现对象的去重.释放User类中的equals和hashCode的重写吧。
System.out.println("\n\n是不是明白了,对象为什么没有去重.\n那又应该如何实现对象的去重?\n释放User类中的equals和hashCode的重写吧(你可以尝试分别释放它们)。");
}
//hashSet的两种遍历方式。
public static void hashSetTraverse(HashSet hashSet) {
// HashSet是无序的,是指存储顺序与遍历顺序不一致。
// 遍历
// 迭代器
System.out.println("用Iterator进行遍历:");
Iterator iterator = hashSet.iterator();
while (iterator.hasNext()) {
Object obj = iterator.next();
System.out.println(obj);
}
// 加强for循环进行遍历
System.out.println("\n\n用加强for循环进行遍历:");
for (Object obj : hashSet) {
System.out.println(obj);
}
}
}
package day_3_30;
public class User {
private int id;
private String name;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "User [id=" + id + ", name=" + name + "]";
}
public User(int id, String name) {
super();
this.id = id;
this.name = name;
}
public User() {
super();
}
// @Override
// public int hashCode() {
// final int prime = 31;
// int result = 1;
// result = prime * result + id;
// result = prime * result + ((name == null) ? 0 : name.hashCode());
// return result;
// }
//
// @Override
// public boolean equals(Object obj) {
// if (this == obj)
// return true;
// if (obj == null)
// return false;
// if (getClass() != obj.getClass())
// return false;
// User other = (User) obj;
// if (id != other.id)
// return false;
// if (name == null) {
// if (other.name != null)
// return false;
// } else if (!name.equals(other.name))
// return false;
// return true;
// }
}