亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > Java > 正文

Java中 判斷集合中的元素相等的依據 詳細解析

2019-11-11 06:49:19
字體:
來源:轉載
供稿:網友

我們經常使用的集合如ArrayList,LinkedList,Vector, **你在調用contains()方法的時候, 或者是你在根據對象移除元素 remove(Object o) 你知道他們是如何判斷集合中的元素是否 是相等的嗎**? 接下來我們跟著源碼去詳細探究一下 數據數據結構不同判斷的依據就不同,我們先來看一下List類的判斷依據.

先簡單的了解一下 List類 : 有序,可以有重復元素。

ArrayList 底層是一個對象數組 PRivate transient Object[] elementData; LinkedList 屬于鏈式數據結構,底層用的是一個Node類的節點,包括指針域和數據域.

private static class Node { E item; Node next; Node prev;

Node(Node<E> prev, E element, Node<E> next) { this.item = element; this.next = next; this.prev = prev; }}

ArrayList LinkedList他們都是線程不同步的 Vector非常類似ArrayList,但是Vector是同步的。, ArrayList LinkedList多線程訪問會拋出 ConcurrentModificationException。如果想使他們線程同步的可以使用 Collections.synchronizedList 方法將該集合“包裝”起來

回歸正題

我們想知道他們如何判斷集合元素是否相等,我們應該想到的是contains(Object o)方法,接下來我們看一下contains(Object o)方法

public boolean contains(Object o) { return indexOf(o) >= 0; }

他的方法內部調用了indexOf(o)這個方法,我們繼續追蹤看一下indexOf(o)方法

public int indexOf(Object o) { if (o == null) { for (int i = 0; i < size; i++) if (elementData[i]==null) return i; } else { for (int i = 0; i < size; i++) if (o.equals(elementData[i])) return i; } return -1; }

看到這里我們應該能明白了 先判斷要查找的元素是否為空,不為空的話就調用equals方法.由此我們得到一個結論 List類中判斷元素是否相等依賴的是equals方法.

set類 : 無序,不允許重復

HashSet : 此實現不是同步的 我們知道HashSet它不允許出現重復元素,他是如何保證元素唯一的呢,我們應該首先想到的是看他的add()方法 如下

public boolean add(E e) { return map.put(e, PRESENT)==null; } 這里出現了一個map我們找找看看他是什么

我們在上面看到了他的定義

private transient HashMap<E,Object> map;

現在我們知道了HashSet的內部其實是一個HashMap來維護的,眾所周知HashMap的鍵是不允許有相同的,不用說HashMap的鍵就是HashSet的值,接下來我們只需要知道HashMap的鍵是如何保證唯一的就行了

我們就要追蹤HashMap的添加元素方法 put(K key, V value)

public V put(K key, V value) { if (table == EMPTY_TABLE) { inflateTable(threshold); } if (key == null) return putForNullKey(value); int hash = hash(key); int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) { V oldValue = e.value; e.value = value; e.recordaccess(this); return oldValue; } }

雖然有點麻煩我們只需要仔細看看 一定可以看明白 抓住最重要的一句

e.hash == hash && ((k = e.key) == key || key.equals(k))

