package com.common.api;
import java.util.HashSet;
import java.util.Iterator;
/*
* Set:元素是無序(存入和取出的順序不一定一致),元素不可以重複
* |---HashSet:底層數據結構是哈希表
* HashSet是如何保證元素唯一性的?
* 1)通過元素的兩個方法,hashCode何equals來完成
* 2)如果元素的hashcode相同,纔會判斷equals是否爲true
* 3)如果元素的hashCode值不同,不會調用equals
* 注意:對於判斷元素是否存在以及刪除等操作,以來的方法是元素的hashcode和equals
* |---TreeSet:
* Set 集合的功能和Collection是一致的
* boolean add(E e) 如果指定的元素不存在,則將其指定的元素添加(可選操作)。
* boolean addAll(Collection<? extends E> c) 將指定集合中的所有元素添加到此集合(如果尚未存在)(可選操作)。
* void clear() 從此集合中刪除所有元素(可選操作)。
* boolean contains(Object o) 如果此集合包含指定的元素,則返回 true 。
* boolean containsAll(Collection<?> c) 返回 true如果此集合包含所有指定集合的元素。
* boolean equals(Object o) 將指定的對象與此集合進行比較以實現相等。
* boolean isEmpty() 如果此集合不包含元素,則返回 true 。
* Iterator<E> iterator() 返回此集合中元素的迭代器。
* boolean remove(Object o) 如果存在,則從該集合中刪除指定的元素(可選操作)。
* boolean removeAll(Collection<?> c) 從此集合中刪除指定集合中包含的所有元素(可選操作)。
* boolean retainAll(Collection<?> c) 僅保留該集合中包含在指定集合中的元素(可選操作)。
* int size() 返回此集合中的元素數(其基數)。
* Object[] toArray() 返回一個包含此集合中所有元素的數組。
*
* HashSet 常用方法
* boolean add(E e) 如果指定的元素不存在,則將其指定的元素添加(可選操作)。
* boolean addAll(Collection<? extends E> c) 將指定集合中的所有元素添加到此集合(如果尚未存在)(可選操作)。
* void clear() 從此集合中刪除所有元素(可選操作)。
* boolean contains(Object o) 如果此集合包含指定的元素,則返回 true 。
* boolean containsAll(Collection<?> c) 返回 true如果此集合包含所有指定集合的元素。
* boolean equals(Object o) 將指定的對象與此集合進行比較以實現相等。
* boolean isEmpty() 如果此集合不包含元素,則返回 true 。
* Iterator<E> iterator() 返回此集合中元素的迭代器。
* boolean remove(Object o) 如果存在,則從該集合中刪除指定的元素(可選操作)。
* boolean removeAll(Collection<?> c) 從此集合中刪除指定集合中包含的所有元素(可選操作)。
* boolean retainAll(Collection<?> c) 僅保留該集合中包含在指定集合中的元素(可選操作)。
* int size() 返回此集合中的元素數(其基數)。
* Object[] toArray() 返回一個包含此集合中所有元素的數組。
*/
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name=name;
this.age=age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
{
return false;
}
Person p=(Person) obj;
System.out.println(this.name+"......"+p.name);
return this.name.equals(p.name) && this.age==p.age;
}
public int hashCode()
{
return name.hashCode()+age*3;
}
}
public class HashSetDemo {
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void method_base() {
HashSet hs=new HashSet();
hs.add("java01");
hs.add("java02");
hs.add("java03");
hs.add("java04");
sop(hs.add("java01"));
Iterator it=hs.iterator();
while(it.hasNext())
{
sop(it.next());
}
}
public static void method_custom()
{
//往hashSet集合中存入自定義對象
//姓名和年齡相同爲同一個人,重複元素
HashSet hs=new HashSet();
hs.add(new Person("a1",11));
hs.add(new Person("a2",12));
hs.add(new Person("a3",13));
hs.add(new Person("a4",14));
hs.add(new Person("a1",11));
Iterator it=hs.iterator();
while(it.hasNext())
{
Person p=(Person) it.next();
sop(p.getName()+" : "+p.getAge());
}
sop(hs.contains(new Person("a1",11)));
hs.remove(new Person("a1",11));
System.out.println("after remove ...");
Iterator it2=hs.iterator();
while(it2.hasNext())
{
Person p=(Person) it2.next();
sop(p.getName()+" : "+p.getAge());
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
method_base();
method_custom();
}
}
執行結果如下:
false
java04
java03
java02
java01
a1......a1
a1 : 11
a2 : 12
a3 : 13
a4 : 14
a1......a1
true
a1......a1
after remove ...
a2 : 12
a3 : 13
a4 : 14