国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频

HashMap奪命14問,你能堅(jiān)持到第幾問?

共 3430字,需瀏覽 7分鐘

 ·

2022-03-18 19:08

來源:blog.csdn.net/wenwenaier?type=blog

1. HashMap的底層數(shù)據(jù)結(jié)構(gòu)是什么?

在JDK1.7中和JDK1.8中有所區(qū)別:

在JDK1.7中,由”數(shù)組+鏈表“組成,數(shù)組是HashMap的主體,鏈表則是主要為了解決哈希沖突而存在的。

在JDK1.8中,有“數(shù)組+鏈表+紅黑樹”組成。當(dāng)鏈表過長,則會嚴(yán)重影響HashMap的性能,紅黑樹搜索時間復(fù)雜度是O(logn),而鏈表是O(n)。因此,JDK1.8對數(shù)據(jù)結(jié)構(gòu)做了進(jìn)一步的優(yōu)化,引入了紅黑樹,鏈表和紅黑樹在達(dá)到一定條件會進(jìn)行轉(zhuǎn)換:

  • 當(dāng)鏈表超過8且數(shù)組長度(數(shù)據(jù)總量)超過64才會轉(zhuǎn)為紅黑樹
  • 將鏈表轉(zhuǎn)換成紅黑樹前會判斷,如果當(dāng)前數(shù)組的長度小于64,那么會選擇先進(jìn)行數(shù)組擴(kuò)容,而不是轉(zhuǎn)換為紅黑樹,以減少搜索時間。

2. 說一下HashMap的特點(diǎn)

  • hashmap存取是無序的
  • 鍵和值位置都可以是null,但是鍵位置只能是一個null
  • 鍵位置是唯一的,底層的數(shù)據(jù)結(jié)構(gòu)是控制鍵的
  • jdk1.8前數(shù)據(jù)結(jié)構(gòu)是:鏈表+數(shù)組jdk1.8之后是:數(shù)組+鏈表+紅黑樹
  • 閾值(邊界值)>8并且數(shù)組長度大于64,才將鏈表轉(zhuǎn)換成紅黑樹,變成紅黑樹的目的是提高搜索速度,高效查詢

3. 解決hash沖突的辦法有哪些?HashMap用的哪種?

解決Hash沖突方法有:開放定址法、再哈希法、鏈地址法(HashMap中常見的拉鏈法)、簡歷公共溢出區(qū)。HashMap中采用的是鏈地址法。

  • 開放定址法也稱為再散列法,基本思想就是,如果p=H(key)出現(xiàn)沖突時,則以p為基礎(chǔ),再次hash,p1=H(p),如果p1再次出現(xiàn)沖突,則以p1為基礎(chǔ),以此類推,直到找到一個不沖突的哈希地址pi。因此開放定址法所需要的hash表的長度要大于等于所需要存放的元素,而且因?yàn)榇嬖谠俅蝖ash,所以只能在刪除的節(jié)點(diǎn)上做標(biāo)記,而不能真正刪除節(jié)點(diǎn)
  • 再哈希法(雙重散列,多重散列),提供多個不同的hash函數(shù),R1=H1(key1)發(fā)生沖突時,再計算R2=H2(key1),直到?jīng)]有沖突為止。這樣做雖然不易產(chǎn)生堆集,但增加了計算的時間。
  • 鏈地址法(拉鏈法),將哈希值相同的元素構(gòu)成一個同義詞的單鏈表,并將單鏈表的頭指針存放在哈希表的第i個單元中,查找、插入和刪除主要在同義詞鏈表中進(jìn)行,鏈表法適用于經(jīng)常進(jìn)行插入和刪除的情況。
  • 建立公共溢出區(qū),將哈希表分為公共表和溢出表,當(dāng)溢出發(fā)生時,將所有溢出數(shù)據(jù)統(tǒng)一放到溢出區(qū)

注意開放定址法和再哈希法的區(qū)別是

  • 開放定址法只能使用同一種hash函數(shù)進(jìn)行再次hash,再哈希法可以調(diào)用多種不同的hash函數(shù)進(jìn)行再次hash

4. 為什么要在數(shù)組長度大于64之后,鏈表才會進(jìn)化為紅黑樹

在數(shù)組比較小時如果出現(xiàn)紅黑樹結(jié)構(gòu),反而會降低效率,而紅黑樹需要進(jìn)行左旋右旋,變色,這些操作來保持平衡,同時數(shù)組長度小于64時,搜索時間相對要快些,總之是為了加快搜索速度,提高性能

JDK1.8以前HashMap的實(shí)現(xiàn)是數(shù)組+鏈表,即使哈希函數(shù)取得再好,也很難達(dá)到元素百分百均勻分布。當(dāng)HashMap中有大量的元素都存放在同一個桶中時,這個桶下有一條長長的鏈表,此時HashMap就相當(dāng)于單鏈表,假如單鏈表有n個元素,遍歷的時間復(fù)雜度就從O(1)退化成O(n),完全失去了它的優(yōu)勢,為了解決此種情況,JDK1.8中引入了紅黑樹(查找的時間復(fù)雜度為O(logn))來優(yōu)化這種問題

5. 為什么加載因子設(shè)置為0.75,初始化臨界值是12?

HashMap中的threshold是HashMap所能容納鍵值對的最大值。計算公式為length*LoadFactory。也就是說,在數(shù)組定義好長度之后,負(fù)載因子越大,所能容納的鍵值對個數(shù)也越大

loadFactory越趨近于1,那么數(shù)組中存放的數(shù)據(jù)(entry也就越來越多),數(shù)據(jù)也就越密集,也就會有更多的鏈表長度處于更長的數(shù)值,我們的查詢效率就會越低,當(dāng)我們添加數(shù)據(jù),產(chǎn)生hash沖突的概率也會更高

默認(rèn)的loadFactory是0.75,loadFactory越小,越趨近于0,數(shù)組中個存放的數(shù)據(jù)(entry)也就越少,表現(xiàn)得更加稀疏

0.75是對空間和時間效率的一種平衡選擇

