亚洲国产日韩人妖另类,久久只有这里有精品热久久,依依成人精品视频在线观看,免费国产午夜视频在线

      
      

        java集合Set接口

        Set接口Set接口是Collection的子接口,set接口沒有提供額外的方法。

        Set 集合不允許包含相同的元素,如果試把兩個相同的元素加入同一個 Set 集合中,則添加操作失敗。

        Set 判斷兩個對象是否相同不是使用 == 運算符,而是根據(jù) equals 方法。因此存放到Set集合中的元素一定要注意equals方法的重寫。

        Set的常用實現(xiàn)類有:HashSetTreeSet、LinkedHashSet。

        HashSet1、概述

        HashSet 是 Set 接口的典型實現(xiàn),大多數(shù)時候使用 Set 集合時都使用這個實現(xiàn)類。

        HashSet 按 Hash 算法來存儲集合中的元素,因此具有很好的存取和查找性能。

        HashSet 集合判斷兩個元素相等的標準:兩個對象通過 hashCode() 方法比較相等,并且兩個對象的 equals() 方法返回值也相等。

        當向 HashSet 集合中存入一個元素時,HashSet 會調(diào)用該對象的 hashCode() 方法來得到該對象的 hashCode 值,然后根據(jù) hashCode 值,通過某種散列函數(shù)決定該對象在 HashSet 中的存儲位置。(這個散列函數(shù)會與底層數(shù)組的長度相計算得到在數(shù)組中的下標,并且這種散列函數(shù)計算還盡可能保證能均勻存儲元素,越是散列分布,該散列函數(shù)設計的越好)

        如果兩個元素的hashCode()值相等,會再繼續(xù)調(diào)用equals方法,如果equals方法結(jié)果為true,添加失敗,如果為false,那么會保存該元素,但是該數(shù)組的位置已經(jīng)有元素了,那么會通過鏈表的方式繼續(xù)鏈接。

        HashSet 具有以下特點:

        不能保證元素的排列順序

        HashSet 不是線程安全的

        集合元素可以有一個是 null

        java集合Set接口

        底層也是數(shù)組,初始容量為16,當如果使用率超過0.75,(16*0.75=12)就會擴大容量為原來的2倍。(16擴容為32,依次為64,128….等)

        結(jié)論:存放到Set集合中的元素一定要注意equals和hashcode方法的重寫。

        2、hashCode和equals方法

        重寫equals()方法的原則:

        對稱性:如果x.equals(y)返回是“true”,那么y.equals(x)也應該返回是“true”。

        自反性:x.equals(x)必須返回是“true”。

        類推性:如果x.equals(y)返回是“true”,而且y.equals(z)返回是“true”,那么z.equals(x)也應該返回是“true”。

        一致性:如果x.equals(y)返回是“true”,只要x和y內(nèi)容一直不變,不管你重復x.equals(y)多少次,返回都是“true”。

        任何情況下,x.equals(null),永遠返回是“false”;x.equals(和x不同類型的對象)永遠返回是“false”。

        重寫 hashCode() 方法的基本原則

        在程序運行時,同一個對象多次調(diào)用 hashCode() 方法應該返回相同的值

        當兩個對象的 equals() 方法比較返回 true 時,這兩個對象的 hashCode() 方法的返回值也應相等

        對象中用作 equals() 方法比較的屬性Field,都應該用來計算 hashCode 值

        LinkedHashSetLinkedHashSet 是 HashSet 的子類

        LinkedHashSet 根據(jù)元素的 hashCode 值來決定元素的存儲位置,但它同時使用鏈表維護元素的次序,這使得元素看起來是以插入順序保存的。

        LinkedHashSet插入性能略低于 HashSet,但在迭代訪問 Set 里的全部元素時有很好的性能。

        LinkedHashSet 不允許集合元素重復。

        TreeSetTreeSet 是 SortedSet 接口的實現(xiàn)類,TreeSet 可以確保集合元素處于排序狀態(tài)。

        TreeSet 兩種排序方法:自然排序和定制排序。默認情況下,TreeSet 采用自然排序。

        1、自然排序

        TreeSet 會調(diào)用集合元素的 compareTo(Object obj) 方法來比較元素之間的大小關系,然后將集合元素按升序排列,如果試圖把一個對象添加到 TreeSet 時,則該對象的類必須實現(xiàn) Comparable 接口。實現(xiàn) Comparable 的類必須實現(xiàn) compareTo(Object obj) 方法,兩個對象即通過 compareTo(Object obj) 方法的返回值來比較大小。

        向 TreeSet 中添加元素時,只有第一個元素無須比較compareTo()方法,后面添加的所有元素都會調(diào)用compareTo()方法進行比較。

        因為只有相同類的兩個實例才會比較大小,所以向 TreeSet 中添加的應該是同一個類的對象

        對于 TreeSet 集合而言,它判斷兩個對象是否相等的唯一標準是:兩個對象通過 compareTo(Object obj) 方法比較返回值

        當需要把一個對象放入 TreeSet 中,重寫該對象對應的 equals() 方法時,應保證該方法與 compareTo(Object obj) 方法有一致的結(jié)果:如果兩個對象通過 equals() 方法比較返回 true,則通過 compareTo(Object obj) 方法比較應返回 0。否則讓人難以理解。

        Comparable 的典型實現(xiàn):

        BigDecimal、BigInteger 以及所有的數(shù)值型對應的包裝類:按它們對應的數(shù)值大小進行比較

        Character:按字符的 unicode值來進行比較

        Boolean:true 對應的包裝類實例大于 false 對應的包裝類實例

        String:按字符串中字符的 unicode 值進行比較

        Date、Time:后邊的時間、日期比前面的時間、日期大

        2、定制排序

        TreeSet的自然排序是根據(jù)集合元素的大小,進行元素升序排列。如果需要定制排序,比如降序排列,可通過Comparator接口的幫助。需要重寫compare(T o1,T o2)方法。利用int compare(T o1,T o2)方法,比較o1和o2的大小:如果方法返回正整數(shù),則表示o1大于o2;如果返回0,表示相等;返回負整數(shù),表示o1小于o2。

        要實現(xiàn)定制排序,需要將實現(xiàn)Comparator接口的實例作為形參傳遞給TreeSet的構(gòu)造器。

        此時,仍然只能向TreeSet中添加類型相同的對象。否則發(fā)生ClassCastException異常。

        使用定制排序判斷兩個元素相等的標準是:通過Comparator比較兩個元素返回了0。

        當使用具有與 equals 不一致的強行排序能力的 Comparator 對有序 set(或有序映射)進行排序時,應該小心謹慎。假定一個帶顯式 Comparator c 的有序 set(或有序映射)與從 set S 中抽取出來的元素(或鍵)一起使用。如果 c 強行對 S 進行的排序是與 equals 不一致的,那么有序 set(或有序映射)將是行為“怪異的”。

        3、結(jié)論

        1.放到TreeSet集合中的元素必須是同一個類型的元素

        2.放到TreeSet集合中的元素必須實現(xiàn)Comparable接口,重寫compareTo(Object obj)方法,并且需要使得equals方法的與compareTo方法結(jié)果一直,即如果兩個對象通過 equals() 方法比較返回 true,則通過 compareTo(Object obj) 方法比較應返回 0。

        3.TreeSet的自然排序是根據(jù)集合元素的大小,進行元素升序排列。如果需要定制排序,比如降序排列,可以將實現(xiàn)Comparator接口的實例作為形參傳遞給TreeSet的構(gòu)造器,那么添加元素時,將調(diào)用compare(T o1,T o2)方法作為排序依據(jù)。同時也應該注意equals方法與compare(T o1,T o2)方法的結(jié)果一致。

        相關文章:

        java集合的遍歷

        java集合List接口

        java集合Collection接口

        java之數(shù)據(jù)格式化

        Java異常處理的概述

        鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權歸原作者所有,如有侵權請聯(lián)系管理員(admin#wlmqw.com)刪除。
        上一篇 2022年5月8日 19:35
        下一篇 2022年5月8日 20:05

        相關推薦

        聯(lián)系我們

        聯(lián)系郵箱:admin#wlmqw.com
        工作時間:周一至周五,10:30-18:30,節(jié)假日休息