日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

【Java 数据结构】Map和Set

發(fā)布時間:2024/1/8 java 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java 数据结构】Map和Set 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

🎉🎉🎉點進來你就是我的人了
博主主頁:🙈🙈🙈戳一戳,歡迎大佬指點!

歡迎志同道合的朋友一起加油喔🦾🦾🦾


目錄

1.概念

1.1概念及場景

1.2 模型

1.3 Map的說明

1.4 Map方法的介紹

1.5 Set的說明

1.6 Set方法的介紹

2、哈希表

2.1 什么是哈希表

3. 哈希沖突

3.1 概念

?3.2 降低哈希沖突的發(fā)生的概率

3.2.1 設計好的哈希函數(shù)

3.2.2 降低負載因子

3.3.當沖突發(fā)生時如何解決哈希沖突(簡單介紹)

閉散列:有兩種(線性探測法&&二次探測法)

線性探測

二次探測

開散列:它的叫法有很多,也叫做哈希桶/鏈地址法/拉鏈法

?③若遇到負載因子過大,要擴容,那么存入的數(shù)據(jù)又該怎么進行處理???(鏈表中的每一個數(shù)要進行重新哈希),以下為二倍擴容后的圖?編輯實現(xiàn)一個哈希表

?重寫hashCode()方法

性能分析

小結

4.哈希表部分底層源碼的分析

5. 一些有關 Map 和 Set 的題目

1. 統(tǒng)計一組數(shù)據(jù)中的每個數(shù)據(jù)出現(xiàn)了多少次

2. 將一組數(shù)據(jù)中多余的數(shù)據(jù)去重

3. 找出第一個重復出現(xiàn)的數(shù)據(jù)

4. 只出現(xiàn)一次的數(shù)字

5. 復制帶隨機指針的鏈表

6. 寶石與石頭

7. 鍵盤壞了的鍵

8. 前K個高頻單詞



1.概念

1.1概念及場景

①Map和Set的作用:

一種專門用來進行搜索的容器或者數(shù)據(jù)結構,其搜索的效率與其具體的實例化子類有關?。

②Map和Set相比于其他類型的優(yōu)點:

之前我們學過的常見搜索方式有:??直接遍歷,?二分查找等

上述排序比較適合靜態(tài)類型的查找,即一般不會對區(qū)間進行插入和刪除操作了,而現(xiàn)實中的查找比如:

1. 根據(jù)姓名查詢考試成績

2.?通訊錄,即根據(jù)姓名查詢聯(lián)系方式

3.?不重復集合,即需要先搜索關鍵字是否已經(jīng)在集合中

可能在查找時進行一些插入和刪除的操作,即動態(tài)查找,那上述兩種方式就不太適合了,本節(jié)介紹的?Map?和?Set?是 一種適合?動態(tài)查找的集合容器?

1.2 模型

1.?純 key 模型:

eg.有一個英文詞典,快速查找一個單詞是否在詞典中 ;快速查找某個名字在不在通訊錄中

2.Key-Value 模型

eg.統(tǒng)計文件中每個單詞出現(xiàn)的次數(shù),統(tǒng)計結果是每個單詞都有與其對應的次數(shù):<單詞,單詞出現(xiàn)的次數(shù)?> ;梁山好漢的江湖綽號:每個好漢都有自己的江湖綽號

而?Map中存儲的就是key-value的鍵值對,Set中只存儲了Key

1.3 Map的說明

Map?中存儲的是?key-value的鍵值對,?Map?是一個接口類,該類沒有繼承自?Collection?,該類中存儲的是?<K,V>?結構的鍵值對,并且?K?一定是唯一的,不?能重復?。

1.4 Map方法的介紹

方法解釋

V?get?(Object key)

返回?key?對應的?value

V?getOrDefault?(Object key, V defaultValue)

返回?key?對應的?value?,?key?不存在,返回默認值

V?put?(K key, V value)

設置?key?對應的?value

V?remove?(Object key)

刪除?key?對應的映射關系

Set<K>?keySet?()

返回所有?key?的不重復集合

Collection<V>?values?()

返回所有?value?的可重復集合

Set<Map.Entry<K, V>>?entrySet?()

返回所有的?key-value?映射關系

boolean?containsKey?(Object key)

判斷是否包含?key

boolean?containsValue?(Object value)

判斷是否包含?value

Map的注意事項:

1.?Map?是一個接口,不能直接實例化對象?,如果?要實例化對象只能實例化其實現(xiàn)類?TreeMap?或者?HashMap。

2.?Map?中存放鍵值對的?Key?是唯一的,?value?是可以重復的(重復的情況,后面put的覆蓋前面的)。

3.?Map?中的?Key?可以全部分離出來,存儲到?Set?中?來進行訪問?(?因為?Key?不能重復?)?。

4.?Map?中的?value?可以全部分離出來,存儲在?Collection?的任何一個子集合中?(value?可能有重復?)?。

5. Map?中鍵值對的?Key?不能直接修改,?value?可以修改,如果要修改?key?,只能先將該?key?刪除掉,然后再來進行重新插入。

TreeMap?和?HashMap?的區(qū)別:

Map?底層結構

TreeMap

HashMap

底層結構

紅黑樹

哈希桶

插入?/?刪除?/?查找時間

復雜度

O(log2^N)

O(1)

是否有序

關于key有序

無序

線程安全

不安全不安全
插入/刪除/查找區(qū)別需要進行元素比較通過哈希函數(shù)計算哈希地址

比較與覆寫

key必須能夠比較,否則會拋出

ClassCastException異常

自定義類型需要覆寫equals和

hashCode方法

應用場景

需要?Key?有序場景下

Key?是否有序不關心,需要更高的

時間性能

其中 Set<Map.Entry<K, V>> entry?Set() 這個方法非常復雜但也非常重要,所以要做一些具體的說明:

Map.Entry<K, V>??Map?內(nèi)部實現(xiàn)的用來存放??<key, value>??鍵值對映射關系的內(nèi)部類?,該內(nèi)部類中主要提供了? <key, value> 的獲取,?value?的設置以及?Key?的比較方式。

如何理解????通俗來說就是:

Entry是Map里面的一個內(nèi)部類,而 Map.Entry<key,val> 的作用就是把一個個map元素(key,val) 打包成一個整體,而這個整體的類型就是 Map.Entry<K,V>, 然后我們有一個Set集合,它里面存放的每個元素的類型就是 Map.Entry<K,V>。這里可以聯(lián)想到我們的單鏈表的內(nèi)部類ListNode,將 val,next 打包成一個整體,那么它的類型就是ListNode。

?所以下面這段代碼運行起來一定會把Set集合中存放的map中的每一個元素都輸出出來:

public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("hello",2);map.put("world",1);map.put("bit",3);Set<Map.Entry<String, Integer>> entrySet = map.entrySet();for (Map.Entry<String,Integer> entry:entrySet) {System.out.println("key: "+entry.getKey()+" val: "+entry.getValue());} }

該內(nèi)部類Entry提供的一些方法也是比較重要的:

方法

解釋

K?getKey?()

返回?entry?中的?key

V?getValue?()

返回?entry?中的?value

V setValue(V value)

將鍵值對中的?value?替換為指定?value

1.5 Set的說明

Set?與?Map?主要的不同有兩點:?Set?是繼承自?Collection?的接口類,?Set?中只存儲了?Key?。

1.6 Set方法的介紹

方法

解釋

boolean?add?(E e)

添加元素,但重復元素不會被添加成功

void?clear?()

清空集合

boolean?contains?(Object o)

判斷?o?是否在集合中

Iterator<E>?iterator?()

返回迭代器

boolean?remove?(Object o)

刪除集合中的?o

int size()

返回set?中元素的個數(shù)

boolean isEmpty()

檢測?set?是否為空,空返回?true?,否則返回?false

Object[] toArray()

將?set?中的元素轉換為數(shù)組返回

boolean containsAll(Collection<?> c)

集合?c?中的元素是否在?set?中全部存在,是返回?true?,否則返回false

