精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

HashMap的實現(xiàn)原理詳解,看這篇就夠了

開發(fā) 前端
一線資深java工程師明確了需要精通集合容器,尤其是今天我談到的HashMap。HashMap在Java集合的重要性不亞于Volatile在并發(fā)編程的重要性(可見性與有序性)。

一線資深java工程師明確了需要精通集合容器,尤其是今天我談到的HashMap。

[[440095]]

HashMap在Java集合的重要性不亞于Volatile在并發(fā)編程的重要性(可見性與有序性)。

我會重點講解以下9點:

  1. HashMap的數(shù)據(jù)結(jié)構
  2. HashMap核心成員
  3. HashMapd的Node數(shù)組
  4. HashMap的數(shù)據(jù)存儲
  5. HashMap的哈希函數(shù)
  6. 哈希沖突:鏈式哈希表
  7. HashMap的get方法:哈希函數(shù)
  8. HashMap的put方法
  9. 為什么槽位數(shù)必須使用2^n?

HashMap的數(shù)據(jù)結(jié)構

首先我們從數(shù)據(jù)結(jié)構的角度來看:HashMap是:數(shù)組+鏈表+紅黑樹(JDK1.8增加了紅黑樹部分)的數(shù)據(jù)結(jié)構,如下所示:

這里需要搞明白兩個問題:

  • 數(shù)據(jù)底層具體存儲的是什么?
  • 這樣的存儲方式有什么優(yōu)點呢?

1.核心成員

默認初始容量(數(shù)組默認大小):16,2的整數(shù)次方static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; 最大容量static final int MAXIMUM_CAPACITY = 1 << 30; 默認負載因子static final float DEFAULT_LOAD_FACTOR = 0.75f;裝載因子用來衡量HashMap滿的程度,表示當map集合中存儲的數(shù)據(jù)達到當前數(shù)組大小的75%則需要進行擴容 鏈表轉(zhuǎn)紅黑樹邊界static final int TREEIFY_THRESHOLD = 8; 紅黑樹轉(zhuǎn)離鏈表邊界static final int UNTREEIFY_THRESHOLD = 6; 哈希桶數(shù)組transient Node[] table; 實際存儲的元素個數(shù)transient int size; 當map里面的數(shù)據(jù)大于這個threshold就會進行擴容int threshold 閾值 = table.length * loadFactor

2.Node數(shù)組

從源碼可知,HashMap類中有一個非常重要的字段,就是 Node[] table,即哈希桶數(shù)組,明顯它是一個Node的數(shù)組。 

  1. static class Node implements Map.Entry { final int hash;//用來定位數(shù) 
  2. 組索引位置 final K key; V value; Node next;//鏈表的下一個Node節(jié)點  
  3. Node(int hash, K key, V value, Node next) { this.hash = hash;  
  4. this.key = key; this.value = value; this.next = next; } public final  
  5. K getKey() { return key; } public final V getValue() { return value; 
  6.  } public final String toString() { return key + "=" + value; }  
  7. public final int hashCode() { return Objects.hashCode(key) ^  
  8. Objects.hashCode(value); } public final V setValue(V newValue) { V  
  9. oldValue = value; value = newValue; return oldValue; } public final  
  10. boolean equals(Object o) { if (o == this) return true; if (o  
  11. instanceof Map.Entry) { Map.Entry e = (Map.Entry)o; if  
  12. (Objects.equals(key, e.getKey()) && Objects.equals(value,  
  13. e.getValue())) return true; } return false; }} 

Node是HashMap的一個內(nèi)部類,實現(xiàn)了Map.Entry接口,本質(zhì)是就是一個映射(鍵值對)。

HashMap的數(shù)據(jù)存儲

1.哈希表來存儲

HashMap采用哈希表來存儲數(shù)據(jù)。

哈希表(Hash table,也叫散列表),是根據(jù)關鍵碼值(Key value)而直接進行訪問的數(shù)據(jù)結(jié)構,只要輸入待查找的值即key,即可查找到其對應的值。

