Personnel类:
打印对象数据源:[张鹏, 阿莉, 方明, 小芳]
是否包含小芳:true
是否为空集合:false
是删除小芳:true
打印对象操作后数据源:[张鹏, 阿莉, 方明]
打印对象数据源:[xiaofang:18, lisi:20, zhangsan:10, wangwu:30]
是否包含对象p:true
是否为空集合:false
是删除pr:true
打印对象操作后数据源:[xiaofang:18, lisi:20, wangwu:30]
Api参考:
public class Personnel {
private String name;
private int age;
public Personnel() {
}
public Personnel(String name,int age){
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public void setName(String name) {
this.name = name;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return this.getName()+":"+this.getAge();
}
//覆写hashCode算法
public int hashCode() {
return name.hashCode()+age*77;
}
//覆写equals算法
public boolean equals(Object obj) {
if(this == obj) return true;
Personnel p = (Personnel)obj;
return p.getName().equals(name) && age == p.getAge();
}
}
/**
* hashCode算法中用的是Object对象equals方法,所以要覆写equals方法
*/
HashSet类:
/**
* Set集合和Collection 接口中方法是一样
* Set:
* |--HashSet 哈希表(实际上是一个 HashMap 实例)支持。它不保证 set 的迭代顺序;
* 特别是它不保证该顺序恒久不变。此类允许使用 null 元素。
* |--TreeSet 使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。
*
*/
public class SetDemo {
public static void main(String[] args) {
HashSet<String> hs = new HashSet<>();
HashSet<Personnel> hp = new HashSet<>();
fonctions(hs);
System.out.println();
fonctionp(hp);
}
private static void fonctions(HashSet<String> hs) {
//添加数据
hs.add("方明");
hs.add("张鹏");
hs.add("小芳");
hs.add("阿莉");
System.out.println("打印对象数据源:"+hs);
//包含元素
System.out.println("是否包含小芳:"+hs.contains("小芳"));
//不包含任何元素
System.out.println("是否为空集合:"+hs.isEmpty());
//删除指定元素
System.out.println("是删除小芳:"+hs.remove("小芳"));
System.out.println("打印对象操作后数据源:"+hs);
//迭代器和Collection 是相同的
}
private static void fonctionp(HashSet<Personnel> hp) {
//添加对象
Personnel p = new Personnel("xiaofang",18);
Personnel pr = new Personnel("zhangsan",10);
hp.add(new Personnel("lisi",20));
//添加两次
hp.add(new Personnel("lisi",20));
hp.add(new Personnel("wangwu",30));
hp.add(p);
hp.add(pr);
System.out.println("打印对象数据源:"+hp);
//包含元素
System.out.println("是否包含对象p:"+hp.contains(p));
//不包含任何元素
System.out.println("是否为空集合:"+hp.isEmpty());
//删除指定元素
System.out.println("是删除pr:"+hp.remove(pr));
System.out.println("打印对象操作后数据源:"+hp);
}
}
/**
* 注意:
* 1.HashSet集合是基于哈希表结构。
* 2.HashSet存储方式是通过哈希算法存储。
* 3.如果需要按照指定内容排序和唯一性,需要复写hashCode()和equals()方法
*/
运行结果:
打印对象数据源:[张鹏, 阿莉, 方明, 小芳]
是否包含小芳:true
是否为空集合:false
是删除小芳:true
打印对象操作后数据源:[张鹏, 阿莉, 方明]
打印对象数据源:[xiaofang:18, lisi:20, zhangsan:10, wangwu:30]
是否包含对象p:true
是否为空集合:false
是删除pr:true
打印对象操作后数据源:[xiaofang:18, lisi:20, wangwu:30]
Api参考:
方法摘要 | |
---|---|
boolean |
add(E e) 如果此 set 中尚未包含指定元素,则添加指定元素。 |
void |
clear() 从此 set 中移除所有元素。 |
Object |
clone() 返回此 HashSet 实例的浅表副本:并没有复制这些元素本身。 |
boolean |
contains(Object o) 如果此 set 包含指定元素,则返回 true。 |
boolean |
isEmpty() 如果此 set 不包含任何元素,则返回 true。 |
Iterator<E> |
iterator() 返回对此 set 中元素进行迭代的迭代器。 |
boolean |
remove(Object o) 如果指定元素存在于此 set 中,则将其移除。 |
int |
size() 返回此 set 中的元素的数量(set 的容量)。 |