1. 程式人生 > >java day17 Set類的子類:HashSet類

java day17 Set類的子類:HashSet類

Set集合,無索引,不可以重複,無序(存取不一致)

字串遍歷

		HashSet<String> hs = new HashSet<>();					//建立HashSet物件
		boolean b1 = hs.add("a");
		boolean b2 = hs.add("a");								//當向set集合中儲存重複元素的時候返回為false
		hs.add("b");
		hs.add("c");
		hs.add("d");
		System.out.println(hs);									//HashSet的繼承體系中有重寫toString方法
		System.out.println(b1);
		System.out.println(b2);
		
		for (String string : hs) {								//只要能用迭代器迭代的,就可以使用增強for迴圈遍歷
			System.out.println(string);
		}

HashSet如何保證元素唯一性

需要重寫hashCode方法和equal方法 重寫後,當他們的hashCode相同時,就呼叫equal()方法比較,false就存,true就不存

所以要保證hashCode返回的不一樣(相當於票號,如果是2個人就給2張不同的票號) Alt+shift+S h自動生成

	/*
	 * 為什麼是31?
	 * 1,31是一個質數,質數是能被1和自己本身整除的數
	 * 2,31這個數既不大也不小
	 * 3,31這個數好算,2的五次方-1,2向左移動5位
	 */
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + age;
		result = prime * result + ((name == null) ? 0 : name.hashCode());
		return result;
	}
	
	public boolean equals(Object obj) {
		if (this == obj)						//呼叫的物件和傳入的物件是同一個物件
			return true;						//直接返回true
		if (obj == null)						//傳入的物件為null
			return false;						//返回false
		if (getClass() != obj.getClass())		//判斷兩個物件對應的位元組碼檔案是否是同一個位元組碼
			return false;						//如果不是直接返回false
		Person other = (Person) obj;			//向下轉型
		if (age != other.age)					//呼叫物件的年齡不等於傳入物件的年齡
			return false;						//返回false
		if (name == null) {						//呼叫物件的姓名為null
			if (other.name != null)				//傳入物件的姓名不為null
				return false;					//返回false
		} else if (!name.equals(other.name))	//呼叫物件的姓名不等於傳入物件的姓名
			return false;						//返回false
		return true;							//返回true
	}

ListedHashSet類

底層是連結串列實現的,是set集合中唯一一個能保證怎麼存就怎麼取的集合物件 因為是HashSet的子類,所以也是保證元素唯一的,與HashSet的原理一樣

TreeSet類

Test:將集合中的重複元素去掉

package com.heima.test;

import java.util.ArrayList;
import java.util.LinkedHashSet;
import java.util.List;

public class Test3 {

	/**
	 *  需求:將集合中的重複元素去掉
	 *  
	 *  分析:
	 *  1,建立List集合儲存若干個重複元素
	 *  2,單獨定義方法去除重複
	 *  3,列印一下List集合
	 */
	public static void main(String[] args) {
		//1,建立List集合儲存若干個重複元素
		ArrayList<String> list = new ArrayList<>();
		list.add("a");
		list.add("a");
		list.add("a");
		list.add("b");
		list.add("b");
		list.add("b");
		list.add("c");
		list.add("c");
		list.add("c");
		list.add("c");
		
		//2,單獨定義方法去除重複
		getSingle(list);
		
		//3,列印一下List集合
		System.out.println(list);
	}
	/*
	 * 分析
	 * 去除List集合中的重複元素
	 * 1,建立一個LinkedHashSet集合
	 * 2,將List集合中所有的元素新增到LinkedHashSet集合
	 * 3,將list集合中的元素清除
	 * 4,將LinkedHashSet集合中的元素添加回List集合中
	 */
	public static void getSingle(List<String> list) {
		//1,建立一個LinkedHashSet集合
		LinkedHashSet<String> lhs = new LinkedHashSet<>();
		//2,將List集合中所有的元素新增到LinkedHashSet集合
		lhs.addAll(list);
		//3,將list集合中的元素清除
		list.clear();
		//4,將LinkedHashSet集合中的元素添加回List集合中
		list.addAll(lhs);
	}

}