2019/11/5 9:45:39
目標任務:三種集合之Set集合,Set集合兩種應用方法 HashSet 和 TreeSet###
什麼是集合?
答: 在創建Java數組時,必須明確指定數組長度,數組一旦創建,其長度就不能被改變。爲了使程序能方便的存儲和操縱數目不固定的一組數據,JDK類庫提供了Java集合。如:
- Set (集)
- HashSet TreeSet 有這兩種聲明方式
- List(列表)
- ArrayList
- 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);
}
}
幾點重要說明:
- Object類中的hashCode()的方法是所有子類都會繼承這個方法,這個方法會用Hash算法算出一個Hash(哈希)碼值返回,HashSet會用Hash碼值去和數組長度取模,模(這個模就是對象要存放在數組中的位置)相同時纔會判斷數組中的元素和要加入的對象的內容是否相同,如果不同纔會添加進去。
- 存入HashSet的集合對象中的自定義類必須覆蓋hashCode(),equals()兩個方法,才能保證集合中元素容不重複。在覆蓋和hashCode()方法時,要使相同對象的hashCode()方法返回相同值,覆蓋equals()方法再判斷其內容。爲了保證效率,所以在覆蓋hashCode()方法時,也要儘量使不同對象儘量返回不同的Hash碼值。
- 如果數組中的元素和要加入的對象的hashCode()返回了相同的Hash值(相同對象),纔會用equals()方法來判斷兩個對象的內容是否相同。
TreeSet 要在類中實現比較器接口
總結:
- set可以放入一個null,但是不能放重複的元素
- HashSet如果放入自定義類型,需要自己定義實現 equals hashCode
- TreeSet如果放入自定義類型,需要自定義實現equals hasCode,還需要實現java.lang.compare接口
放入自定義類型,需要自己定義實現 equals hashCode
- TreeSet如果放入自定義類型,需要自定義實現equals hasCode,還需要實現java.lang.compare接口