如果負(fù)載因子小一些比如是0.4,那么初始長度16*0.4=6,數(shù)組占滿6個空間就進(jìn)行擴(kuò)容,很多空間可能元素很少甚至沒有元素,會造成大量的空間被浪費(fèi)

如果負(fù)載因子大一些比如是0.9,這樣會導(dǎo)致擴(kuò)容之前查找元素的效率非常低

loadfactory設(shè)置為0.75是經(jīng)過多重計算檢驗(yàn)得到的可靠值,可以最大程度的減少rehash的次數(shù),避免過多的性能消耗

6. 哈希表底層采用何種算法計算hash值?還有哪些算法可以計算出hash值?

hashCode方法是Object中的方法,所有的類都可以對其進(jìn)行使用,首先底層通過調(diào)用hashCode方法生成初始hash值h1,然后將h1無符號右移16位得到h2,之后將h1與h2進(jìn)行按位異或(^)運(yùn)算得到最終hash值h3,之后將h3與(length-1)進(jìn)行按位與(&)運(yùn)算得到hash表索引

其他可以計算出hash值的算法有

  • 平方取中法
  • 取余數(shù)
  • 偽隨機(jī)數(shù)法

7. 當(dāng)兩個對象的hashCode相等時會怎樣

hashCode相等產(chǎn)生hash碰撞,hashCode相等會調(diào)用equals方法比較內(nèi)容是否相等,內(nèi)容如果相等則會進(jìn)行覆蓋,內(nèi)容如果不等則會連接到鏈表后方,鏈表長度超過8且數(shù)組長度超過64,會轉(zhuǎn)變成紅黑樹節(jié)點(diǎn)

8. 何時發(fā)生哈希碰撞和什么是哈希碰撞,如何解決哈希碰撞?

只要兩個元素的key計算的hash碼值相同就會發(fā)生hash碰撞,jdk8之前使用鏈表解決哈希碰撞,jdk8之后使用鏈表+紅黑樹解決哈希碰撞

9. HashMap的put方法流程

以jdk8為例,簡要流程如下:

  1. 首先根據(jù)key的值計算hash值,找到該元素在數(shù)組中存儲的下標(biāo)
  2. 如果數(shù)組是空的,則調(diào)用resize進(jìn)行初始化;
  3. 如果沒有哈希沖突直接放在對應(yīng)的數(shù)組下標(biāo)里
  4. 如果沖突了,且key已經(jīng)存在,就覆蓋掉value
  5. 如果沖突后是鏈表結(jié)構(gòu),就判斷該鏈表是否大于8,如果大于8并且數(shù)組容量小于64,就進(jìn)行擴(kuò)容;如果鏈表節(jié)點(diǎn)數(shù)量大于8并且數(shù)組的容量大于64,則將這個結(jié)構(gòu)轉(zhuǎn)換成紅黑樹;否則,鏈表插入鍵值對,若key存在,就覆蓋掉value
  6. 如果沖突后,發(fā)現(xiàn)該節(jié)點(diǎn)是紅黑樹,就將這個節(jié)點(diǎn)掛在樹上

10. HashMap的擴(kuò)容方式

HashMap在容量超過負(fù)載因子所定義的容量之后,就會擴(kuò)容。java里的數(shù)組是無法自己擴(kuò)容的,將HashMap的大小擴(kuò)大為原來數(shù)組的兩倍

我們來看jdk1.8擴(kuò)容的源碼