哈希表其實就是數(shù)組的一種擴展,由數(shù)組演化而來。可以說,如果沒有數(shù)組,就沒有散列表。

2.哈希函數(shù)

哈希表中元素是由哈希函數(shù)確定的,將數(shù)據(jù)元素的關鍵字Key作為自變量,通過一定的函數(shù)關系(稱為哈希函數(shù)),計算出的值,即為該元素的存儲地址。

表示為:Addr = H(key),如下圖所示:

哈希表中哈希函數(shù)的設計是相當重要的,這也是建哈希表過程中的關鍵問題之一。

3.核心問題

建立一個哈希表之前需要解決兩個主要問題:

  • 構造一個合適的哈希函數(shù),均勻性 H(key)的值均勻分布在哈希表中
  • 沖突的處理

沖突:在哈希表中,不同的關鍵字值對應到同一個存儲位置的現(xiàn)象。

4.哈希沖突:鏈式哈希表

哈希表為解決沖突,可以采用地址法和鏈地址法等來解決問題,Java中HashMap采用了鏈地址法。

鏈地址法,簡單來說,就是數(shù)組加鏈表的結(jié)合,如下圖所示:

HashMap的哈希函數(shù)

  1. /*** 重新計算哈希值*/static final int hash(Object key) { int h; // h = key.hashCode() 為第一步 取hashCode值 // h ^ (h >>> 16) 為第二步 高位參與運算 return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);} 

//計算數(shù)組槽位

  1. (n - 1) & hash 

對key進行了hashCode運算,得到一個32位的int值h,然后用h 異或 h>>>16位。在JDK1.8的實現(xiàn)中,優(yōu)化了高位運算的算法,通過hashCode()的高16位異或低16位實現(xiàn)的:(h = k.hashCode()) ^ (h >>> 16)。

這樣做的好處是,可以將hashcode高位和低位的值進行混合做異或運算,而且混合后,低位的信息中加入了高位的信息,這樣高位的信息被變相的保留了下來。

等于說計算下標時把hash的高16位也參與進來了,摻雜的元素多了,那么生成的hash值的隨機性會增大,減少了hash碰撞。

備注:

  • ^異或:不同為1,相同為0
  • >>> :無符號右移:右邊補0
  • &運算:兩位同時為“1”,結(jié)果才為“1,否則為0

h & (table.length -1)來得到該對象的保存位,而HashMap底層數(shù)組的長度總是2的n次方。

為什么槽位數(shù)必須使用2^n?

1.為了讓哈希后的結(jié)果更加均勻

假如槽位數(shù)不是16,而是17,則槽位計算公式變成:(17 – 1) & hash

從上文可以看出,計算結(jié)果將會大大趨同,hashcode參加&運算后被更多位的0屏蔽,計算結(jié)果只剩下兩種0和16,這對于hashmap來說是一種災難。2.等價于length取模

當length總是2的n次方時,h& (length-1)運算等價于對length取模,也就是h%length,但是&比%具有更高的效率。

位運算的運算效率高于算術運算,原因是算術運算還是會被轉(zhuǎn)化為位運算。

最終目的還是為了讓哈希后的結(jié)果更均勻的分部,減少哈希碰撞,提升hashmap的運行效率。

分析HashMap的put方法:

  1. final V putVal(int hash, K key, V value, boolean onlyIfAbsent,               boolean evict) {    Node<K,V>[] tab; Node<K,V> p; int n, i;    
  2.      // 當前對象的數(shù)組是null 或者數(shù)組長度時0時,則需要初始化數(shù)組  
  3.    if ((tab = table) == null || (n = tab.length) == 0) {        n = (tab = resize()).length;    }        // 使用hash與數(shù)組長度減一的值進行異或得到分散的數(shù)組下標,預示著按照計算現(xiàn)在的    // key會存放 
  4. 到這個位置上,如果這個位置上沒有值,那么直接新建k-v節(jié)點存放    //  
  5. 其中長度n是一個2的冪次數(shù)    if ((p = tab[i = (n - 1) & hash]) ==  
  6. null) {        tab[i] = newNode(hash, key, value, null);    }    
  7.      // 如果走到else這一步,說明key索引到的數(shù)組位置上已經(jīng)存在內(nèi)容,即出現(xiàn)了碰撞    // 這個時候需要更為復雜處理碰撞的方式來處理, 
  8. 如鏈表和樹    else {        Node<K,V> e; K k;               //節(jié)點 
  9. key存在,直接覆蓋value        if (p.hash == hash &&            ((k = p.key) == key || (key != null && key.equals(k)))) {    
  10.          e = p;        }        // 判斷該鏈為紅黑樹        else if (p instanceof TreeNode) {            // 其中this表示當前HashMap, tab為map中的數(shù)組           
  11.   e = ((TreeNode<K,V>)p).putTreeVal(this, tab, hash, key, value);        }        else {  // 判斷該鏈為鏈表            
  12.  for (int binCount = 0; ; ++binCount) {                // 如果當前碰撞到的節(jié)點沒有后續(xù)節(jié)點,則直接新建節(jié)點并追加                if ((e = p.next) == null) {                    
  13.  p.next = newNode(hash, key, value, null);                    // TREEIFY_THRESHOLD = 8                     
  14. // 從0開始的,如果到了7則說明滿8了,這個時候就需要轉(zhuǎn)                    // 重新確定是否是擴容還是轉(zhuǎn)用紅黑樹了                   
  15.   if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st                        treeifyBin(tab, hash);                    break;                }                // 找到了碰撞節(jié)點中,key完全相等的節(jié)點,則用新節(jié)點替換老節(jié)點                if (e.hash == hash &&                     
  16. ((k = e.key) == key || (key != null && key.equals(k))))                    break;                p = e;            }        }        // 此時的e是保存的被碰撞的那個節(jié)點,即老節(jié)點        if (e != null) { // existing mapping for key             
  17. V oldValue = e.value;             
  18. // onlyIfAbsent是方法的調(diào)用參數(shù),表示是否替換已存在的值,            
  19.  // 在默認的put方法中這個值是false,所以這里會用新值替換舊值            if (!onlyIfAbsent || oldValue == null)                e.value = value;            
  20.  // Callbacks to allow LinkedHashMap post-actions            afterNodeAccess(e);            
  21.  return oldValue;         
  22. }    }    // map變更性操作計數(shù)器    // 比如map結(jié)構化的變更像內(nèi)容增減或者rehash,這將直接導致外部map的并發(fā)     
  23. // 迭代引起fail-fast問題,該值就是比較的基礎    ++modCount;        // size即map中包括k-v數(shù)量的多少    
  24. // 超過最大容量 就擴容    if (++size > threshold)        resize();    // Callbacks to allow LinkedHashMap post-actions    afterNodeInsertion(evict);    return null;} 

