Set集合、HashSet 和 TreeSet

2019/11/5 9:45:39

目標任務:三種集合之Set集合,Set集合兩種應用方法 HashSet 和 TreeSet###

什麼是集合?

答: 在創建Java數組時,必須明確指定數組長度,數組一旦創建,其長度就不能被改變。爲了使程序能方便的存儲和操縱數目不固定的一組數據,JDK類庫提供了Java集合。如:

  1. Set (集)
    • HashSet TreeSet 有這兩種聲明方式
  2. List(列表)
    • ArrayList
  3. Map(映射)
    • HashMap TreeMap

在這裏插入圖片描述


一、Set 的 HashSet聲明##

1.需獲取hashCode和equals的方法

 直接獲取:右鍵---》source----》hashCode equals

2.HashSet聲明Set集

Set<String> set=new HashSet<String>();

3.往Set集中添加、移除元素等

set.add("1");
set.add("2");
set.add("2");
set.remove(index);//輸入下標index
set.size();//獲取set集長度,相同的內容當成一個長度

4.遍歷兩種方法

1. forEach 遍歷

public static void show(Set<String> set)
{	
	for (String string : set) {
		System.out.println(string);
	}
}

2.Iterator 迭代器 遍歷

public static void show1(Set<String> set)
{
	//迭代器
	  Iterator<String> iterator = set.iterator();
	  
	  while(iterator.hasNext()) //是否還有更多的元素
	  {
		  
		  String str=iterator.next(); //取出當前指針指向的那個元素
		  System.out.println(str);
	  }
}

二、Set 的 TreeSet聲明

1.需獲取hashCode和equals的方法

 直接獲取:右鍵---》source----》hashCode equals

2.需要繼承Compare接口

public class Student implements java.lang.Comparable{
	//聲明屬性
.......
	public int compareTo(Object o) {//重寫方法
    return 0;
}

3.HashSet聲明Set集

Set<String> set=new TreeSet<String>();

4.往Set集中添加、移除元素等

set.add(5);
set.add(8);
set.remove(index);//輸入下標index
set.size();//獲取set集長度,相同的內容當成一個長度

5.遍歷兩種方法

1. forEach 遍歷

public static void show(Set<String> set)
{	
	for (String string : set) {
		System.out.println(string);
	}
}

2.Iterator 迭代器 遍歷

public static void show1(Set<String> set)
{
	//迭代器
	  Iterator<String> iterator = set.iterator();
	  
	  while(iterator.hasNext()) //是否還有更多的元素
	  {
		  
		  String str=iterator.next(); //取出當前指針指向的那個元素
		  System.out.println(str);
	  }
}

幾點重要說明:

  1. Object類中的hashCode()的方法是所有子類都會繼承這個方法,這個方法會用Hash算法算出一個Hash(哈希)碼值返回,HashSet會用Hash碼值去和數組長度取模,模(這個模就是對象要存放在數組中的位置)相同時纔會判斷數組中的元素和要加入的對象的內容是否相同,如果不同纔會添加進去。
  2. 存入HashSet的集合對象中的自定義類必須覆蓋hashCode(),equals()兩個方法,才能保證集合中元素容不重複。在覆蓋和hashCode()方法時,要使相同對象的hashCode()方法返回相同值,覆蓋equals()方法再判斷其內容。爲了保證效率,所以在覆蓋hashCode()方法時,也要儘量使不同對象儘量返回不同的Hash碼值。
  3. 如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash值(相同對象),纔會用equals()方法來判斷兩個對象的內容是否相同。

TreeSet 要在類中實現比較器接口
總結:

  • set可以放入一個null,但是不能放重複的元素
  • HashSet如果放入自定義類型,需要自己定義實現 equals hashCode
  • TreeSet如果放入自定義類型,需要自定義實現equals hasCode,還需要實現java.lang.compare接口

放入自定義類型,需要自己定義實現 equals hashCode

  • TreeSet如果放入自定義類型,需要自定義實現equals hasCode,還需要實現java.lang.compare接口
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章