Set集合與Map集合

2021-08-28 17:57:31 字數 2325 閱讀 4328

一、set集合:

無序、不能出現重複元素、沒有角標   的集合

1、直接列印system.out.println(set);

2、增強for迴圈foreach

3、迭代器遍歷iterator

特點:無序:set集合的無序 指的是與元素放入的順序無關

不能重複:每乙個set子類都有自己的元素查重規則

沒有角標:set和list不一樣,list是陣列結構的集合

無序:指的是與元素放入的順序無關,但是輸出時的結果是有順序的,排序的規則是比較器介面

無角標注意:如果treeset放入的元素是引用資料型別(8中基本包裝類除外),那麼該引用資料型別必須實現比較器介面,自定義比較規則。

treeset與comparable和comparator兩種比較器的結合使用

特點:1、無序,與存放的順序無關,輸出的結果也是無序的

2、不允許有重複的元素

注意:hashset與treeset不同之處是,hashset沒有實現比較器介面放入元素時輸出也不會報錯,因為他有自己的查重規則,呼叫了只是沒有實現

hashset的查重規則不是實現比較器介面

hashset實現查重的規則是:

先呼叫hashcode()方法,再呼叫equals()方法

先呼叫hashcode()方法,如果返回值相等,則再呼叫equals()方法進行物件的各個屬性的比較,如果hashcode()返回值不相等,則直接判定兩個物件不相等。

問題:為什麼是先呼叫hashcode()後呼叫equals()方法,這兩種方法的內容是怎樣的?

先呼叫hashcode()進行比較更高效,equals()方法是比較物件的具體的屬性值是否相等,相對來說效率低,只有hashcode()返回值相等時,再去呼叫equals()方法。  先比較hashcode方法是為了提高比較效率,後用equals比較 是為了提高比較的準確率

那麼我們如果不覆寫這兩個方法  hashset不會報錯 ,但是也沒有實現查重 為什麼?

因為如果我們沒覆寫,那麼呼叫是父類object的hashcode方法,而object的hashcode方法返回位址值

只要是新建立出來的物件 位址必然不相等  

那麼如果位址相等了  hashset還會去呼叫equals方法,那麼此時我們依然沒覆寫,呼叫的是obejct類的

object類的equals是進行==比較  比較位址

所以我們必須進行兩個方法的合理覆寫,定義我們想要比較的規則

相同點:

1、元素的存放是無序的

2、沒有角標

3、不允許有重複的元素

不同點:

1、hashset的輸出結果是無序的,treeset的結果是有序的

2、treeset的排序規則是比較器,hashset的查重規則是覆寫呼叫hashcode()和equals()

3、treeset不允許出現空值null,hashset允許出現null,多個null則視為重複,輸出結果只會出現乙個

map集合:  存放的是 鍵值對

鍵不可以重複,值可以重複,鍵一旦重複,值覆蓋。

把每乙個鍵值對看成集合的乙個元素

map集合中,鍵是最主要的,所以一般不用整數來作為鍵,因為整數沒法很好的描述當前值

1、treemap

放入無序,結果是有序的(按鍵的大小排序的),排序規則是實現比較器

鍵不允許重複,鍵不允許為 null

遍歷方式:

keyset()

將map集合所有的鍵存放入set集合,然後用set集合的三種遍歷方式遍歷

entryset()

將map集合的鍵值對封裝成entry物件中,把多個entry物件放入set集合,然後用set集合的三種遍歷方式遍歷

2、hashmap

放入無序,結果無序

鍵不允許重複,查重規則是hashcode和equals 方法

鍵允許為 null,值允許為 null

jdk1.2推出  非執行緒安全集合   效率高

遍歷方式:

keyset()

將map集合所有的鍵存放入set集合,然後用set集合的三種遍歷方式遍歷

entryset()

將map集合的鍵值對封裝成entry物件中,把多個entry物件放入set集合,然後用set集合的三種遍歷方式遍歷

3、hashtable

放入而無序,結果無序

鍵不允許重複,查重規則是hashcode和equals 方法

鍵不允許為 null 或者 值不允許為 null

jdk1.0推出   執行緒安全的集合  效率低

多了兩種獲取所有的鍵和值的方法  elements()和key()方法  

遍歷方法:        

有特定的列舉器遍歷

Set集合和Map集合

用於存放不重複的資料,通過建構函式的形式 引數必須是乙個可迭代物件 建立set物件 set集合方法add 新增乙個資料 has 判斷資料是否存在,存在返回true delete 刪除資料,刪除成功返回true clear 清空集合 size,這個是屬性,返回的是集合長度,只能讀不能改 const s...

map集合和set集合

map是一種通過 鍵值 key value 對對映表的資料結構。通過key可以實現快速查詢元素。put key,value 新增 get key 查詢 遍歷map 用for each來迴圈遍歷map例項的 keyset 返回的set集合。同時遍歷key和value可以使用for each迴圈遍歷ma...

java之SET集合與MAP集合以及I O流

例項 public static void demo03 及其性質 public static void main string args public static void demo01 public static void demo03 public static void main stri...