Java工具類--Set集合(一)

Personnel類:
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參考:
方法摘要
 booleanadd(E e) 
          如果此 set 中尚未包含指定元素,則添加指定元素。
 voidclear() 
          從此 set 中移除所有元素。
 Objectclone() 
          返回此 HashSet 實例的淺表副本:並沒有複製這些元素本身。
 booleancontains(Object o) 
          如果此 set 包含指定元素,則返回 true
 booleanisEmpty() 
          如果此 set 不包含任何元素,則返回 true
 Iterator<E>iterator() 
          返回對此 set 中元素進行迭代的迭代器。
 booleanremove(Object o) 
          如果指定元素存在於此 set 中,則將其移除。
 intsize() 
          返回此 set 中的元素的數量(set 的容量)。

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