HashMap的put方法執(zhí)行過程整體如下:

  1. 判斷鍵值對數(shù)組table[i]是否為空或為null,否則執(zhí)行resize()進行擴容;
  2. 根據(jù)鍵值key計算hash值得到插入的數(shù)組索引i,如果table[i]==null,直接新建節(jié)點添加
  3. 判斷table[i]的首個元素是否和key一樣,如果相同直接覆蓋value
  4. 判斷table[i] 是否為treeNode,即table[i] 是否是紅黑樹,如果是紅黑樹,則直接在樹中插入鍵值對
  5. 遍歷table[i],判斷鏈表長度是否大于8,大于8的話把鏈表轉(zhuǎn)換為紅黑樹,在紅黑樹中執(zhí)行插入操作,否則進行鏈表的插入操作;遍歷過程中若發(fā)現(xiàn)key已經(jīng)存在直接覆蓋value即可;
  6. 插入成功后,判斷實際存在的鍵值對數(shù)量size是否超多了最大容量threshold,如果超過,進行擴容。

HashMap總結(jié)

HashMap底層結(jié)構?基于Map接口的實現(xiàn),數(shù)組+鏈表的結(jié)構,JDK 1.8后加入了紅黑樹,鏈表長度>8變紅黑樹,<6變鏈表