boolean addAll(Collection<? extends

E> c)

將集合?c?中的元素添加到?set?中,可以達到去重的效果

Set的注意事項:

1. Set?是繼承自?Collection?的一個接口類。

2. Set?中只存儲了?key?,并且要求?key?一定要唯一。

3. Set?的底層是使用?Map?來實現(xiàn)的,其使用?key?與?Object?的一個默認對象作為鍵值對插入到?Map?中的。

4. Set?最大的功能就是對集合中的元素進行去重。

5.?實現(xiàn)?Set?接口的常用類有?TreeSet?和?HashSet?,還有一個?LinkedHashSet?,?LinkedHashSet?是在?HashSet?的基礎上維護了一個雙向鏈表來記錄元素的插入次序。

6. Set?中的?Key?不能修改,如果要修改,先將原來的刪除掉,然后再重新插入。

7. Set?中不能插入?null?的?key?。

TreeSet?和?HashSet?的區(qū)別?:

Set?底層結構

TreeSet

HashSet
底層結構紅黑樹哈希桶
插入/刪除/查找時間復雜度O(log2^N)O(1)
是否有序

關于?Key?有序

不一定有序
線程安全

不安全

不安全
插入/刪除/查找區(qū)別

按照紅黑樹的特性來進行插入和刪除

1.?先計算key哈希地址?2.?然后進行

插入和刪除

比較與覆寫

key必須能夠比較,否則會拋出

ClassCastException異常

自定義類型需要覆寫equals和

hashCode方法

應用場景需要Key有序場景下

Key?是否有序不關心,需要更高的

時間性能

為什么HashMap和HashSet無序,而TreeMap和TreeSet有序??后面會解釋到。

2、哈希表

2.1 什么是哈希表

最理想的搜索方法 , 即就是在查找某元素時 , 不進行任何比較的操作 , 一次直接查找到需要搜索的元素 , 可以達到這種要求的方法就是哈希表.

哈希表就是通過構造一種存儲結構 , 通過某種函數(shù)使元素存儲的位置與其關鍵碼位形成一 一映射的關系 , 這樣在查找元素的時候就可以很快找到目標元素.

哈希方法中使用的轉換函數(shù)稱為哈希(散列)函數(shù),構造出來的結構稱為哈希表(Hash Table)(或者稱散列表)

例如:

存在一個數(shù)組集合 {1,7,6,4,5,9}.
哈希函數(shù)設置為:hash(key) = key % capacity;
capacity 為存儲元素底層空間總的大小。

如圖所示:?這樣存儲數(shù)據(jù)更加便于查找

?采取上面的方法,確實能避免多次關鍵碼的比較,搜索的效率也提高的,但是問題來了,拿上述圖的情況來舉例子的話,我接著還要插入一個元素 14,該怎么辦呢?

這個就是我們本章的重點,哈希沖突,4%10 = 4;14%10 = 4,此時發(fā)生了哈希沖突。

3. 哈希沖突

3.1 概念

首先我們得知道,哈希沖突是必然的,無論怎么插入,插入多少都無法杜絕,哪怕就插入兩個元素4,14都發(fā)生了哈希沖突,我們能做的就是盡量避免哈希沖突的發(fā)生。

這也就是我們哈希表這種結構存在的問題。

哈希沖突的概念:兩個不同關鍵字key通過相同哈希哈數(shù)計算出相同的哈希地址,該種現(xiàn)象稱為哈希沖突或哈希碰撞。????????????????

?把具有不同關鍵碼而具有相同哈希地址的數(shù)據(jù)元素稱為“同義詞”。

?3.2 降低哈希沖突的發(fā)生的概率

兩種解決方法

1.設計好的哈希函數(shù);2.降低負載因子

3.2.1 設計好的哈希函數(shù)

哈希函數(shù)設計原則:

  • 哈希函數(shù)的定義域必須包括需要存儲的全部關鍵碼,而如果散列表允許有m個地址時,其值域必須在0到m-1之間。

  • 哈希函數(shù)計算出來的地址能均勻分布在整個空間中。

  • 哈希函數(shù)應該比較簡單。

常用的兩種哈希函數(shù)

1.?直接定制法

取關鍵字的某個線性函數(shù)為散列地址:?Hash??Key??= A*Key + B

優(yōu)點:簡單、均勻。

缺點:需要事先知道關?鍵字的分布情況 使用場景:適合查找比較小且連續(xù)的情況。

力扣上這道題可以幫助我們理解:?字符串中第一個只出現(xiàn)一次字符

2.?除留余數(shù)法

設散列表中允許的?地址數(shù)為?m?,取一個不大于?m?,但最接近或者等于?m?的質(zhì)數(shù)?p?作為除數(shù),按照哈希函數(shù):?Hash(key) = key% p(p<=m),?將關鍵碼轉換成哈希地址

3.2.2 降低負載因子

下圖是沖突率和負載因子的關系圖:

?從圖中我們可以直到要想降低沖突的概率,只能減小負載因子,而負載因子又取決于數(shù)組的長度。

公式:? ?負載因子 = 哈希表中元素的個數(shù) / 數(shù)組的長度

因為哈希表中的已有的元素個數(shù)是不可變的,所以我們只能通過增大數(shù)組長度來降低負載因子。

3.3.當沖突發(fā)生時如何解決哈希沖突(簡單介紹)

解決哈希沖突?兩種常見的方法是:?閉散列?和?開散列

閉散列:有兩種(線性探測法&&二次探測法)

閉散列:也叫開放定址法,當發(fā)生哈希沖突時,如果哈希表未被裝滿,說明在哈希表中必然還有空位置,那么可以??key?存放到?jīng)_突位置中的??下一個?”?空位置中去。

線性探測

①什么是線性探測:

從發(fā)生沖突的位置開始,依次向后探測,直到尋找到下一個空位置為止。

②線性探測的相關操作:

當插入操作時,通過哈希函數(shù)獲取待插入元素在哈希表中的位置 ;如果該位置中沒有元素則直接插入新元素,如果該位置中有元素發(fā)生哈希沖突,使用線性探測找到 ;下一個空位置,插入新元素

簡而言之就是尋找下一個空的地方

③弊端:(可能會導致沖突元素均被放在一起)?

二次探測

①如何進行二次探測:

利用這個公式進入插入。其中:i = 1,2,3…,Hi是通過散列函數(shù)Hash(x)對元素的關鍵碼?key?進行計算得到的位置,m是表的大小。

對于上述線性探測中的問題如果要插入44,產(chǎn)生沖突,使用解決后的情況為:

②重要結論:

當表的長度為質(zhì)數(shù)且表裝載因子?a?不超過?0.5?時,新的表項一定能夠插入,而且任何一個位置都不會被探查兩次。因此只要表中有一半的空位置,就不會存在表滿的問題。在搜索時可以不考慮表裝滿的情 況,但在插入時必須確保表的裝載因子a?不超過?0.5?,如果超出必須考慮增容。

因此:閉散列最大的缺陷就是空間利用率比較低,這也是哈希的缺陷。

開散列:它的叫法有很多,也叫做哈希桶/鏈地址法/拉鏈法

①什么是哈希桶???

開散列法又叫鏈地址法?(?開鏈法?) , 首先對關鍵碼集合用散列函數(shù)計算散列地址,具有相同地址的關鍵碼歸于同一子集合,每一個子集合稱為一個桶,各個桶中的元素通過一個單鏈表鏈接起來,各鏈表的頭結點存儲在哈希表中。 開散列,可以認為是把一個在大集合中的搜索問題轉化為在小集合中做搜索了。?參照下圖:

?②哈希桶如何進行存儲???(鏈式存儲法)

?③若遇到負載因子過大,要擴容,那么存入的數(shù)據(jù)又該怎么進行處理???(鏈表中的每一個數(shù)要進行重新哈希),以下為二倍擴容后的圖實現(xiàn)一個哈希表

代碼如下:

