Java基礎學習筆記--常用API之HashSet

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
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章