兩個對象的hashcode相同會發(fā)生什么? Hash沖突,HashMap通過鏈表來解決hash沖突

HashMap 中 equals() 和 hashCode() 有什么作用?HashMap 的添加、獲取時需要通過 key 的 hashCode() 進行 hash(),然后計算下標 ( n-1 & hash),從而獲得要找的同的位置。當發(fā)生沖突(碰撞)時,利用 key.equals() 方法去鏈表或樹中去查找對應的節(jié)點

HashMap 何時擴容?put的元素達到容量乘負載因子的時候,默認16*0.75

hash 的實現(xiàn)嗎?h = key.hashCode()) ^ (h >>> 16), hashCode 進行無符號右移 16 位,然后進行按位異或,得到這個鍵的哈希值,由于哈希表的容量都是 2 的 N 次方,在當前,元素的 hashCode() 在很多時候下低位是相同的,這將導致沖突(碰撞),因此 1.8 以后做了個移位操作:將元素的 hashCode() 和自己右移 16 位后的結(jié)果求異或

HashMap線程安全嗎?HashMap讀寫效率較高,但是因為其是非同步的,即讀寫等操作都是沒有鎖保護的,所以在多線程場景下是不安全的,容易出現(xiàn)數(shù)據(jù)不一致的問題,在單線程場景下非常推薦使用。

以上就是HashMap的介紹,希望對你有所收獲!

 

責任編輯:未麗燕 來源: 今日頭條
相關推薦

2024-08-27 11:00:56

單例池緩存bean

2021-09-10 13:06:45

HDFS底層Hadoop

2023-11-03 08:53:15

StrconvGolang

2019-08-16 09:41:56

UDP協(xié)議TCP

2021-09-30 07:59:06

zookeeper一致性算法CAP

2022-05-27 08:18:00

HashMapHash哈希表

2021-05-07 07:52:51

Java并發(fā)編程

2022-03-29 08:23:56

項目數(shù)據(jù)SIEM

2023-12-07 09:07:58

2022-08-18 20:45:30

HTTP協(xié)議數(shù)據(jù)

2017-03-30 22:41:55

虛擬化操作系統(tǒng)軟件

2023-09-25 08:32:03

Redis數(shù)據(jù)結(jié)構

2023-10-04 00:32:01

數(shù)據(jù)結(jié)構Redis

2023-11-07 07:46:02

GatewayKubernetes

2021-07-28 13:29:57

大數(shù)據(jù)PandasCSV

2020-03-11 08:40:51

紅黑樹平衡二叉B樹

2024-03-26 00:00:06

RedisZSet排行榜

2021-10-21 06:52:17

ZooKeeper分布式配置

2021-04-11 08:30:40

VRAR虛擬現(xiàn)實技術

2021-11-10 07:47:48

Traefik邊緣網(wǎng)關
點贊
收藏

51CTO技術棧公眾號