public class HashBuck {static class Node {public int key;public int val;public Node next;public Node(int key,int val) {this.key = key;this.val = val;}}public Node[] array;public int usedSize;public static final double DEFAULT_LOAD_FACTOR = 0.75;public HashBuck() {this.array = new Node[10];}/*** put函數(shù)* @param key* @param val*/public void put(int key,int val) {//1、找到Key所在的位置int index = key % this.array.length;//2、遍歷這個下標的鏈表,看是不是有相同的key。有 要更新val值的Node cur = array[index];while (cur != null) {if(cur.key == key) {cur.val = val;//更新val值return;}cur = cur.next;}//3、沒有這個key這個元素,頭插法Node node = new Node(key, val);node.next = array[index];array[index] = node;this.usedSize++;//4、插入元素成功之后,檢查當前散列表的負載因子if(loadFactor() >= DEFAULT_LOAD_FACTOR) {resize();//}}//擴容private void resize() {Node[] newArray = new Node[array.length*2];for (int i = 0; i < array.length; i++) {Node cur = array[i];while (cur != null) {int index = cur.key % newArray.length;//獲取新的下標 11//就是把cur這個節(jié)點,以頭插/尾插的形式 插入到新的數(shù)組對應下標的鏈表當中Node curNext = cur.next;cur.next = newArray[index];//先綁定后面newArray[index] = cur;//綁定前面cur = curNext;}}array = newArray;}private double loadFactor() {return 1.0*usedSize/array.length;}/*** 根據(jù)key獲取val值* @param key* @return*/public int get(int key) {//1、找到Key所在的位置int index = key % this.array.length;//2、遍歷這個下標的鏈表,看是不是有相同的key。有 要更新val值的Node cur = array[index];while (cur != null) {if(cur.key == key) {return cur.val;}cur = cur.next;}return -1;}

?說明:以上的代碼只是簡單的實現(xiàn)了兩個重要的函數(shù):插數(shù)據(jù)和取數(shù)據(jù)

并且只是簡單的實現(xiàn),底層的樹化并沒有實現(xiàn)。

問題--》

問題一:以上代碼的key是整形,所以找地址的時候,可以直接用 key % array.length,如果我的key是一個引用類型呢???,我怎么找地址???

下面這段代碼,兩者的 id 都一樣,運行結果卻不一樣,這就和我們剛剛的相同的key發(fā)生沖突就不一致了。

class Person {public String id;public Person(String id) {this.id = id;}@Overridepublic String toString() {return "Person{" +"id=" + id +'}';} } public class Test {public static void main(String[] args) {Person person1 = new Person("134");Person person2 = new Person("134");System.out.println(person1.hashCode());System.out.println(person2.hashCode());} }

但是這個時候直接輸出他們的hashcode卻是不相同的

?重寫hashCode()方法

class Person {public String id;public Person(String id) {this.id = id;}@Overridepublic String toString() {return "Person{" +"id=" + id +'}';}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Person person = (Person) o;return id == person.id;}@Overridepublic int hashCode() {return Objects.hash(id);} } public class Test {public static void main(String[] args) {Person person1 = new Person("134");Person person2 = new Person("134");System.out.println(person1.hashCode());System.out.println(person2.hashCode());} }

1.為什么引用類型就要談到 hashCode() ??

因為如果key是引用類型,就不能通過模上數(shù)組的長度來尋址了。而 hashCode() 作用就是返回對象的哈希代碼值,簡單來說,他就是一個整數(shù)

2.按道理來說,學號相同的兩個對象應該是同一個人,為什么重寫 hashCode(),返回對象的哈希代碼值才會一樣,不重寫為什么會導致最終在數(shù)組中尋找的地址不相同??

因為底層的hashCode()是Object類的方法,底層是由C/C++代碼寫的,我們是看不到,但是因為它是根據(jù)對象的存儲位置來返回的哈希代碼值,這里就可以解釋了,person1和person2本質(zhì)上就是兩個不同的對象,在內(nèi)存中存儲的地址也不同,所以最終返回的哈希代碼值必然是不相同的,哈希代碼值不同,那么在數(shù)組中根據(jù) hash % array.length 尋找的地址也就不相同。而重寫 hashCode() 方法之后,咱們根據(jù) Person 中的成員變量 id 來返回對應的哈希代碼值,這就相當于當一個對象,多次調(diào)用,那么返回的哈希代碼值就必然相同。

所以我們的哈希表的實現(xiàn)就可以相應的改寫成這樣:

public class HashBuck<K,V> {static class Node<K,V> {public K key;public V val;public Node<K,V> next;public Node(K key,V val) {this.key = key;this.val = val;}}//往期泛型博客有具體講到數(shù)組為什么這樣寫public Node<K,V>[] array = (Node<K,V>[]) new Node[10];public int usedSize;public static final double DEFAULT_LOAD_FACTOR = 0.75;public void put(K key, V val) {Node<K,V> node = new Node<>(key,val);int hash = key.hashCode();int index = hash % array.length;Node<K,V> cur = array[index];while(cur != null) {if(cur.key.equals(key)) {cur.val = val;return;}cur = cur.next;}//頭插node.next = array[index];array[index] = node;this.usedSize++;if(loadFactor() >= DEFAULT_LOAD_FACTOR) {reSize();}}private double loadFactor() {return this.usedSize * 1.0 / array.length;}private void reSize() {Node<K,V>[] newArray = (Node<K, V>[]) new Node[2 * array.length];for (int i = 0; i < array.length; i++) {Node<K,V> cur = array[i];while (cur != null) {Node<K,V> curNext = cur.next;int hash = cur.key.hashCode();int index = hash % newArray.length;cur.next = newArray[index];newArray[index] = cur;cur = cur.next;}}array = newArray;}public V get(K key) {int hash = key.hashCode();int index = hash % array.length;Node<K,V> cur = array[index];while(cur != null) {if(cur.key == key) {return cur.val;}cur = cur.next;}return null;} }

性能分析

雖然哈希表一直在和沖突做斗爭,但在實際使用過程中,我們認為哈希表的沖突率是不高的,沖突個數(shù)是可控的,也就是每個桶中的鏈表的長度是一個常數(shù),所以,通常意義下,我們認為哈希表的插入?/?刪除?/?查找時間復雜度是?O(1)

面試問題一:hashCode()和equals() 在HashMap中的作用分別是什么???

hashCode():用來找元素在數(shù)組中的位置;

equals():用來比較數(shù)組下鏈表中的每個元素的 key 與我的 key 是否相同。

equals也一樣,如果不重寫,上面的person1和person2的比較結果必然是不相同。

hashCode()和equals()就好比查字典,比如要查美麗,肯定要先查美字在多少頁--hashCode(),然后它的組詞有美景,美女,美麗,equals()就能找到美麗。

面試問題二:如果hashCode一樣,那么equals一定一樣嗎? 如果equals一樣,hashCode一定一樣嗎??

答案肯定是不一定,一定。

同一個地址下鏈表中的key不一定一樣,就好比數(shù)組長度為10,4和14找到的都是4下標。

而equals一樣,hashCode就一定一樣,4和4肯定都在4下標。

所以這時候再回過頭來看HashMap數(shù)據(jù)的打印時,就能明白HashMap和HashSet為什么無序了,它本身就不是一個順序結構,至于TreeMap和TreeSet為啥有序,這就和我們之前學過的優(yōu)先級隊列是一個道理了。(整形的key,輸出時,自然而然就排好序了,如果key是引用類型,則需要實現(xiàn)Comparable接口,或者傳比較器)

小結

1. HashMap 和 HashSet 即 java 中利用哈希表實現(xiàn)的 Map 和 Set
2. java 中使用的是哈希桶方式解決沖突的
3. java 會在沖突鏈表長度大于一定閾值后,將鏈表轉變?yōu)樗阉鳂?#xff08;紅黑樹)
4. java 中計算哈希值實際上是調(diào)用的類的 hashCode 方法,進行 key 的相等性比較是調(diào)用 key 的 equals 方法。所以如果要用自定義類作為 HashMap 的 key 或者 HashSet 的值,必須覆寫 hashCode 和 equals 方法,而且要做到 equals 相等的對象,hashCode 一定是一致的。

4.哈希表部分底層源碼的分析

哈希表底層部分成員屬性的分析:?

? 面試問題:以下兩個桶的數(shù)組容量分別是多大?

HashMap<String,Integer> map = new HashMap<>(19); //桶1HashMap<String,Integer> map = new HashMap<>(); //桶2

剛剛我們分析了成員屬性和成員方法,桶的只是定義了,并沒有看見給桶開辟大小??那我們?nèi)绾蝡ut 進去元素呢?