????final?Node[]?resize()?{
????????//oldTab:引用擴(kuò)容前的哈希表
????????Node[]?oldTab?=?table;
????????//oldCap:表示擴(kuò)容前的table數(shù)組的長度
????????int?oldCap?=?(oldTab?==?null)???0?:?oldTab.length;
????????//獲得舊哈希表的擴(kuò)容閾值
????????int?oldThr?=?threshold;
????????//newCap:擴(kuò)容之后table數(shù)組大小
????????//newThr:擴(kuò)容之后下次觸發(fā)擴(kuò)容的條件
????????int?newCap,?newThr?=?0;
????????//條件成立說明hashMap中的散列表已經(jīng)初始化過了,是一次正常擴(kuò)容
????????if?(oldCap?>?0)?{
????????????//判斷舊的容量是否大于等于最大容量,如果是,則無法擴(kuò)容,并且設(shè)置擴(kuò)容條件為int最大值,
????????????//這種情況屬于非常少數(shù)的情況
????????????if?(oldCap?>=?MAXIMUM_CAPACITY)?{
????????????????threshold?=?Integer.MAX_VALUE;
????????????????return?oldTab;
????????????}//設(shè)置newCap新容量為oldCap舊容量的二倍(<<1),并且<最大容量,而且>=16,則新閾值等于舊閾值的兩倍
????????????else?if?((newCap?=?oldCap?<?????????????????????oldCap?>=?DEFAULT_INITIAL_CAPACITY)
????????????????newThr?=?oldThr?<????????}
????????//如果oldCap=0并且邊界值大于0,說明散列表是null,但此時oldThr>0
????????//說明此時hashMap的創(chuàng)建是通過指定的構(gòu)造方法創(chuàng)建的,新容量直接等于閾值
????????//1.new?HashMap(intitCap,loadFactor)
????????//2.new?HashMap(initCap)
????????//3.new?HashMap(map)
????????else?if?(oldThr?>?0)?//?initial?capacity?was?placed?in?threshold
????????????newCap?=?oldThr;
????????//這種情況下oldThr=0;oldCap=0,說明沒經(jīng)過初始化,創(chuàng)建hashMap
????????//的時候是通過new?HashMap()的方式創(chuàng)建的
????????else?{???????????????//?zero?initial?threshold?signifies?using?defaults
????????????newCap?=?DEFAULT_INITIAL_CAPACITY;
????????????newThr?=?(int)(DEFAULT_LOAD_FACTOR?*?DEFAULT_INITIAL_CAPACITY);
????????}
????????//newThr為0時,通過newCap和loadFactor計算出一個newThr
????????if?(newThr?==?0)?{
????????????//容量*0.75
????????????float?ft?=?(float)newCap?*?loadFactor;
????????????newThr?=?(newCap?float)MAXIMUM_CAPACITY??
??????????????????????(int)ft?:?Integer.MAX_VALUE);
????????}
????????threshold?=?newThr;
????????@SuppressWarnings({"rawtypes","unchecked"})
????????????????//根據(jù)上面計算出的結(jié)果創(chuàng)建一個更長更大的數(shù)組
????????????Node[]?newTab?=?(Node[])new?Node[newCap];
????????//將table指向新創(chuàng)建的數(shù)組
????????table?=?newTab;
????????//本次擴(kuò)容之前table不為null
????????if?(oldTab?!=?null)?{
????????????//對數(shù)組中的元素進(jìn)行遍歷
????????????for?(int?j?=?0;?j?????????????????//設(shè)置e為當(dāng)前node節(jié)點(diǎn)
????????????????Node?e;
????????????????//當(dāng)前桶位數(shù)據(jù)不為空,但不能知道里面是單個元素,還是鏈表或紅黑樹,
????????????????//e?=?oldTab[j],先用e記錄下當(dāng)前元素
????????????????if?((e?=?oldTab[j])?!=?null)?{
????????????????????//將老數(shù)組j桶位置為空,方便回收
????????????????????oldTab[j]?=?null;
????????????????????//如果e節(jié)點(diǎn)不存在下一個節(jié)點(diǎn),說明e是單個元素,則直接放置在新數(shù)組的桶位
????????????????????if?(e.next?==?null)
????????????????????????newTab[e.hash?&?(newCap?-?1)]?=?e;
????????????????????//如果e是樹節(jié)點(diǎn),證明該節(jié)點(diǎn)處于紅黑樹中
????????????????????else?if?(e?instanceof?TreeNode)
????????????????????????((TreeNode)e).split(this,?newTab,?j,?oldCap);
????????????????????//e為鏈表節(jié)點(diǎn),則對鏈表進(jìn)行遍歷
????????????????????else?{?//?preserve?order
????????????????????????//低位鏈表:存放在擴(kuò)容之后的數(shù)組的下標(biāo)位置,與當(dāng)前數(shù)組下標(biāo)位置一致
????????????????????????//loHead:低位鏈表頭節(jié)點(diǎn)
????????????????????????//loTail低位鏈表尾節(jié)點(diǎn)
????????????????????????Node?loHead?=?null,?loTail?=?null;
????????????????????????//高位鏈表,存放擴(kuò)容之后的數(shù)組的下標(biāo)位置,=原索引+擴(kuò)容之前數(shù)組容量
????????????????????????//hiHead:高位鏈表頭節(jié)點(diǎn)
????????????????????????//hiTail:高位鏈表尾節(jié)點(diǎn)
????????????????????????Node?hiHead?=?null,?hiTail?=?null;
????????????????????????Node?next;
????????????????????????do?{
????????????????????????????next?=?e.next;
????????????????????????????//oldCap為16:10000,與e.hsah做&運(yùn)算可以得到高位為1還是0
????????????????????????????//高位為0,放在低位鏈表
????????????????????????????if?((e.hash?&?oldCap)?==?0)?{
????????????????????????????????if?(loTail?==?null)
????????????????????????????????????//loHead指向e
????????????????????????????????????loHead?=?e;
????????????????????????????????else
????????????????????????????????????loTail.next?=?e;
????????????????????????????????loTail?=?e;
????????????????????????????}
????????????????????????????//高位為1,放在高位鏈表
????????????????????????????else?{
????????????????????????????????if?(hiTail?==?null)
????????????????????????????????????hiHead?=?e;
????????????????????????????????else
????????????????????????????????????hiTail.next?=?e;
????????????????????????????????hiTail?=?e;
????????????????????????????}
????????????????????????}?while?((e?=?next)?!=?null);
????????????????????????//低位鏈表已成,將頭節(jié)點(diǎn)loHead指向在原位
????????????????????????if?(loTail?!=?null)?{
????????????????????????????loTail.next?=?null;
????????????????????????????newTab[j]?=?loHead;
????????????????????????}
????????????????????????//高位鏈表已成,將頭節(jié)點(diǎn)指向新索引
????????????????????????if?(hiTail?!=?null)?{
????????????????????????????hiTail.next?=?null;
????????????????????????????newTab[j?+?oldCap]?=?hiHead;
????????????????????????}
????????????????????}
????????????????}
????????????}
????????}
????????return?newTab;
????}

擴(kuò)容之后原位置的節(jié)點(diǎn)只有兩種調(diào)整

  • 保持原位置不動(新bit位為0時)
  • 散列原索引+擴(kuò)容大小的位置去(新bit位為1時)

擴(kuò)容之后元素的散列設(shè)置的非常巧妙,節(jié)省了計算hash值的時間,我們來看一 下具體的實(shí)現(xiàn)

當(dāng)數(shù)組長度從16到32,其實(shí)只是多了一個bit位的運(yùn)算,我們只需要在意那個多出來的bit為是0還是1,是0的話索引不變,是1的話索引變?yōu)楫?dāng)前索引值+擴(kuò)容的長度,比如5變成5+16=21

這樣的擴(kuò)容方式不僅節(jié)省了重新計算hash的時間,而且保證了當(dāng)前桶中的元素總數(shù)一定小于等于原來桶中的元素數(shù)量,避免了更嚴(yán)重的hash沖突,均勻的把之前沖突的節(jié)點(diǎn)分散到新的桶中去

11. 一般用什么作為HashMap的key?

一般用Integer、String這種不可變類當(dāng)HashMap當(dāng)key

  • 因?yàn)镾tring是不可變的,當(dāng)創(chuàng)建字符串時,它的hashcode被緩存下來,不需要再次計算,相對于其他對象更快
  • 因?yàn)楂@取對象的時候要用到equals()和hashCode()方法,那么鍵對象正確的重寫這兩個方法是非常重要的,這些類很規(guī)范的重寫了hashCode()以及equals()方法

12. 為什么Map桶中節(jié)點(diǎn)個數(shù)超過8才轉(zhuǎn)為紅黑樹?

8作為閾值作為HashMap的成員變量,在源碼的注釋中并沒有說明閾值為什么是8

在HashMap中有這樣一段注釋說明,我們繼續(xù)看