97视频在线观看视频免费视频 | 婷婷五月色综合| 伊人免费在线观看高清版| 国产精品久久久久久影院8一贰佰 国产精品久久久久久麻豆一区软件 | 国内精品久久久久影院色| 欧美第一页在线| 欧美特级黄色录像| 亚洲国产精品免费视频| 午夜久久久久久| 一区二区三视频| 天天干天天草天天射| 免费黄网站欧美| 97在线观看视频| 亚洲国产123| 亚洲va久久| 日韩视频在线一区二区| 国产福利一区视频| av福利在线导航| 国产精品美女www爽爽爽| 精品国产乱码久久久久| 国产一区二区在线视频聊天| 久久亚洲二区| 午夜欧美不卡精品aaaaa| 永久免费看mv网站入口| 久久91精品| 亚洲国产欧美久久| 国产调教打屁股xxxx网站| 99九九久久| 欧美三级欧美成人高清www| 男人天堂新网址| 黄色网页在线观看| 国产精品免费av| 欧美精品二区三区四区免费看视频 | 久久精品国产亚洲AV无码麻豆| 久久国产电影| 中文字幕成人在线| 中文字幕 自拍| 伊人成综合网yiren22| 亚洲国产美女精品久久久久∴| 91蝌蚪视频在线| 小说区图片区亚洲| 欧美三级日韩三级国产三级| 久久久久久久久久久福利| av在线资源| 精品久久久久久久久中文字幕| 毛片av在线播放| 日本高清在线观看| 一级精品视频在线观看宜春院| 麻豆中文字幕在线观看| 激情成人四房播| 成人欧美一区二区三区| 亚洲一区二区三区免费看| 国产女主播在线写真| 国产三区在线成人av| 青青草原亚洲| 北岛玲日韩精品一区二区三区| 久久久国产精品不卡| 欧美日韩精品久久久免费观看| 天堂中文在线资| 久久蜜桃av一区二区天堂| 欧美激情第六页| 激情小说 在线视频| 国产精品视频第一区| 一区二区精品在线观看| 中文字幕伦理免费在线视频| 亚洲男人的天堂av| 97在线国产视频| 亚洲日本天堂| 欧美三级三级三级爽爽爽| 亚洲18在线看污www麻豆| 涩涩屋成人免费视频软件| 亚洲а∨天堂久久精品喷水| 朝桐光av一区二区三区| 国产精品美女久久久久久不卡| 在线精品高清中文字幕| 18岁成人毛片| 国产日韩一区二区三区在线| 国产成人免费av电影| 一本色道久久综合熟妇| 高清成人在线观看| 免费电影一区| 香蕉视频在线看| 一区二区三区在线免费播放| 2018日日夜夜| av亚洲一区二区三区| 777色狠狠一区二区三区| caopor在线| 精品国产aⅴ| 欧美成人激情图片网| 波多野结衣国产| 久久机这里只有精品| 国产精品国产精品国产专区蜜臀ah | 欧美成人午夜免费视在线看片 | 成人亚洲综合天堂| 国产精品夫妻自拍| 老太脱裤子让老头玩xxxxx| 国产亚洲一区二区手机在线观看 | 国产一区二区三区四区三区四 | 久久久午夜精品| 熟女熟妇伦久久影院毛片一区二区| 日本性爱视频在线观看| 欧美影视一区二区三区| 91九色蝌蚪porny| 日韩中字在线| 欧美亚洲日本黄色| 999精品国产| 国产欧美精品一区aⅴ影院| 激情五月六月婷婷| 国产精品第一国产精品| 亚洲精品国产品国语在线| 美女福利视频在线观看| 日韩国产精品大片| 久久99国产精品99久久| 青春草视频在线观看| 日本二三区不卡| 久久久久亚洲AV成人无码国产| 欧美激情成人| 国产成人avxxxxx在线看| 亚洲国产精品suv| 国产精品毛片久久久久久久| 日av中文字幕| 婷婷综合福利| 91精品国产色综合| 亚洲成a人片77777精品| 亚洲视频一区二区免费在线观看| 日本在线观看a| 欧美大片网址| 午夜精品三级视频福利| 国产精品人人爽| 中文字幕一区在线| 久久婷五月综合| 精品国产乱码久久久| 欧美亚洲视频在线看网址| 图片区 小说区 区 亚洲五月| 亚洲综合在线第一页| 日本一二三四区视频| 夜间精品视频| 69堂成人精品视频免费| 美女隐私在线观看| 欧美精选一区二区| 日韩在线一卡二卡| 久久99精品久久久久久久久久久久| 日韩久久在线| 日韩不卡在线| 尤物tv国产一区| 欧美 亚洲 另类 激情 另类| 久久精品视频一区二区三区| 久久精品香蕉视频| 日韩电影二区| 成人激情春色网| 超碰人人在线| 亚洲精品在线电影| 精品美女久久久久| 99国产精品久| www.日本xxxx| 四虎成人av| 91色在线观看| 香蕉久久aⅴ一区二区三区| 欧美一区三区二区| 欧美又粗又大又长| 99精品黄色片免费大全| 一区二区传媒有限公司| 妖精视频一区二区三区免费观看| 国产精品久久久久久久久久小说 | 91夜夜未满十八勿入爽爽影院 | 黑森林av导航| 亚洲女同在线| 亚洲国产一区二区精品视频 | 中文字幕手机在线观看| 成人免费va视频| 夫妻免费无码v看片| 欧美日韩高清| 亚洲最大福利视频| 麻豆免费版在线观看| 中文字幕日韩精品在线| jizz国产视频| 色婷婷久久综合| 国产在线免费看| 成人美女视频在线观看18| 日韩少妇内射免费播放| heyzo久久| 92看片淫黄大片欧美看国产片| 久久99亚洲网美利坚合众国| 亚洲理论在线a中文字幕| 在线观看免费中文字幕| 亚洲午夜电影在线观看| 久久av无码精品人妻系列试探| 九九视频精品免费| 3d动漫一区二区三区| 欧美激情国产在线| 国产乱码精品一区二区三区中文| 日韩一区二区三区在线免费观看| 九九精品在线视频| 国产在线小视频| 日韩欧美色综合| 亚洲国产av一区二区三区| 亚洲欧美日韩一区二区三区在线观看| 性色av蜜臀av色欲av| 另类调教123区 | 在线播放 亚洲| 国产香蕉精品| 成人av在线网址| 中文字幕资源网在线观看免费| 久久综合免费视频| 欧美婷婷久久五月精品三区| 91精品国产手机| 在线精品免费视| 亚洲一区二区在线免费看| 波多野在线播放| 成人美女在线视频| 先锋资源在线视频| 蜜桃视频一区二区三区| 精品人妻一区二区三区四区在线 | 亚洲第一页在线观看| 91电影在线观看| 亚洲国产精品午夜在线观看| 亚洲三级视频在线观看| 成人片黄网站色大片免费毛片| 成人午夜电影久久影院| 91在线第一页| 蜜臀av一区二区在线免费观看| 黄页免费在线观看视频| 欧美91大片| 成年人免费观看的视频| 青青草成人影院| 欧美日韩国产免费一区二区三区 | 日韩精品视频观看| 亚洲精品国产一区二| 欧美高清视频一二三区| 中文字幕精品一区二区精| 色婷婷亚洲一区二区三区| 九九热精品视频在线| 亚洲h在线观看| 中文字幕一区二区三区手机版 | 国内自拍视频在线播放| 亚洲观看高清完整版在线观看 | 欧美肉大捧一进一出免费视频| 国产精品888| 天天色天天干天天色| 激情小说亚洲一区| 亚洲涩涩在线观看| 裸体一区二区三区| 久久久久久久高清| 国内外成人在线| 在线观看视频在线观看| 久久成人久久鬼色| 做a视频在线观看| 国模娜娜一区二区三区| 一级黄色片国产| 国产精品亚洲综合一区在线观看| 国产男女无遮挡猛进猛出| 国内久久婷婷综合| 久久久久国产免费| 成人久久视频在线观看| 尤物网站在线观看| 91丨九色丨黑人外教| 成人午夜福利一区二区| 国产欧美一区二区三区在线看蜜臀 | 日本一区二区在线观看视频| 成人毛片在线观看| 最新中文字幕视频| 国产精品人妖ts系列视频| 国产第一页浮力| 亚洲夂夂婷婷色拍ww47 | 久久久123| 91av国产在线| 亚洲精品一区三区三区在线观看| 国产精品吊钟奶在线| 亚洲ww精品| 国产伦精品一区二区三区高清| 亚洲三级精品| 亚洲精品自在在线观看| 欧美韩国一区| 能在线观看的av| 久久激情五月婷婷| 91人妻一区二区| 久久久99精品免费观看不卡| 天天色天天综合| 天天亚洲美女在线视频| 又色又爽又黄无遮挡的免费视频| 日韩精品一区二区三区四区| 五月婷婷综合久久| www.日韩免费| 色偷偷色偷偷色偷偷在线视频| 国产精品爱啪在线线免费观看| 国产精品一区二区精品视频观看| 国产伦精品一区二区三区视频免费| 国产精品一区二区av日韩在线| 国产树林野战在线播放| 国产日韩欧美在线播放不卡| 在线观看国产福利| 91小视频免费看| 欧美日韩色视频| 91黄色免费看| 亚洲高清视频网站| 中文字幕亚洲欧美日韩在线不卡 | 中文字幕午夜精品一区二区三区 | 在线女人免费视频| 91精品啪aⅴ在线观看国产| 亚洲毛片免费看| 成人午夜免费剧场| 秋霞av亚洲一区二区三| 偷偷色噜狠狠狠狠的777米奇| 国产精品视频免费看| 亚洲天堂男人av| 精品国产一区二区亚洲人成毛片| 成人好色电影| 97av在线影院| 视频欧美一区| 不卡中文字幕在线| 日本视频中文字幕一区二区三区| 男女一区二区三区| 1024亚洲合集| 尤物视频免费观看| 日韩高清中文字幕| 一区二区三区伦理| 国产专区欧美专区| 欧美一级本道电影免费专区| 青青青国产在线观看| 国产乱码精品一区二区三区五月婷| 一区二区伦理片| 色婷婷av一区二区三区之一色屋| 性少妇videosexfreexxx片| 深夜福利亚洲导航| 日韩在线短视频| 明星裸体视频一区二区| 国产精品videosex极品| 日本一区二区三区在线免费观看| 国产偷国产偷精品高清尤物| 日韩一区二区视频在线| 亚洲精品国偷自产在线99热| 日本一级理论片在线大全| 91久久精品一区| 围产精品久久久久久久| 一区二区免费av| 中文字幕一区二区三区乱码在线 | 国产亚洲精品女人久久久久久| 欧美日本一道本| 日本亚洲精品| 国产在线拍偷自揄拍精品| 日韩av在线中文字幕| 欧美成人黄色网址| 国产精品久久久久久久久免费丝袜| 久久久久久无码午夜精品直播| 精品亚洲va在线va天堂资源站| 粉嫩一区二区| 日本一区二区高清视频| 日韩高清欧美激情| 日韩一区二区三区四区视频| 欧美伊人久久久久久久久影院| melody高清在线观看| 国产日韩欧美在线播放| 婷婷久久综合| 岛国大片在线免费观看| 亚洲在线成人精品| 色wwwwww| 日本aⅴ大伊香蕉精品视频| 久久成人av| www.cao超碰| 一区二区三区中文在线| 日韩有码第一页| 青草青草久热精品视频在线网站| 你懂的一区二区三区| 久久国产这里只有精品| 日韩理论片在线| 蜜桃av中文字幕| 日韩av免费网站| 999成人网| 中文字幕乱视频| 色美美综合视频| 麻豆影院在线观看| 国产精品入口免费| 久久精选视频| www.5588.com毛片| 日韩激情视频在线播放| 成人mm视频在线观看| 国产精品夜夜夜爽张柏芝| 丁香婷婷综合网| www.日韩一区| 欧美丰满老妇厨房牲生活| 特黄特色欧美大片| 亚洲18在线看污www麻豆| 亚洲成精国产精品女| 国产精品视频一区二区久久| 亚洲va男人天堂| 新67194成人永久网站| 肉色超薄丝袜脚交69xx图片| 欧美xxxxxxxx| 九七电影院97理论片久久tvb| 国产美女永久无遮挡| 久久免费午夜影院| 亚洲AV无码一区二区三区性| 日韩免费精品视频| 午夜天堂精品久久久久| 久操视频免费看| 日韩欧美一二三| 热久久久久久| av天堂永久资源网| 亚洲午夜精品17c| 久久综合网导航|