首先可以確定的是桶 2 的大小為 0,至于為什么沒開辟空間也可以 put 元素,我們就需要分析底層的 put 函數(shù),接下來我們帶著疑惑繼續(xù)分析源碼,,

??結論:

1.桶2的默認大小是0,但是在put進去第一個元素時,它的容量就擴容為了16.

2.我們可以看到底層尋址的方式不是 hash?% array.length,而是 (n-1) & hash,因為?JDK規(guī)定數(shù)組的長度必須是 2 的某個次冪。因為當 n 是 2 的某個次冪時,hash % array.length 與(n-1) & hash 得到的值是一樣的,并且位運算的效率高。所以桶1的容量就不是19,而是2的某個次冪向上取整,所以桶1大小為32,我們可以繼續(xù)看帶一個參數(shù)的構造方法的源碼:

5. 一些有關 Map 和 Set 的題目

1. 統(tǒng)計一組數(shù)據(jù)中的每個數(shù)據(jù)出現(xiàn)了多少次

/*** 統(tǒng)計一組數(shù)據(jù)中的每個數(shù)據(jù)出現(xiàn)了多少次*/import java.util.HashMap; import java.util.Map;public class Test {public static void main(String[] args) {char[] arr = {'a','c','e','c','b','d','f','c','d'};Map<Character,Integer> map = computer(arr);System.out.println(map);}public static Map<Character,Integer> computer(char[] arr){Map<Character,Integer> map = new HashMap<>();//如果在 map 中沒有數(shù)組對應的 Key,那么就添加 1個 Key 進去//如果在 map 中包含了和數(shù)組對應的 Key,且 Key 對應 count個 Val,//那么就添加 count + 1個 Key 進去for (char x :arr) {if(map.containsKey(x)){int count = map.get(x);map.put(x, count+1);}else {map.put(x,1);}}return map;} }

2. 將一組數(shù)據(jù)中多余的數(shù)據(jù)去重

/*** 將一組數(shù)據(jù)中多余的數(shù)據(jù)去重*/import java.util.HashSet; import java.util.Set;public class Test {public static void main(String[] args) {int[] arr = {1,3,5,7,9,3,2,4,6,8,5,4,6};Set<Integer> set = new HashSet<>();for (int x : arr) {set.add(x);}System.out.println(set);} }

3. 找出第一個重復出現(xiàn)的數(shù)據(jù)

/*** 在一組數(shù)據(jù)中,找出第一個重復出現(xiàn)的數(shù)據(jù)*/import java.util.HashSet; import java.util.Set;public class Test6 {public static void main(String[] args) {int[] arr = {1,3,5,7,9,3,2,4,6,8,5,4,6};Set<Integer> set = new HashSet<>();int i = 0;//如果在添加元素到 set 之前,就已經(jīng)發(fā)現(xiàn)了 set 中包含某個數(shù)組的元素,//那么就 breakfor (i = 0; i < arr.length; i++) {if(set.contains(arr[i])){break;}set.add(arr[i]);}System.out.println(arr[i]); //拿到的就是第一次出現(xiàn)的重復值} }

4. 只出現(xiàn)一次的數(shù)字

leetcode 136

方法一:

/*** 利用兩兩元素之間異或,最終得出的就是單獨元素*/ class Solution {public int singleNumber(int[] nums) {int x = nums[0];for(int i= 1; i<nums.length; i++){x = x^nums[i];}return x;} }

方法二:

/*** 利用集合 Set* 如果集合中有相同元素,就移除,反之,就添加*/ class Solution {public int singleNumber(int[] nums) {Set<Integer> set = new HashSet<>();for(int i=0; i<nums.length; i++){if(!set.contains(nums[i])){set.add(nums[i]);}else{set.remove(nums[i]);}}for(int i=0; i<nums.length; i++){if(set.contains(nums[i])){return nums[i];}}return -1;} }

5. 復制帶隨機指針的鏈表

leetcode 138

本題需要詳細掌握 Map 的操作,與其對應的映射關系,才能將本題理解到位。

/*** 通過 Map 的映射關系* 知道了 Key 的狀態(tài),實現(xiàn) Value 的狀態(tài)* 即通過舊節(jié)點之間的關系,實現(xiàn)新節(jié)點之間的關系*/ class Solution {public Node copyRandomList(Node head) {if(head == null) return null;//Key - 舊節(jié)點,Value - 新節(jié)點Map<Node,Node> map = new HashMap<>(); Node cur = head;//1. 創(chuàng)建新的節(jié)點while(cur != null){map.put(cur, new Node(cur.val)); cur = cur.next;}cur = head;//2. 連接各個節(jié)點while(cur != null){map.get(cur).next = map.get(cur.next);map.get(cur).random = map.get(cur.random);cur = cur.next;}return map.get(head);} }

6. 寶石與石頭

leetcode 771

方法一

/*** 方法一* 1. 將 jewels 字符串中的字符放入集合 set 中* 2. 查看集合 set 中是否包含 stones 字符數(shù)組中字符* 3. 用 count 計數(shù),最后返回*/ class Solution {public int numJewelsInStones(String jewels, String stones) {Set<Character> set = new HashSet<>();for(char x:jewels.toCharArray()){ //1.set.add(x);}int count = 0;for(char j:stones.toCharArray()){ //2.if(set.contains(j)){count++;}}return count; //3.} }

方法二

/*** 方法二* 兩層 for 循環(huán) */ class Solution {public int numJewelsInStones(String jewels, String stones) {int count = 0;for(int i=0; i<jewels.length(); i++){for(int j=0; j<stones.length();j++){if( jewels.charAt(i) == stones.charAt(j) ){count++;}}}return count;} }

7. 鍵盤壞了的鍵

牛客網(wǎng)鏈接

import java.util.ArrayList; import java.util.HashSet; import java.util.Scanner; import java.util.Set;/*** 1. 將實際輸入的文字 str2 放在集合 set 中* 2. for 循環(huán)遍歷應該輸入的文字 str1, * 若集合 set 不包含某個字符,且線性表之前也未出現(xiàn)該字符,就輸出打印* 3. 將步驟 2 中不包含的字符放入順序表中,以便下一次判斷*/ public class Main {public static void main(String[] args) {Scanner scanner = new Scanner(System.in);String str1 = scanner.nextLine(); //應該輸入的文字String str2 = scanner.nextLine(); //實際輸入的文字out(str1,str2);}public static void out(String str1, String str2){Set<Character> set = new HashSet<>();ArrayList<Character> list = new ArrayList<>();for (char x:str2.toUpperCase().toCharArray()) {set.add(x); //1.}for(char x:str1.toUpperCase().toCharArray()){ //2.if(!set.contains(x) && !list.contains(x)){ System.out.print(x);}list.add(x); //3.}} }

8. 前K個高頻單詞

??? 力扣鏈接

class Solution {public List<String> topKFrequent(String[] words, int k) {Map<String,Integer> hashMap =new HashMap<>();for(String s: words) {if(hashMap.get(s) == null) {hashMap.put(s,1);}else {hashMap.put(s,hashMap.get(s)+1);}}//2、建立小根堆PriorityQueue<Map.Entry<String,Integer>> minHeap = new PriorityQueue<>(k, new Comparator<Map.Entry<String, Integer>>() {@Overridepublic int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {if(o1.getValue().compareTo(o2.getValue()) == 0) {return o2.getKey().compareTo(o1.getKey());}return o1.getValue().compareTo(o2.getValue());}});//3、遍歷hashMap 把里面 的數(shù)據(jù) 放到小根堆for(Map.Entry<String,Integer> entry : hashMap.entrySet()) {if(minHeap.size() < k) {minHeap.offer(entry);}else {//小根堆放滿了K個,下一個entry和堆頂元素比較Map.Entry<String,Integer> top = minHeap.peek();//堆頂?shù)念l率小于當前entry的頻率 就出隊 然后入隊entryif(top.getValue().compareTo(entry.getValue()) < 0) {minHeap.poll();minHeap.add(entry);}else {//頻率相同的情況if(top.getValue().compareTo(entry.getValue()) == 0) {if(top.getKey().compareTo(entry.getKey()) > 0) {minHeap.poll();minHeap.add(entry);}}}}}//4、 此時小根堆當中已經(jīng)有了結果//System.out.println(minHeap);List<String> ret = new ArrayList<>();for (int i = 0; i < k; i++) {String key = minHeap.poll().getKey();ret.add(key);}Collections.reverse(ret);//System.out.println("ret: "+ret);return ret;} }

總結

以上是生活随笔為你收集整理的【Java 数据结构】Map和Set的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

99久久激情| 亚洲 精品在线视频 | 亚洲波多野结衣 | av看片网址 | 婷婷在线视频观看 | 美女黄频在线观看 | 成人a免费| 国产成人av网址 | 免费的成人av | 欧美一级艳片视频免费观看 | 18做爰免费视频网站 | 久久精品一区二区三区中文字幕 | 亚洲高清网站 | 久久成人国产精品 | 去看片| 国产小视频在线观看 | 国产亚洲午夜高清国产拍精品 | 日韩高清国产精品 | 日本女人的性生活视频 | 五月天综合色 | 国产免费又爽又刺激在线观看 | 久草免费新视频 | 天堂在线免费视频 | 国产日女人 | 欧美日韩18 | 日韩在线观看视频网站 | 免费看片网址 | 看黄色.com| 中文字幕在线免费观看视频 | 国产精品免费观看久久 | 国产精品免费不卡 | 日韩欧美一区二区三区黑寡妇 | 久久免费精品 | 中文字幕免费播放 | 精品国产乱码久久久久久1区2匹 | 99免费在线| 午夜黄色 | 欧美十八| 国产小视频国产精品 | 久久久免费网站 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 激情av在线播放 | 97av视频在线 | 国产一区免费视频 | 日本免费久久高清视频 | 婷婷六月色 | 精品九九九九 | 亚一亚二国产专区 | 中文字幕一区二区三区乱码在线 | 99日精品 | 黄色免费观看网址 | 久草热久草视频 | 伊甸园av在线 | 亚洲黄色网络 | 天天操天天操 | 国产成年人av| 97色婷婷人人爽人人 | 97电影手机 | 亚洲精品免费在线观看 | av福利第一导航 | 99精品视频在线观看免费 | 亚洲一区二区三区毛片 | 日本中文字幕在线免费观看 | 欧美国产不卡 | 国产在线第三页 | av线上免费看 | 亚洲毛片一区二区三区 | 久久tv| 婷婷视频 | 精品久久国产一区 | 久草视频在线资源站 | 日韩欧美在线免费观看 | 在线观看视频免费播放 | 中文在线√天堂 | 涩涩资源网 | 国产伦精品一区二区三区高清 | 精品中文字幕在线播放 | 深爱婷婷 | 久久久久久视频 | 日韩免费电影一区二区三区 | 亚洲精品久久久久www | 日韩视频中文字幕 | 日韩精品一区二区三区免费观看 | 成人免费共享视频 | 亚洲国产久 | 日本久久久久久科技有限公司 | 九色自拍视频 | 日韩精品中文字幕久久臀 | 日韩一级电影网站 | 亚洲精品乱码久久久久久按摩 | 激情久久五月 | 午夜精品视频一区 | 综合婷婷丁香 | 91网在线看 | 国产色综合天天综合网 | 国产在线观看地址 | 免费在线黄色av | 久久久不卡影院 | 国产精品一区二区在线看 | 亚洲人成免费 | 天天爽夜夜爽精品视频婷婷 | 狠狠狠色狠狠色综合 | 色视频网站在线观看一=区 a视频免费在线观看 | 一区二区三区精品在线视频 | 久久久久久久久久久影院 | 国产无遮挡又黄又爽在线观看 | 91精品国产麻豆国产自产影视 | 欧美精品一区二区性色 | 黄色1级毛片 | 精产嫩模国品一二三区 | 久热久草 | 国产亚洲精品日韩在线tv黄 | 精品久久久久久久久久岛国gif | 少妇高潮冒白浆 | 西西人体www444 | 美女久久久久久 | 亚洲欧美成人综合 | 四虎影视成人精品国库在线观看 | 日韩中文三级 | 久久久久国产精品视频 | 色夜视频 | 亚洲日本成人网 | 精品久久国产精品 | 国产精品久久久久久久久搜平片 | 久久av中文字幕片 | 国产精成人品免费观看 | 欧美性色综合 | 久久一区二区三区日韩 | 日本黄色大片免费 | 免费三级黄色片 | 日韩中文字幕亚洲一区二区va在线 | 播五月婷婷 | 国产午夜一区二区 | 色婷婷激情综合 | 91成人精品一区在线播放69 | 亚洲另类人人澡 | 中日韩在线 | 亚a在线| 黄色三级在线观看 | 狠狠狠色丁香婷婷综合激情 | 青青河边草观看完整版高清 | 蜜桃视频精品 | www视频在线播放 | 欧美在线你懂的 | 超碰人人超 | 久久国产视屏 | 亚洲精品国产欧美在线观看 | 4hu视频 | 天天天天天天天天操 | 天天射天天干天天操 | 久久久久女人精品毛片 | av中文字幕免费在线观看 | 久草在线视频看看 | 国产精品毛片一区二区三区 | 在线成人免费 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 欧美一区二区在线免费看 | 中国美女一级看片 | 88av色| 五月婷在线播放 | 国产香蕉97碰碰久久人人 | 天天草综合网 | 顶级bbw搡bbbb搡bbbb| 中文字幕 成人 | 婷婷色资源 | 国产玖玖视频 | 综合色播| 成人app在线免费观看 | 国产日韩视频在线观看 | 精品国产免费人成在线观看 | 久久精品com| 狠狠五月天 | 激情五月亚洲 | 黄色网址在线播放 | 国产亚洲成人网 | 激情综合婷婷 | 欧美小视频在线观看 | 黄色一级免费 | 久久久精品影视 | 91热精品 | 黄色av网站在线观看免费 | 国产在线a免费观看 | www激情com | 国产亚洲视频在线 | 成人一级片免费看 | 久久久久国产免费免费 | 久久中文欧美 | 国产精品高潮呻吟久久av无 | www.伊人网.com| 久久综合久久综合这里只有精品 | 狠狠干电影 | 久久草在线视频国产 | 国产精品视频你懂的 | 日韩精品免费 | 美女网站在线 | 免费在线观看av不卡 | 欧美性免费 | 91精品日韩 | 亚洲视屏在线播放 | 久久99久久99精品免视看婷婷 | 91av色 | 免费观看成人 | 欧美激情亚洲综合 | 中文字幕色综合网 | 日本精品视频在线观看 | 九九欧美视频 | 亚洲精品88欧美一区二区 | 亚洲专区在线播放 | 在线观看成年人 | 久草在线高清视频 | 日韩专区av| 国产视频精品久久 | 97国产在线观看 | 亚洲激精日韩激精欧美精品 | 蜜臀av性久久久久蜜臀aⅴ涩爱 | 国产精品不卡一区 | 日本中文字幕视频 | 免费视频你懂得 | 国产精品福利在线观看 | 人人干狠狠干 | 中文av字幕在线观看 | av免费网站在线观看 | 成人亚洲精品国产www | 91精品福利在线 | 免费视频成人 | 久久久久久在线观看 | 国产精品99久久久久久久久 | 亚洲作爱视频 | 奇米影音四色 | 大荫蒂欧美视频另类xxxx | 欧美精品国产综合久久 | 91成人久久 | 99精品视频在线播放免费 | 天天草天天草 | 成人电影毛片 | 99日精品| 免费看的黄网站 | 国产精品激情在线观看 | 成人影片在线免费观看 | 中文字幕在线久一本久 | 91视频 - x99av | 中文字幕免费高清在线观看 | 国产九九九精品视频 | 午夜婷婷在线观看 | 99久久精品免费看 | 国产一二三区在线观看 | 国产麻豆成人传媒免费观看 | 久久精品国产免费 | 免费看v片| 午夜国产在线观看 | 日韩精品一区二区三区水蜜桃 | 美女网站色在线观看 | 亚洲成人蜜桃 | 欧美激情视频一二三区 | 中文字幕在线国产精品 | 波多野结衣资源 | 中文字幕在线播放第一页 | 欧美日韩国产亚洲乱码字幕 | 欧美成天堂网地址 | 国产午夜精品免费一区二区三区视频 | 99国产成+人+综合+亚洲 欧美 | 久久男人视频 | 欧美精品一区二区三区一线天视频 | 最新色视频 | 天天激情在线 | 97色噜噜 | 色老板在线| 国产美女免费观看 | 手机看片午夜 | 精品国产资源 | 激情五月播播久久久精品 | 成人在线视频网 | 国产精品成人一区二区 | 久久久久久久久免费视频 | av一级片 | 欧美国产日韩在线视频 | 国产99久久九九精品免费 | 国产精品手机播放 | 免费在线观看黄网站 | 久久少妇免费视频 | 欧美精品久久久久久久亚洲调教 | 婷婷午夜天| 久久免费99精品久久久久久 | 中文字幕在线国产精品 | 五月激情丁香婷婷 | 久久精品久久综合 | 日韩中文字幕电影 | 日韩 国产 | 五月婷婷色综合 | 久久黄色片 | 国产在线视频在线观看 | 欧美成人手机版 | av片中文| 91精选在线观看 | 久久av中文字幕片 | 91在线porny国产在线看 | av资源中文字幕 | 久久精视频| 久久久久在线 | 亚洲国产大片 | 黄色影院在线免费观看 | 精品视频免费观看 | 婷婷丁香狠狠爱 | 日韩视频欧美视频 | 五月丁色 | 中文字幕亚洲不卡 | 中文在线最新版天堂 | 在线观看的av网站 | 色婷婷成人 | www,黄视频| 国产五十路毛片 | 亚洲精品国产欧美在线观看 | 国产成人精品在线播放 | 手机在线永久免费观看av片 | 欧美一级视频免费 | 欧美日韩国产综合网 | 日韩乱色精品一区二区 | 亚洲成a人片在线观看中文 中文字幕在线视频第一页 狠狠色丁香婷婷综合 | 中文字幕在线观看免费高清完整版 | 亚洲成人av一区 | 中文字幕一二三区 | 夜夜夜夜猛噜噜噜噜噜初音未来 | 久久99中文字幕 | 日韩一级网站 | 手机看片午夜 | 亚洲开心色 | 国产亚洲一区 | 国产精品白虎 | 一级成人免费 | 天天摸夜夜操 | 久久99精品久久久久久久久久久久 | 91亚洲精品久久久中文字幕 | 热久在线 | 国产又粗又猛又黄 | 精品亚洲男同gayvideo网站 | 国产精品电影一区 | 2020天天干夜夜爽 | 99免费在线| www.夜夜干.com | 日本bbbb摸bbbb| 久久艹人人| 一本一本久久a久久精品综合妖精 | 日韩网站在线看片你懂的 | 日韩影片在线观看 | 久久久精品影视 | 97人人看| 中文综合在线 | 免费看久久久 | av高清不卡| 亚洲欧洲久久久 | 国产69久久久欧美一级 | 中国一级片在线观看 | 免费黄色特级片 | 人人干狠狠干 | 免费成人看片 | 久久精品久久久精品美女 | 精品国产一区二区三区四区在线观看 | 日韩中文字幕国产精品 | 日本精品一区二区在线观看 | 在线播放 日韩专区 | 激情婷婷 | bbbbb女女女女女bbbbb国产 | 久草视频中文在线 | 亚洲va天堂va欧美ⅴa在线 | 精品一区在线 | 最新av电影网站 | 婷香五月| 欧美片网站yy | 精品一区二区三区久久久 | 91精品推荐| 午夜精品av | 狠狠干网 | 91视频在线观看下载 | 五月婷婷欧美 | 国产97碰免费视频 | 伊人看片 | 亚洲视频999 | 一区二区三区手机在线观看 | 92精品国产成人观看免费 | 毛片网站在线观看 | 精品一区二区久久久久久久网站 | 日韩精品91偷拍在线观看 | 成人影视免费看 | 在线黄色国产电影 | 色噜噜噜| 亚州欧美视频 | 丁香网五月天 | 91男人影院 | 欧美日韩国产三级 | 久久免费精彩视频 | 色综合欧洲 | 精品久久久免费 | 亚洲黄色一级电影 | 国产剧情在线一区 | 深爱综合网 | 日韩精品久久久久久 | 99产精品成人啪免费网站 | 国产黄色一级大片 | 日韩网站在线看片你懂的 | 97看片| 福利一区二区三区四区 | 国产精彩视频一区 | av在线不卡观看 | 91在线免费播放视频 | 亚洲精品综合在线 | 精品一区二区综合 | 午夜影院先 | av成人动漫在线观看 | 亚洲国产日韩一区 | 人人狠狠综合久久亚洲婷 | 久久久精品福利视频 | 日韩av在线小说 | 欧美小视频在线 | 9ⅰ精品久久久久久久久中文字幕 | 国内三级在线 | 福利一区二区在线 | 91视频在线观看免费 | 国产淫片免费看 | 日韩av资源在线观看 | 亚洲精品男女 | 国色天香av | 亚洲日韩欧美一区二区在线 | 日韩成人免费电影 | 欧美日韩久久不卡 | 久久狠狠亚洲综合 | 在线观看中文字幕 | 久久精品久久精品久久 | 久久av在线| 高清av网站 | 国产成人一区二区三区在线观看 | 国产精品aⅴ | 久久免费av | 91麻豆精品久久久久久 | 国产伦精品一区二区三区… | 九九热中文字幕 | 国产精品视频99 | 亚洲aaa级| 日韩三级视频在线看 | 国产欧美在线一区二区三区 | 日韩欧美xxxx| 亚洲最新毛片 | 亚洲女人天堂成人av在线 | 美女视频久久黄 | 亚洲人人网| 在线导航福利 | 91亚洲成人 | 国产在线观看,日本 | 欧美激情精品久久久久久免费 | 日韩电影一区二区在线观看 | 日本中文字幕在线播放 | 久久精品一区二区三区国产主播 | 麻豆视频国产 | 98涩涩国产露脸精品国产网 | 国产高清视频免费在线观看 | 免费看特级毛片 | 久久高清精品 | 色资源网免费观看视频 | 欧美精品在线观看免费 | 国产资源在线观看 | 亚洲精品在线观看免费 | 久草视频播放 | 国产美腿白丝袜足在线av | 久久久av免费 | 国产手机视频在线播放 | 97超碰人人模人人人爽人人爱 | 五月综合色 | 国产成人精品一区二区三区 | 99精品免费在线 | 91中文字幕一区 | 日韩理论在线 | 玖玖在线免费视频 | 中文电影网 | 久草在线欧美 | 亚洲日本一区二区在线 | 永久黄网站色视频免费观看w | 国产在线91精品 | www看片网站 | 日日爱999 | 亚洲精品高清一区二区三区四区 | 午夜视频一区二区 | 美女国内精品自产拍在线播放 | 深爱婷婷久久综合 | 99视频偷窥在线精品国自产拍 | 久久精品国产一区二区三区 | 狠狠狠狠狠操 | 国产一卡二卡四卡国 | 天天摸夜夜添 | 久久天天操 | 色综合久久久网 | 国内精自线一二区永久 | 美女视频免费一区二区 | 日夜夜精品视频 | 日色在线视频 | 国产精品手机看片 | 狠狠色丁香九九婷婷综合五月 | 偷拍区另类综合在线 | 狠狠地操 | 97av视频在线观看 | 国产69精品久久99不卡的观看体验 | 色综合 久久精品 | 四虎影视精品成人 | 日韩亚洲在线观看 | 精品欧美乱码久久久久久 | 精品一二三四五区 | 国产成人黄色网址 | 免费看短 | 国产日韩精品一区二区三区在线 | 精品久久中文 | 亚洲成av人影院 | 欧美久久久久久久久久久 | 国产99一区二区 | 91日韩在线 | 国产精品嫩草影院99网站 | 国产精品久久一区二区无卡 | 激情影院在线 | 国产五月天婷婷 | 久久综合久久综合这里只有精品 | 四虎在线视频免费观看 | 91亚洲精品久久久久图片蜜桃 | 三级黄色在线 | 免费在线观看午夜视频 | 国产午夜精品一区二区三区在线观看 | 亚洲精品午夜久久久 | 不卡的一区二区三区 | 成人精品福利 | 麻豆传媒精品 | 日韩大片在线免费观看 | 在线观看黄网 | 久久免费视频国产 | 97色免费视频 | 97精品国产一二三产区 | 亚洲 中文字幕av | 日韩美一区二区三区 | 97精品在线 | 中文字幕123区 | 国产美腿白丝袜足在线av | av官网| 午夜视频在线观看一区二区三区 | 国产麻豆视频免费观看 | 亚洲动漫在线观看 | 国产小视频精品 | 五月婷婷综合在线 | 久久久久久久久久毛片 | 国产在线观看高清视频 | 中文字幕资源在线 | 97香蕉视频 | 天天操天天操天天 | 日韩欧美一区二区三区视频 | 永久免费av在线播放 | 国产高清在线永久 | 天天干中文字幕 | 日韩系列在线观看 | 久草在线欧美 | 国产亚洲成人网 | 国产高清专区 | 日本一区二区高清不卡 | 欧美精品做受xxx性少妇 | 天天操天天射天天舔 | 天堂av免费在线 | 一级α片 | 国产成人精品一区二区在线观看 | 69xxxx欧美| 精品国产午夜 | 99这里都是精品 | 日韩在线三区 | 欧美综合国产 | 中文字幕.av.在线 | 国产99一区视频免费 | 欧美亚洲另类在线视频 | 成人免费一区二区三区在线观看 | 精品久久久免费视频 | 久久精品国产一区二区三 | 国产字幕在线观看 | 午夜视频久久久 | 亚洲午夜精品久久久久久久久久久久 | 国产一区二区免费看 | 久久综合偷偷噜噜噜色 | www.69xx| 天天摸夜夜操 | 国产日韩欧美在线影视 | 99精品热 | 国产综合激情 | 国产一级片免费视频 | 午夜电影中文字幕 | 成人观看 | 香蕉久草在线 | 99精品国产成人一区二区 | 久久久久欠精品国产毛片国产毛生 | 国产在线色| 亚洲综合网 | 色噜噜日韩精品一区二区三区视频 | 一区 在线 影院 | 中文字幕在线高清 | 午夜999| 亚洲午夜电影网 | 在线观看亚洲精品 | 精品福利视频在线 | 欧美日韩天堂 | 99热精品久久 | 成人一级免费电影 | 久草视频免费在线播放 | 丁香婷婷色综合亚洲电影 | 国产精品丝袜久久久久久久不卡 | 久久精品视频网站 | 国产精品观看在线亚洲人成网 | 久久久久久美女 | 亚洲人成人在线 | 免费视频黄色 | 欧美精品久久久久久久免费 | 永久免费精品视频 | 成 人 黄 色 免费播放 | 国产成人一级电影 | 婷婷深爱网 | 安徽妇搡bbbb搡bbbb | 在线免费国产 | 九九色在线观看 | 免费av网址大全 | 黄色三级在线看 | 欧美日韩精品在线播放 | 国产破处视频在线播放 | 中文字幕资源站 | 亚洲 综合 激情 | adc在线观看 | 日韩精品一区二区三区外面 | 日本在线精品视频 | 人人插超碰 | 国产小视频免费在线网址 | 人人狠狠综合久久亚洲婷 | 久久久蜜桃一区二区 | 日本中文字幕电影在线免费观看 | 97人人澡人人添人人爽超碰 | 91av视频观看 | 欧美在线观看视频一区二区三区 | 国产精品久久久久久a | 人人干在线 | 天天综合网入口 | 国产人成免费视频 | 久久综合干 | 手机av网站 | 精品无人国产偷自产在线 | 激情五月婷婷 | 欧美精品在线观看一区 | 日韩大片在线播放 | 精品福利国产 | 久久视频一区 | 天堂av在线网 | 亚洲成人麻豆 | 亚洲在线精品 | 日韩中文字幕a | 天天操比| 久久男人免费视频 | 久久精品国产久精国产 | 天天射天天操天天色 | 国产精品久久久久久久久婷婷 | 久久国产精品一区二区三区 | 久久精品国产成人精品 | 99久久精品网 | 特黄特黄的视频 | 国产一级免费在线 | 亚洲综合在线观看视频 | 亚洲国产高清在线观看视频 | 国产精品一区二区无线 | 911香蕉视频 | 欧美成人理伦片 | 精品视频不卡 | 国产一区二区三区黄 | 欧美黄污视频 | 日韩有码第一页 | 久久乱码卡一卡2卡三卡四 五月婷婷久 | 国产一级精品绿帽视频 | 久久久高清免费视频 | 91成人小视频 | 六月色婷婷 | 亚洲在线高清 | 在线一区二区三区 | 精品在线观看一区二区三区 | 黄色1级大片 | 国产xxxxx在线观看 | 国内精品久久久久影院男同志 | 97超在线 | 免费在线色 | 国产精品免费视频久久久 | 在线观看免费视频你懂的 | 91精品办公室少妇高潮对白 | 国产中文字幕视频在线观看 | 国产亚洲精品久久久久久电影 | 欧美国产精品久久久久久免费 | 婷婷色六月天 | 亚洲天堂免费视频 | 五月亚洲| 91在线永久 | 国产又粗又长又硬免费视频 | 亚洲欧洲成人 | 国产亚洲资源 | 精品一区精品二区 | 91色在线观看视频 | 亚洲午夜激情网 | 国产精品21区 | 精品国内自产拍在线观看视频 | 97色在线观看 | 亚洲一区精品二人人爽久久 | 日本精品视频一区二区 | 国产黄在线| 成年人在线观看视频免费 | 免费亚洲片 | 日韩极品视频在线观看 | 日韩av网页 | 亚洲精品视频在线观看免费视频 | 91最新在线观看 | 美女av免费| 国产.精品.日韩.另类.中文.在线.播放 | 欧美国产大片 | 免费看片日韩 | www.久久91| 亚洲在线网址 | 国产日韩在线视频 | 午夜精品久久久久久久99无限制 | 免费视频成人 | 激情网五月 | 免费a v视频 | 中文字幕一区二区三区四区久久 | 亚洲精品在线视频观看 | 久久综合久久伊人 | 日韩国产高清在线 | 精品中文字幕在线播放 | 久久久精品欧美一区二区免费 | 99精品欧美一区二区蜜桃免费 | 天天骚夜夜操 | 日本中文字幕网址 | av资源在线看 | 福利视频导航网址 | 五月激情天 | 成人在线观看资源 | 久久久久成人精品亚洲国产 | 日日操天天操夜夜操 | 男女精品久久 | 中文字幕在线看人 | 在线不卡视频 | 国产精品久久网站 | 国产品久精国精产拍 | 天天色天天爱天天射综合 | 在线天堂v| 69绿帽绿奴3pvideos | 91精品国产自产91精品 | 亚洲情感电影大片 | 中文字幕中文字幕在线中文字幕三区 | 久久夜色精品国产亚洲aⅴ 91chinesexxx | 最近日本mv字幕免费观看 | 96香蕉视频 | 午夜视频免费 | wwwwwww色| 不卡的av在线 | 一色屋精品视频在线观看 | 亚洲理论片在线观看 | 亚洲尺码电影av久久 | 91av国产视频 | 永久免费精品视频网站 | 天天操天天操天天干 | 久久久精品二区 | 国产精品18久久久久白浆 | 天天爱天天干天天爽 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 偷拍精偷拍精品欧洲亚洲网站 | 亚洲一区二区观看 | 中文字幕在线第一页 | 91麻豆精品国产91久久久更新时间 | 麻豆传媒一区二区 | 免费在线观看一区二区三区 | 成人免费一级 | 处女av在线| 少妇视频在线播放 | 开心综合网 | 五月激情综合婷婷 | 热re99久久精品国产66热 | 欧美一级免费在线 | 天天操天天操天天操 | 国产黄色大片免费看 | 成人毛片100免费观看 | 五月婷婷在线视频观看 | 亚洲欧美视频在线播放 | 中文字幕色婷婷在线视频 | 2024国产精品视频 | 超碰在线网 | 激情综合网五月激情 | 国产精品高清av | 免费aa大片| 久久热首页 | 久久精品网站免费观看 | 国产91电影在线观看 | 亚洲人成影院在线 | 日韩电影在线视频 | 久草在线视频首页 | 亚洲免费在线视频 | 91天堂在线观看 | 久久久在线观看 | 亚洲欧美国产视频 | 天天草天天干天天射 | 久久99精品国产麻豆宅宅 | 国产高清精品在线观看 | 综合色亚洲| japanese黑人亚洲人4k | 久久久 精品 | 在线看av网址 | 亚洲精品中文字幕视频 | 17婷婷久久www | 欧美视频一区二 | 成人av免费在线 | 欧美精品久 | 日韩精品一卡 | 久久不卡av | 欧美精品一区二区蜜臀亚洲 | 午夜久久久久久久久久影院 | 精品极品在线 | 亚洲一区二区三区miaa149 | 国产一区二区在线免费 | 久久久久网站 | 91精品久久久久久综合乱菊 | 9999精品免费视频 | 欧美激情精品久久 | 麻豆精品在线视频 | 91精品国产网站 | 国产精品入口久久 | 久操中文字幕在线观看 | 精品视频国产 | 91大神精品视频 | 97精品国产97久久久久久久久久久久 | 91精品黄色| 精品国产亚洲一区二区麻豆 | 国产成人精品电影久久久 | 久久久久久蜜桃一区二区 | 日韩欧美电影在线观看 | 激情婷婷综合网 | 欧美不卡视频在线 | 国产尤物在线 | 狠狠操狠狠干2017 | 久久久久久久久久久国产精品 | 好看的国产精品视频 | 日韩av免费观看网站 | 色福利网 | 性色av一区二区三区在线观看 | 久久亚洲成人网 | 国产精品一区二区三区四区在线观看 | 免费精品国产 | 国产黄大片 | 欧美激情精品久久久久 | 免费视频在线观看网站 | 精品一区在线看 | 亚洲美女视频在线观看 | 日韩欧美电影在线 | 欧美日韩在线观看视频 | 久久久久久久久免费视频 | 伊人天天色 | 精品久久久久久久久久久久 | 操操综合| 蜜臀久久99精品久久久久久网站 | 亚洲少妇久久 | 不卡电影一区二区三区 | 丁香花在线观看视频在线 | 亚洲成人中文在线 | 黄色在线观看污 | 久艹视频在线观看 | 最新av网站在线观看 | 三级视频日韩 | 欧美精品首页 | 在线影院中文字幕 | 国产成人精品亚洲 | 免费在线一区二区三区 | 国产成人三级一区二区在线观看一 | 99久高清在线观看视频99精品热在线观看视频 | 五月婷婷在线综合 | 日日夜夜精品免费观看 | 人人爽人人搞 | 成人精品一区二区三区中文字幕 | 99精品一级欧美片免费播放 | 黄色com | 日韩欧美xxxx| 在线精品亚洲一区二区 | 黄色网址中文字幕 | 免费看黄色小说的网站 | 久久久穴 | 国产xxxxx在线观看 | 欧洲不卡av| 午夜精品视频一区 | 伊人久久电影网 | 免费观看成人网 | 国产精品久久久久久久久久久免费看 | 中国精品少妇 | 久久五月天综合 | 国产视频中文字幕 | 综合网伊人 | 亚洲va欧美va人人爽春色影视 | 五月婷婷播播 | 日韩精品视频在线免费观看 | 国产一区二区三区四区大秀 | 久草在线最新免费 | 国产片免费在线观看视频 | 久久一区国产 | 国产成人精品网站 | 97国产大学生情侣酒店的特点 | 91精品久久久久久综合乱菊 | 亚洲第一伊人 | 黄色性av | 欧美性免费 | 久久久久久久久久久久av | 国产精品一区二 | 99久免费精品视频在线观看 | 啪啪免费视频网站 | 欧美日韩免费视频 | 国产精品久久久久毛片大屁完整版 | 国产精品网站一区二区三区 | 亚洲视频,欧洲视频 | 国产最顶级的黄色片在线免费观看 | 成年人av在线播放 | 麻豆国产露脸在线观看 | 国产三级午夜理伦三级 | 久草视频99| 久久麻豆精品 | av电影免费在线看 | 91中文字幕一区 | 亚洲网久久 | 国产高清绿奴videos | 日韩在线第一区 | 久草在线视频新 | 久久在线免费观看视频 | 激情综合网五月 | 天干啦夜天干天干在线线 | 视频三区| 国产高清综合 | 又黄又爽的视频在线观看网站 | 中文字幕在线播出 | 国产精品黄色 | 日韩欧美高清一区二区 | 国产高清视频 | 不卡在线一区 | 一本—道久久a久久精品蜜桃 | 欧美日韩在线视频一区 | 91香蕉视频在线下载 | 精品久久久久久久久久国产 | 久久大视频 | 国产成人精品国内自产拍免费看 | 九九免费视频 | 精品国产伦一区二区三区观看说明 | 欧美一级片在线 | 久久综合狠狠综合 | 国产精品免费不卡 | 国产精品资源在线 | 国产精品视频不卡 | 日韩区欧美久久久无人区 | 久久极品 | 性色大片在线观看 | 亚洲人成人99网站 | 日韩视频免费观看高清完整版在线 | 久久精品99久久久久久2456 | 18性欧美xxxⅹ性满足 | 亚洲精品在线观看av | 国外成人在线视频网站 | 国产中文字幕一区二区 | 欧美国产日韩一区二区三区 | 亚洲最新av网站 | 成片视频在线观看 | av电影在线免费 | 欧美国产精品久久久久久免费 | 国产一区二区在线精品 | 97免费中文视频在线观看 | 久草精品视频在线播放 | 国产一区免费在线 | 综合色影院 | 免费情缘 | 婷婷国产视频 | 毛片黄色一级 | 成人黄色在线 | 久久久久久久免费观看 | 色.www| 国产精品成人久久久久久久 | 久久天天躁狠狠躁夜夜不卡公司 | 成人久久综合 | 久久久久免费看 | 黄色毛片一级片 | av综合网址 | 91超碰在线播放 | 激情偷乱人伦小说视频在线观看 | 天天干天天干天天干天天干天天干天天干 | 亚洲日日日| 国产专区精品视频 | 精品你懂的 | 国产视频在线看 | 色停停五月天 | 国产成人精品一区二区在线 | 国产精品视频全国免费观看 | 韩国在线视频一区 | 国内小视频 | 成人一级在线观看 | 在线播放91| 成人在线你懂得 | 精品高清视频 | 欧美一二三区在线观看 | 狠狠操狠狠操 | 免费高清在线视频一区· |