?*?Because?TreeNodes?are?about?twice?the?size?of?regular?nodes,?we
?*?use?them?only?when?bins?contain?enough?nodes?to?warrant?use
?*?(see?TREEIFY_THRESHOLD).?And?when?they?become?too?small?(due?to
?*?removal?or?resizing)?they?are?converted?back?to?plain?bins.??In
?*?usages?with?well-distributed?user?hashCodes,?tree?bins?are
?*?rarely?used.??Ideally,?under?random?hashCodes,?the?frequency?of
?*?nodes?in?bins?follows?a?Poisson?distribution
?*?(http://en.wikipedia.org/wiki/Poisson_distribution)?with?a
?*?parameter?of?about?0.5?on?average?for?the?default?resizing
?*?threshold?of?0.75,?although?with?a?large?variance?because?of
?*?resizing?granularity.?Ignoring?variance,?the?expected
?*?occurrences?of?list?size?k?are?(exp(-0.5)?*?pow(0.5,?k)?/
?*?factorial(k)).

翻譯

因?yàn)闃涔?jié)點(diǎn)的大小大約是普通節(jié)點(diǎn)的兩倍,所以我們只在箱子包含足夠的節(jié)點(diǎn)時才使用樹節(jié)點(diǎn)(參見TREEIFY_THRESHOLD)。
當(dāng)他們邊的太?。ㄓ捎趧h除或調(diào)整大小)時,就會被轉(zhuǎn)換回普通的桶,在使用分布良好的hashcode時,很少使用樹箱。
理想情況下,在隨機(jī)哈希碼下,箱子中節(jié)點(diǎn)的頻率服從泊松分布
第一個值是:

?*?0:????0.60653066
?*?1:????0.30326533
?*?2:????0.07581633
?*?3:????0.01263606
?*?4:????0.00157952
?*?5:????0.00015795
?*?6:????0.00001316
?*?7:????0.00000094
?*?8:????0.00000006
?*?more:?less?than?1?in?ten?million

樹節(jié)點(diǎn)占用空間是普通Node的兩倍,如果鏈表節(jié)點(diǎn)不夠多卻轉(zhuǎn)換成紅黑樹,無疑會耗費(fèi)大量的空間資源,并且在隨機(jī)hash算法下的所有bin節(jié)點(diǎn)分布頻率遵從泊松分布,鏈表長度達(dá)到8的概率只有0.00000006,幾乎是不可能事件,所以8的計算是經(jīng)過重重科學(xué)考量的

  • 從平均查找長度來看,紅黑樹的平均查找長度是logn,如果長度為8,則logn=3,而鏈表的平均查找長度為n/4,長度為8時,n/2=4,所以閾值8能大大提高搜索速度
  • 當(dāng)長度為6時紅黑樹退化為鏈表是因?yàn)閘ogn=log6約等于2.6,而n/2=6/2=3,兩者相差不大,而紅黑樹節(jié)點(diǎn)占用更多的內(nèi)存空間,所以此時轉(zhuǎn)換最為友好

13. HashMap為什么線程不安全?

  • 多線程下擴(kuò)容死循環(huán)。JDK1.7中的HashMap使用頭插法插入元素,在多線程的環(huán)境下,擴(kuò)容的時候有可能導(dǎo)致環(huán)形鏈表的出現(xiàn),形成死循環(huán)。因此JDK1.8使用尾插法插入元素,在擴(kuò)容時會保持鏈表元素原本的順序,不會出現(xiàn)環(huán)形鏈表的問題
  • 多線程的put可能導(dǎo)致元素的丟失。多線程同時執(zhí)行put操作,如果計算出來的索引位置是相同的,那會造成前一個key被后一個key覆蓋,從而導(dǎo)致元素的丟失。此問題在JDK1.7和JDK1.8中都存在
  • put和get并發(fā)時,可能導(dǎo)致get為null。線程1執(zhí)行put時,因?yàn)樵貍€數(shù)超出threshold而導(dǎo)致rehash,線程2此時執(zhí)行g(shù)et,有可能導(dǎo)致這個問題,此問題在JDK1.7和JDK1.8中都存在

14. 計算hash值時為什么要讓低16bit和高16bit進(jìn)行異或處理

  • 我們計算索引需要將hashCode值與length-1進(jìn)行按位與運(yùn)算,如果數(shù)組長度很小,比如16,這樣的值和hashCode做異或?qū)嶋H上只有hashCode值的后4位在進(jìn)行運(yùn)算,hash值是一個隨機(jī)值,而如果產(chǎn)生的hashCode值高位變化很大,而低位變化很小,那么有很大概率造成哈希沖突,所以我們?yōu)榱耸乖馗玫纳⒘?,將hash值的高位也利用起來\

舉個例子

如果我們不對hashCode進(jìn)行按位異或,直接將hash和length-1進(jìn)行按位與運(yùn)算就有可能出現(xiàn)以下的情況

如果下一次生成的hashCode值高位起伏很大,而低位幾乎沒有變化時,高位無法參與運(yùn)算

可以看到,兩次計算出的hash相等,產(chǎn)生了hash沖突

所以無符號右移16位的目的是使高混亂度地區(qū)與地混亂度地區(qū)做一個中和,提高低位的隨機(jī)性,減少哈希沖突

瀏覽 26
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報
評論
圖片
表情
推薦
點(diǎn)贊
評論
收藏
分享

手機(jī)掃一掃分享

分享
舉報

感谢您访问我们的网站,您可能还对以下资源感兴趣:

国产秋霞理论久久久电影-婷婷色九月综合激情丁香-欧美在线观看乱妇视频-精品国avA久久久久久久-国产乱码精品一区二区三区亚洲人-欧美熟妇一区二区三区蜜桃视频 成人无码人妻| 国产亚洲视频免费观看| 操逼免费观看视频| 成人自拍网站| 手机AV在线观看| 免费版成人久久幺| 狠狠干伊人| 亚洲乱码日产精品BD在线观看 | 日逼黄片| 国内自拍激情视频| 国产精品久久免费视频| 全国男人的天堂网站| 欧美高潮| 黄网站在线播放| 亚洲欧洲成人在线| 久久精品国产视频| 青草网| av大片在线观看| 免费观看黄色网| 无码电影在线播放| 99热在线只有精品| 波多野结衣东京热| 中文字幕欧美在线| 国产亚洲AV| 一级黄色AV片| 91网站在线免费观看| 欧美黄色成人视频| 色诱AV| 日韩三级在线观看| 成人无码www在线看免费| 黄色色情小说| 日本一区二区精品| 欧美熟妇搡BBBB搡BBBBB| 操操AV| 人妻大屁股-91Porn| 天天射天天| 国产二区视频| 黑人一区二区三区四区| 国产精品秘久久久久久1-~/\v7-/ 囯产精品一区二区三区线一牛影视1 | 国产1级a毛a毛1级a毛1级| 国产精品成人无码专区| 无码专区视频| 久久草成人网| 撸撸综合网| 无码二区三区| 狠狠视频| 少妇人妻偷人精品无码视频新浪| 2017天天干天天射| XXXXⅩHD亚洲人HD| 熟女人妻人蜜桃视频| 色婷婷黄色| 啪啪网站免费看| 日韩一级片在线播放| 日韩成人一区| 欧美3P视频| 人妻少妇偷人精品久久| 麻豆传媒在线播放| 亚洲av免费在线观看| 精品一区二区三区av| www.91madou| AV无码在线播放| 国产激情小视频| 日无码在线| 日韩欧美精品在线| 中文字幕久久人妻无码精品蜜桃 | 日本性欧美| 精品一区二区三区免费| 久久成人精品视频| 插穴网| 亚洲天堂在线看| 777久久久| 国产精品久久久一区二区三区| 69人人| 七十路の高齢熟妇无码| 久久毛久久久j| av三级网站| aaa免费视频| 一级黄色毛片| 婷婷情色| 中文字幕国产在线| 精品欧美激情精品一区| 精品码A片18| 大香蕉999| 国产视频一区二区在线| 国产在线一| 无码人妻丰满熟妇| 天天撸天天色| 国产不卡视频| 五月丁香在线| 在线性视频| 蜜臀久久久久久999| 成人黄色性视频| 一级爱爱爱| 中文亚洲字幕| 国产黄片在线视频| 日逼www| 日韩无码二级| 波多野结衣亚洲视频| 黄色电影免费在线观看| 亚洲精品白浆高清久久久久久| 少妇bbw搡bbbb搡bbbb| 美女黄色视频永费在线观看网站| 内射老太太| 丁香久久| 免费日批网站| 国产精品无码永久免费不卡| aaa精品视频| 日本三级中文字幕| 国产九九精品| 国产草草| 女BBBBBB女BBB| 河南乱子伦视频国产| 婷婷丁香六月| 黄色福利视频在线观看| 911亚洲精品| 欧一美一婬一伦一区二区三区自慰国 | 国产AV综合网| 七十路の高齢熟妇无码| 黄色片在线视频| 亚洲欧洲AV| 婷婷激情中文字幕| 精品成人免费视频| 黄色大片中国一级片-免费看特一级片-亚洲黄色AV | 学生妹一级J人片内射视频| 国产成人三级在线播放| 骚逼av| 少妇搡BBBB搡BBB搡18禁| 79色色| 尻屄视频网站| 日韩激情| 免费欧美黄色| 人妻被午夜福利AV| 成人片免费看| 国际精品久久久| 久久久穴| 欧美一级操逼视频| 国产精品TV| 日屄电影| 成人AAA片| 日韩成人一区二区三区| 亚洲无码色婷婷| 激情深爱五月| 玩弄人妻少妇500系列视频| 日本无码成人片在线播放| 天天日天天色| 日韩欧美精品在线| www.97yy| 一级黄色视频免费看| 国产精品无码乱伦| 日本免费黄色片| 日韩少妇无码| 婷婷视频| 色情一级AA片免费观看| 国产青娱乐在线视频| 五月天欧美性爱| av一卡二卡| 国产91无码精品秘入口在线观看| 99精品视频16在线免费观看| 日本性爱中文字幕| 国产娇小13videos糟蹋| 梁祝艳谭A级毛片| 在线小视频| 2021天天操| 青青草视频免费看| 蜜桃91视频| 性生活无码视频| 亚洲中文字幕久久日| 囯产精品久久久久久久久久辛辛| 日本视频在线免费| 婷婷丁香六月| 蜜桃视频在线入口www| 欧美日韩一级二级三级| 999精品视频| 日韩欧美国产成人| a片免费网址| 大香蕉国产精品| 在线中文字幕AV| 久久久久久久久久久久国产精品 | 91乱子伦国产乱| 国产主播一区二区| 日本三级片在线| 97爱爱爱| 中国老女人日逼| 东京热视频在线观看| 一本到无码| 无遮挡动态图| 无码激情| 爆乳尤物一区二区三区| 亚洲日韩黄色| 西西4444WWW无视频| 91日本| 色视频在线播放| 人人操人人干人人妻| 91精品国产综合久久久久久| 日本操b| 苍井空无码在线观看| 国产成人精品视频免费看| jiujiuav| 91黄色视频网站| 黄色视频大全免费看| 欧美国产日韩综合在线观看170| 国产一级a毛一级a做免费高清视频| 中文字幕A片| 韩日成人| 猫咪视频大全视频| 3D动漫精品啪啪一区二区下载| 爱爱爱爱视频| 青娱乐国产av| 日本无码片| 色噜噜噜| 欧美一级网| 久久精品黄色| 日韩视频二区| 微拍福利一区二区| 91成人视频在线观看| 亚洲免费观看高清完整版在va线 | 淫荡少妇美红久久久久久久久久| 国产精品国产成人国产三级| 天天插一插| 人人操人人操人人操人人操| 一道本视频在线免费观看| 久9视频| 亚洲av黄片| 久久久久久久久黄色| 色色色999| AA片网站| 成人午夜福利高清视频| 亚洲无码一区二区在线观看| 婷婷亚洲综合| 青青草Av| 一级黄色电影免费| 亚洲最大的成人网站| 国产AV影视| 久99在线视频| 久色亚洲| 精品免费国产一区二区三区四区 | 欧美一级A片在免费看| 国产农村妇女精品一二区| 精品一二三| 91乱伦视频| 97人妻人人操| 欧美特级视频| 水蜜桃视频免费观看| 97人妻精品| 日韩激情视频在线观看| 超碰在线精品| 欧美日韩精品久久久免费观看| 中文字幕操逼网站| 亚欧黄色| 91精品人妻少妇无码影院| 欧美成人性爱视频| 欧美视频免费操逼图。| 一级真人毛片| 日韩性爱小视频| 麻豆AV在线| 天天操夜夜操视频免费高清| 国产精品美女久久久久AV爽| 久久久偷拍| 日韩中文字幕无码| 大地资源第5页在线| 五月婷婷五月| 成人免费无码婬片在线| 激情乱伦网站| 一区在线免费观看| 国产三级自拍视频| 美女久草| 精品无码一区二区三区蜜桃李宗瑞| 色色影院| av大片免费看| 久久九一| 欧美操逼的| 中文字幕无码在线观看| 欧美AAAAAAAA| 亚洲图片在线观看| 国产91在线视频| 黄色高清视频在线观看| 色三区| 一区二区三区在线观看视频| 午夜成人黄色电影| 日韩偷拍网| 18禁在线| 午夜狠狠操| 伊人视频在线| 国内无码| 久久久久久久免费无码| 日韩中出| 免费看A级片| 日韩免费黄色视频| 免费无码高清视频| 日本一区二区三区四区在线观看| 在线无码中文| 亚洲免费在线视频| 久久亚洲精品视频| 午夜AV影院| 黄色A网站| 夜夜撸天天干| 91九九| 一级片免费观看视频| 操屄视频在线| 91爱爱com| 三级片亚洲无码| 欧美自拍视频在线观看| 一级a黄片| 波多野结衣无码高清视频| 日韩免费在线视频| 性无码区| 精品国产乱码久久久久久郑州公司 | 9999re| 日韩午夜AV| 中文无码人妻少妇| 亚洲天堂手机在线| 奇米影视亚洲春色| 五月丁香激情在线| 成人av免费在线观看| 国产成人高清在线| 亚洲欧美网站| 蜜挑视频一区二区三区| 激情综| 日本成人中文字幕| 欧美一级片网站| 成人无码人妻| 黄色成人视频网站| 超碰爱爱| 兔子先生和優奈玩游戲脫衣服,運氣報表優奈輸到脫精光 | 欧美性爱免费在线视频| 超级碰碰| 天天爽夜夜爽精品成人免费| 日产电影一区二区三区| 视频一区在线观看| 偷拍久久久| 欧美级毛片一进一出| 色欲色欲一区二区三区| 91视频18| 最美人妖系列国产Ts涵涵| 另类老太婆性BBWBBw| 午夜视频在线| 亚洲天堂高清| 黄片在线免费观看| 五月黄色电影| 久久久999精品日韩一区二区| 青青草原免费在线视频| 不卡视频在线| 精品尤物在线| 午夜丁香| 亚洲男女内射| 激情五月天网| 亚洲综合免费观看高清完整版在线观 | 亚洲一区自拍| 无码人妻精品一区二区三区99仓 | 人人操人人摸人人射| 国产草草| 一品国精和二品国精的文化意义| 无码AV免费观看| 久久91久久久久麻豆精品| 精品国产天线2024| 免费看成人747474九号视频在线观看| 少妇精品久久久久久久久久| 黄色福利网站| 免费无码毛片一区二区A片| 午夜激情在线观看| 激情五月婷婷综合| 91午夜福利| 日韩精品成人免费观看视频| 久久99精品国产| 午夜成人网站在线观看| 一区二线视频| 成人色色| 精品国产99久久久久久www| 91搞| 亚洲中文字幕av| 黄片中文字幕| 国产无码AV大片| 国产操逼的视频| 人人操人人干97| 精品无码三级在线观看视频 | 亚洲五月天色| 中文字幕永久免费| 日韩精品一区二区亚洲AV观看| 国产成人视频在线| 综合色色婷婷| 欧美三级在线播放| 一区二区无码精品| 女孩自慰在线观看| 久久国产激情| 亚洲色图一区二区| 国产精品国产精品国产专区| 麻酥酥在线视频| 69人妻人人澡人人爽人人精品| 亚洲福利在线免费观看| 国产久久这里只有精品视频| 国产一区二三区| 成人看片33x9.CC| 福利视频一区二区| 国产无码在线影院| 不卡的av在线| 国产91麻豆视频| 91久久国产性奴调教| 久久免费视频3| 越南小嫩嫩BBWBBw| 狠狠干综合网| 成人免费视频性爱| 日韩无码精品电影| 久操香蕉| av免费在线播放| 性爱免费视频网站| 好吊一区二区三区| 先锋影音一区二区| 这里视频很精彩免费观看电视剧最新| 91人人妻人人澡人人爽| 四虎成人精品永久免费AV九九| 深爱婷婷| 婷婷狠狠爱| 98在线++传媒麻豆的视频| 亚洲小说欧美激情另类A片小说 | 夜夜爽夜夜爽| 一道本一区| 大香蕉伊人综合在线| 日韩人妻丰满无码区A片| 大香蕉在线伊人| 人人澡人人妻人人爽| 久久77| 国产在线一区二区三区四区| 久草在线| 亚洲黄色一区| 免费高清无码在线| 91在线精品一区二区| 嗯嗯啊啊网站| 欧美成人视频。| 日韩在线精品视频| 高清无码直接看| 国产九九| 日本国产在线| 婷婷视频导航| 五月天婷婷在线观看| 大香蕉9999| 精品国产乱码一区二区| 北京熟妇槡BBBB槡BBBB| 亚洲一区高清| 超碰在线免费| 精品资源成人| 天堂国产一区二区三区| 日韩小视频| 日一日射一射| 星空AV| 国产黄色三级片| 无码AV免费观看| 蜜臀成人片| 日本一区二区在线| 中文字幕在线播放视频| 影音先锋AV成人| 第一色影院| 午夜成人中文字幕| 国偷自产视频一区二区久| 特级av| 天天日,天天干,天天操| 国产理论视频在线观看| 欧美1区| 西西人体44www大胆无码| 一级片三级片| 国产乱码一区二区三区的解决方法| 成年免费视频| 久久日韩无码| 内射少妇18| 韩国中文无码| 日韩AV网站在线观看| 青草福利| 99xxxxx| 亚洲中文字幕日韩精品| 蜜桔视频嫩草蜜桃| 国产成人综合网| 久久婷婷网站| 日本最新免费二区| 在线观看欧美日韩| 久久精品偷拍视频| 超碰在线免费播放| 中日韩欧美一级A片免费| 天堂一区二区三区18| 亚洲色一| 高清一区二区| 亚洲欧美精品在线| 免费成人在线看片黄| 亚洲去干网| 国产91无码精品秘入口新欢| 欧洲第一无人区观看| 成人黄色一级A片| 一区二区三区久久久| 黄色毛片电影| 色黄视频在线观看| 免费一级欧美片在线观看| 国产女18毛片多18精品| 精品欧美乱码久久久久久| 99热一区二区三区| 国精产品一区一区三区四区| 蜜桃av色偷偷av老熟女| 一级a性色毛片| 国产欧美精品AAAAAA片| 国产成人无码A片V99| 91草视频| 大香蕉75在线| 午夜神马51| 91午夜福利| 国产一区二区三区视频在线观看| 欧美在线视频网| 日韩中文无码一级A片| 在线视频a| 欧美啪啪啪| 欧美一级成人| 中文字幕免费中文| 超碰中文字幕| 玖玖爱国产| 97人人人人人人| 亚洲成人无码高清| 中文字幕av高清片,中文在线观看 www一个人免费观看视频www | 特级婬片A片AAA毛片AA做头 | 91无码精品久久久一区第1集| 丁香五月社区| 人人超碰人人| 日日爱99| 99热精品免费在线观看| 中文字幕乱视频| 丁香五月婷婷五月天| 九九久久精品视频| 欧美精品在线免费| 久久毛片| 色色免费视频| 欧美日韩色图| 日韩成人不卡| 在线国产黄色| 九九久久精品| 人妻无码专区| 日韩偷拍网| 99热这里是精品| 国产剧情自拍| 色婷婷亚洲| 欧美性69| 久草福利网| 艹逼91| 免费+无码+精品| 中文字幕无码在线观看| 亚洲夜夜撸| 黄色大片免费在线观看| 粉嫩av一区二区白浆| 五月亭亭在线视频| 亚洲天堂本一| 特级毛片| 69AV在线播放| 综合操逼网| 超碰97成人| 在线观看毛片网站| 91在线亚洲| 成人三级无码| 91精品人妻少妇无码影院| 中文字幕无码影院| 精品女同一区二区三区四区外站在线 | 亚洲无码色婷婷| 久久精品国产亚洲AV麻豆痴男| 国产av福利| 蜜臀99久久精品久久久久久软件| 欧美人人| 豆花视频在线看| 日本wwwwww| 欧美激情性爱网站| 视频一区在线观看| 大香蕉久久爱| 欧美午夜精品成人片在线播放| 蜜桃AV无码一区二区三区| 国产中文字幕在线免费观看| 日韩啪啪片| 国精久久久久| 婷婷久久综合久色| 伊人五月天激情| 国产精品成人在线| 人人摸人人操人人射| 国产色拍| 国产成人自拍视频在线| av福利在线观看| 91福利网| 江苏妇搡BBBB搡BBB| 久草视频福利| 日本内射在线观看| 色情一级AA片免费观看| 在线观看免费一区| 亚洲中文无码av| 国产精品无码乱伦| 小H片在线观看| 日无码| 有码在线| 欧美午夜福利在线观看| 青娱乐欧美| 亚洲乱伦电影| 综合亚洲视频| 欧美一级a视频免费放| 91人妻人人澡人人爽人人精品一 | 人人人人人人人人操| 日韩视频中文字幕在线| 国产精品久久免费视频| 中文字幕日本电影| 国产高清AV| 久久久精品电影| 亚洲艹逼| 免费黄视频在线观看| 白丝久久| 深爱婷婷网| 福利一区二区| 色噜噜噜| 欧美综合国产| 色婷婷中文字幕| 人妻熟女一区二区| 九九激情| 免费中文字幕av| 欧美熟妇BBB搡BBB| 3p视频网站| 国产主播专区| 亚洲精品无| 亚洲AV无码高清| 国内自拍99| 国产成人片色情AAAA片| 狼友视频一国产| 欧美成人一区二区三区| 欧洲精品在线观看| 国产日韩精品无码去免费专区国产| 美女综合网| 国产九色| 无码人妻精品一区二区三区99仓 | 亚洲成人无码在线播放| 天干夜天干天天天爽视频| 国产香蕉91| 黄片网址大全| 日韩不卡一区二区三区| 日韩人成| 国产精品国产三级国产AⅤ| 日日爱爱| 91人妻视频| 亚洲无码一区二区三区蜜桃| 日本一区免费观看| 少妇二区| 性无码区| 亚洲操逼逼| 亚洲AV影院| 午夜99| 色香蕉在线视频| 无码人妻精品一区二区三区温州| 中文字幕一区二区三区人妻在线视频 | 久久久精品| 国产91人妻| 天天色图| 开心激情站| 丁香婷婷五月| 在线播放中文字幕| 操逼毛片| a在线观看| 国产一级一片免费播放放a| 波多野结衣无码在线| 奇米影视亚洲春色| 精品福利在线观看| 中文字幕视频在线观看| 91久| 日本a在线| 国产在线激情| 一区二区高清无码| 亚洲精品成人无码| 成人视频网站18| 伊人免费视频| 加勒比日日综合| 懂色av一区蜜桃| 久久毛片人妻| 最新免费毛片| 免费在线性爱视频| 成人毛片18毛片女人| 国产精品毛片一区视频播| 毛片2| 亚洲视频在线观看播放| 国产女人18| 久久久久久无码精品亚洲日韩麻豆| 日韩二级片| 国产精品在线免费| 日韩毛片一区二区| 日本親子亂子倫XXXX| av资源在线看| 免费看操逼| 性猛交AAAA片免费观看直播| 丁香综合网| 成人在线综合| 91在线无码精品秘入口动作| 亚洲日韩欧美国产| 美女免费网站| www.色日本| AV天堂国产| 午夜免费性爱视频| 在线观看视频日韩| 欧美操日本| 三级片AAAA| 成人丁香五月天| 一级a免一级a做免费线看内裤| 夜色88V精品国产亚洲| AV黄色在线| 伊人精品A片一区二区三区| 亚洲精品秘一区二区三小| 欧美精产国品一区二区区别| 美女网站在线观看| 91小仙女jK白丝袜呻吟| 亚洲综合免费观看| 偷拍99| 亚洲www| 999久久精品| 中文av网站| 97色情| 人成在线视频| 操嫩逼视频| 日本一级大片| 日本A片在线播放| 水密桃网站| 日韩精品人妻中文字幕有码| 黄片免费大全| 激情导航| 狠狠操狠狠插| 亚洲无码人妻在线| 亚洲狠狠撸| 上海熟妇搡BBBB搡BBBB| www.亚洲| 国产又色又爽又黄又免费| 日本午夜福利电影| 黄色国产| 羽月希在线播放| 狼人综合色| 男人天堂网av| 精品黄色电影| 欧美日韩色图| 亚洲一级黄色视频| 日韩欧美成人电影| 国产区在线观看| 2019中文字幕在线| 亚洲成人电影AV| 东京热免费视频| 欧美午夜爱爱| 国产麻豆AⅤMDMD0071| 无码潮喷| 色眯眯久久爱| 秋霞二区| 国产草草| 天天操天天操天天操天天| 欧美在线一级| 成人福利电影| 99久久99久久兔费精桃| 久久精品性爱| 国产一区二区三区四区在线观看| 九九韩剧网最新电视剧免费观看| 在线观看免费国产| 3D动漫啪啪精品一区二区中文字幕| 亚洲日本在线观看| 漂亮人妻吃鸡啪啪哥哥真的好| 成人资源站| 香蕉视频成人在线观看| 国产精品无码中文在线| 色色色色五月天| 俺也去在线视频| 91亚洲视频| 成人午夜A片免费看| 人人操人人爱人人妻| 嫩小槡BBBB槡BBBB槡免费-百度 | 麻豆乱伦| 日P免费视频| 2026AV天堂网| av在线资源播放| 亚洲综合社区| 18禁91| 嫩草av在线| 日本天堂网在线观看| 亚洲天堂影音先锋| A片视频免费观看| 亚洲女人被黑人巨大进入| 91熟女视频| 国产高清黑人| 99精品自拍| 三上悠亚无码破解69XXX| 成人AAA片| 成人A毛片| 国产精品成人3p一区二区三区 | 国产精品免费一区二区三区四区视频 | 日韩成人网站| 免费性网| 国内精品久久久久久久久久变脸| 在线小黄片| sesese999| 18禁网站禁片免费观看| 99re99热| 日韩人妻无码一区二区三区七区| 欧美老熟女18| 久久免费毛片| 青青久操| 国产成人毛片18女人18精品| 日韩综合精品中文字幕66| 五月婷婷丁香网| 98无码人妻精品一区二区三区 | 91豆花视频18| 欧美国产在线观看综合| 亚洲香蕉视频网站| 99热这里只有精品7| 一道本无码在线| 国产人人操| 按摩性高湖婬AAA片A片中国| 少妇搡BBBB搡BBB搡毛片少妇| 激情小说五月天| 久久人妻中文字幕| 草视频在线| A片黄色视频| 色色婷婷五月| 婷婷色婷婷| 激情一级片| 大香蕉青娱乐| 亚洲小说欧美激情另类A片小说| 日本一区二区不卡| 亚洲人在线观看| 亚洲男同tv| 日韩午夜av| 91麻豆成人| 日韩一及| 一级黄色生活片| 一区二区国产精品| 国产在线激情| 亚洲天堂AV2025| 老太色HD色老太HD-百度| 麻豆国产精品一区| 日韩群交| 波多野结衣福利视频| 亚洲av自拍| 青娱乐成人| 安徽妇搡BBBB搡BBBB,另类老妇| 成人先锋影音| 九九操逼| 91青青草| 五月丁香婷婷在线观看| 北条麻妃在线视频聊天| 久久精品免费观看| 91在线看18| 3D动漫精品啪啪一区二区竹笋 | 怡红院一区二区| 婷婷狠狠干| 超碰免费在线观看| 草逼A片| 神马午夜精品91| 99伊人| 麻豆91免费视频| 日本一区免费观看| 国产日韩在线视频| 日韩一级A片| 99热这里只有精品999| 色综合国产| 肏逼网站| 国产婷婷五月| 亚洲性夜夜天天天天天天| 精品无码一区二区三区爱与| A片小视频| 麻豆911| 182在线视频| 无码乱伦AV| 成人片在线| 香蕉AV777XXX色综合一区| 成人免费网站在线观看| 国产欧美精品一区二区三区| 天堂素人| 熟女人妻一区二区三区| 地表最强网红八月未央道具大秀| 人人妻人人躁人人DVD| 亚洲怡春院| www.操逼| 高圆圆一区二区三区| 无码窝在线观看| 操逼毛片| 99精品视频在线免费观看| 久久久久久高清毛片一级| 成人国产精品秘在线看| 国产秘精品区二区三区日本| 欧美夜夜| 亚洲天堂天天| 99草在线视频| 国产va在线观看| 国产性综合| 亚洲AV黄片| 国产高清精品软件丝瓜软件| 翔田千里53歳在线播放| 日韩h视频| 中文字幕视频2023| 黄色视频在线观看| 亚洲精品无码视频在线观看| 韩国高清无码60.70.80| 91热爆在线| www.亚洲成人| 久久草草热国产精| 我和岳m愉情XXXⅩ视频| 神马午夜精品96| 高清在线无码视频| 四虎av在线| 欧美国产在线观看综合| 久久精品导航| 激情网五月天| 亚洲日本一区二区三区| 这里只有精品在线观看| 欧美三级在线播放| 黄色A片免费|