現在我們也知道了HashSet 和HaspMap 保證元素唯一的辦法是 先比較兩個元素的哈希值,如果哈希值相等,在比較元素的地址是否相同,或者調用兩個元素的equals方法如果哈希值不同,就根本不用在比較了.


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美国产日韩一区二区在线观看| 国产98色在线| 韩国福利视频一区| 欧美主播福利视频| 日韩国产高清污视频在线观看| 午夜精品久久久久久99热| 欧美一区三区三区高中清蜜桃| 亚洲图片在线综合| 欧美xxxx做受欧美| 久久久之久亚州精品露出| 日本一欧美一欧美一亚洲视频| 欧美成人午夜激情在线| 欧美日韩人人澡狠狠躁视频| 亚洲精品v天堂中文字幕| 日韩中文字幕在线视频播放| 亚洲成人激情小说| 91网在线免费观看| 国产精品毛片a∨一区二区三区|国| 日韩中文字幕欧美| 亚洲人成网在线播放| 成人精品视频99在线观看免费| 成人黄色生活片| 亚洲无限av看| 97在线观看免费高清| 亚洲视频在线播放| 日韩中文在线中文网在线观看| 国产一区玩具在线观看| 亚洲人午夜精品免费| 亚洲人精选亚洲人成在线| 在线播放国产精品| 亚洲在线视频观看| 日本一区二三区好的精华液| 日韩av网站大全| 国产精品视频自拍| 狠狠久久亚洲欧美专区| 欧美剧在线观看| 国产精品亚洲片夜色在线| 国产福利精品av综合导导航| 在线日韩欧美视频| 欧美日本亚洲视频| 亚洲精品电影网| 夜色77av精品影院| 国产日韩亚洲欧美| 亚洲人成毛片在线播放| 欧洲成人免费aa| 国产亚洲精品激情久久| 欧美精品在线免费观看| 国产精品露脸av在线| 91av视频导航| 亚洲久久久久久久久久久| 亚洲色图av在线| 色久欧美在线视频观看| 久久九九免费视频| 欧美一区二区视频97| 日本精品一区二区三区在线| 亚洲三级av在线| 久久久噜久噜久久综合| 久久精品视频va| 一区二区三区回区在观看免费视频| 欧美福利视频网站| 精品国产乱码久久久久久天美| 日本韩国欧美精品大片卡二| 欧美又大粗又爽又黄大片视频| 青青在线视频一区二区三区| 国产精品高潮呻吟视频| 日韩国产高清视频在线| 亚洲一区免费网站| 日韩中文字幕不卡视频| 欧美激情aaaa| 亚洲第一区中文99精品| 国产精品第8页| 97精品视频在线观看| 欧美野外wwwxxx| 国产一区二区激情| 久久躁日日躁aaaaxxxx| 黄色成人av网| 欧美日韩一区二区三区在线免费观看| 欧美性猛交丰臀xxxxx网站| 另类少妇人与禽zozz0性伦| 欧美电影院免费观看| 国产视频综合在线| 精品偷拍各种wc美女嘘嘘| 国产精品福利在线观看网址| 亚洲欧美国内爽妇网| 久久综合九色九九| 欧美黑人一区二区三区| 人妖精品videosex性欧美| 日韩电影在线观看永久视频免费网站| 国产精品678| 欧美成年人在线观看| 国产视频久久网| 久久在线视频在线| 久久免费在线观看| 91色在线视频| 精品成人久久av| 欧美黑人一级爽快片淫片高清| 欧美俄罗斯乱妇| 欧美亚洲国产视频小说| 成人网页在线免费观看| 在线观看国产欧美| 68精品国产免费久久久久久婷婷| 亚洲欧洲成视频免费观看| 成人h片在线播放免费网站| 欧美中文在线免费| 精品视频久久久久久久| 欧美性资源免费| 福利一区福利二区微拍刺激| 日韩国产欧美区| 亚洲欧美日韩精品| 性日韩欧美在线视频| 国产成人97精品免费看片| 久久91精品国产91久久久| 夜夜躁日日躁狠狠久久88av| 欧美在线免费观看| 91高潮在线观看| 欧美乱大交xxxxx另类电影| 成人黄色av网| 庆余年2免费日韩剧观看大牛| 黑人欧美xxxx| 成人欧美一区二区三区在线| 欧美电影免费观看高清| 日韩一区二区福利| 国产精品久久久久久久久影视| 精品福利免费观看| 欧美老少做受xxxx高潮| 日韩欧美在线视频日韩欧美在线视频| 国产69精品久久久久9999| 欧美精品一区二区免费| 萌白酱国产一区二区| 欧美在线视频一区二区| 欧洲成人免费aa| 最近中文字幕日韩精品| 91精品视频大全| 亚洲成av人乱码色午夜| 播播国产欧美激情| 亚洲最大的网站| 欧美在线观看一区二区三区| 久久久这里只有精品视频| 欧美午夜精品久久久久久久| 亚洲第一免费播放区| 一区二区欧美日韩视频| 亚洲精品白浆高清久久久久久| 懂色av一区二区三区| 国产成人亚洲综合| 欧美一级大胆视频| 免费91麻豆精品国产自产在线观看| 国产精品夜间视频香蕉| 欧美日韩在线视频观看| 中文字幕亚洲在线| 精品网站999www| 日韩av片免费在线观看| 亚洲欧美激情精品一区二区| 欧美黑人性猛交| 欧美日韩精品国产| 最近2019年日本中文免费字幕| 国产一区二区三区在线视频| 国产中文字幕日韩| 国产精品视频免费在线| 国产精品日韩欧美大师| 午夜精品一区二区三区在线视频| 日韩精品中文在线观看| 伊人一区二区三区久久精品| 久久精品视频99| 久久久国产精品一区|