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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

HashMap的实现与优化

發布時間:2023/12/3 编程问答 60 豆豆
生活随笔 收集整理的這篇文章主要介紹了 HashMap的实现与优化 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

轉載自?HashMap的實現與優化

HashMap的優化與實踐

本文是基于作者在github上的Android 問題交流討論壇提問而產生的一篇文章,也是自己早打算開坑的一篇文章。文章首先介紹了hashMap的一些基本知識,然后介紹了它在JDK8下的實現原理,最后著重介紹了幾個面試中處理大數據的方法,文章比較長,我也寫了好久,希望各位能夠讀完并發表意見。

Android 題交流討論壇是開源達人 Trinea 在gitHub上組建的一個討論組織,那里的提問與回答都非常靠譜。

HashMap的復雜度

如圖是ArrayList/LinkedList/HashMap三個數據結構的復雜度對比,可以看出HashMap整體上性能都非常不錯,但是不穩定,為O(N/Buckets),N就是以數組中沒有發生碰撞的元素。

?獲取查找添加/刪除空間?
ArrayListO(1)O(1)O(N)O(N)
LinkedListO(N)O(N)O(1)O(N)
HashMapO(N/Bucket_size)O(N/Bucket_size)O(N/Bucket_size)O(N)

注:發生碰撞實際上是非常稀少的,所以N/Bucket_size約等于1

HashMap是對Array與Link的折衷處理,Array與Link可以說是兩個速度方向的極端,Array注重于數據的獲取,而處理修改(添加/刪除)的效率非常低;Link由于是每個對象都保持著下一個對象的指針,查找某個數據需要遍歷之前所有的數據,所以效率比較低,而在修改操作中比較快。

復雜度是如何考察的?

對于數據結構,在時間上我們需要考察Acessing ,Search, Deletion/Insertion的平均與最差的復雜度。在空間上,我們要考慮維護這個數據結構所占用的內存空間。

常見的數據結構與排序的復雜度都在這里

HashMap的實現

本文以JDK8的API實現進行分析

1. 什么是hash,什么是碰撞?

  • Hash:是一種信息摘要算法,它還叫做哈希,或者散列。我們平時使用的MD5,SHA1,SSL中的公私鑰驗證都屬于Hash算法,通過輸入key進行Hash計算,就可以獲取key的HashCode(),比如我們通過校驗MD5來驗證文件的完整性。
  • 碰撞:好的Hash算法可以出計算幾乎出獨一無二的HashCode,如果出現了重復的hashCode,就稱作碰撞;
<code>&gt;就算是MD5這樣優秀的算法也會發生碰撞,即兩個不同的key也有可能生成相同的MD5。</code>

2. HashMap中是如何實現寫入與讀取的?

HashMap實現了Map接口,保存著K-V這樣的集合。我們以put操作為例

2.1. 對key進行Hash計算

在JDK8中,由于使用了紅黑樹來處理大的鏈表開銷,所以hash這邊可以更加省力了,只用計算hashCode并移動到低位就可以了

12345static final int hash(Object key) {????int h;????//計算hashCode,并無符號移動到低位????return (key == null) ? 0 : (h = key.hashCode()) ^ (h >>> 16);}

下面給出幾個常用的哈希碼的算法。

  • Object類的hashCode.返回對象的內存地址經過處理后的結構,由于每個對象的內存地址都不一樣,所以哈希碼也不一樣。這個是native方法,這個取決于JVM的設計,一般是某種地址的偏移。
  • String類的hashCode.根據String類包含的字符串的內容,根據一種特殊算法返回哈希碼,只要字符串的內容相同,返回的哈希碼也相同。
  • Integer等包裝類,返回的哈希碼就是Integer對象里所包含的那個整數的數值,例如Integer i1=new Integer(100),i1.hashCode的值就是100 。由此可見,2個一樣大小的Integer對象,返回的哈希碼也一樣。
  • int,char這樣的基礎類,它們不需要hashCode,如果需要存儲時,將進行自動裝箱操作,計算方法同上。
  • 2.2. 獲取到當前的位置

    計算了Hash,我們現在要把它插入數組中了

    1i = (tab.length - 1) & hash;

    通過位運算,確定了當前的位置,因為HashMap數組的大小總是2^n,所以實際的運算就是 (0xfff…ff) & hash ,這里的tab.length-1相當于一個mask,濾掉了大于當前長度位的hash,使每個i都能插入到數組中。

    2.3. 生成包裝類

    這個對象是一個包裝類,Node<K,V>,內部有key,value,hash還有next,可以看出來它是一個鏈表。

    1234567static class Node<K,V> implements Map.Entry<K,V> {????????final int hash;????????final K key;????????V value;????????Node<K,V> next;????????//getter and setter .etc.}

    2.4. 插入包裝類到數組

    (1). 如果輸入當前的位置是空的,就插進去,如圖,左為插入前,右為插入后

    12345678910110?????????? 0|?????????? |1 -> null?? 1 - > null|?????????? |2 -> null?? 2 - > null|?????????? | ..-> null?? ..- > null|?????????? | i -> null?? i - > new node|?????????? |n -> null?? n - > null

    (2). 如果當前位置已經有了node,且它們發生了碰撞,則新的放到前面,舊的放到后面,這叫做鏈地址法處理沖突。

    12345678910110?????????? 0|?????????? |1 -> null?? 1 - > null|?????????? |2 -> null?? 2 - > null|?????????? | ..-> null?? ..- > null|?????????? | i -> old??? i - > new - > old|?????????? |n -> null?? n - > null

    我們可以發現,失敗的hashCode算法會導致HashMap的性能下降為鏈表,所以想要避免發生碰撞,就要提高hashCode結果的均勻性。當然,在JDK8中,采用了紅黑二叉樹進行了處理,這個我們后面詳細介紹。

    什么是Hash攻擊?

    通過請求大量key不同,但是hashCode相同的數據,讓HashMap不斷發生碰撞,硬生生的變成了SingleLinkedList

    1234567890|1 -> a ->b -> c -> d(撞!撞!撞!復雜度由O(1)變成了O(N))|2 -> null(本應該均勻分布,這里卻是空的)|3 -> null|4 -> null

    這樣put/get性能就從O(1)變成了O(N),CPU負載呈直線上升,形成了放大版DDOS的效果,這種方式就叫做hash攻擊。在Java8中通過使用TreeMap,提升了處理性能,可以一定程度的防御Hash攻擊。

    3. 擴容

    如果當表中的75%已經被占用,即視為需要擴容了

    1(threshold = capacity * load factor ) < size

    它主要有兩個步驟:

    1. 容量加倍

    左移1位,就是擴大了兩倍,用位運算取代了乘法運算

    12newCap = oldCap << 1;newThr = oldThr << 1;

    2. 遍歷計算Hash

    123456789101112131415161718192021222324252627282930313233343536373839404142434445for (int j = 0; j < oldCap; ++j) {????????????????Node<K,V> e;????????????????//如果發現當前有Bucket????????????????if ((e = oldTab[j]) != null) {????????????????????oldTab[j] = null;????????????????????//如果這里沒有碰撞????????????????????if (e.next == null)????????????????????????//重新計算Hash,分配位置????????????????????????newTab[e.hash & (newCap - 1)] = e;????????????????????//這個見下面的新特性介紹,如果是樹,就填入樹????????????????????else if (e instanceof TreeNode)????????????????????????((TreeNode<K,V>)e).split(this, newTab, j, oldCap);????????????????????//如果是鏈表,就保留順序....目前就看懂這點????????????????????else { // preserve order????????????????????????Node<K,V> loHead = null, loTail = null;????????????????????????Node<K,V> hiHead = null, hiTail = null;????????????????????????Node<K,V> next;????????????????????????do {????????????????????????????next = e.next;????????????????????????????if ((e.hash & oldCap) == 0) {????????????????????????????????if (loTail == null)????????????????????????????????????loHead = e;????????????????????????????????else????????????????????????????????????loTail.next = e;????????????????????????????????loTail = e;????????????????????????????}????????????????????????????else {????????????????????????????????if (hiTail == null)????????????????????????????????????hiHead = e;????????????????????????????????else????????????????????????????????????hiTail.next = e;????????????????????????????????hiTail = e;????????????????????????????}????????????????????????} while ((e = next) != null);????????????????????????if (loTail != null) {????????????????????????????loTail.next = null;????????????????????????????newTab[j] = loHead;????????????????????????}????????????????????????if (hiTail != null) {????????????????????????????hiTail.next = null;????????????????????????????newTab[j + oldCap] = hiHead;????????????????????????}????????????????????}????????????????}????????????}

    由此可以看出擴容需要遍歷并重新賦值,成本非常高,所以選擇一個好的初始容量非常重要。

    如何提升性能?

  • 解決擴容損失:如果知道大致需要的容量,把初始容量設置好以解決擴容損失;
    比如我現在有1000個數據,需要 1000/0.75 = 1333 ,又 1024 < 1333 < 2048,所以最好使用2048作為初始容量。
  • 解決碰撞損失:使用高效的HashCode與loadFactor,這個…由于JDK8的高性能出現,這兒問題也不大了。
  • 解決數據結構選擇的錯誤:在大型的數據與搜索中考慮使用別的結構比如TreeMap,這個就是積累了,一般需要key排序時,建議使用TreeMap;
  • HashMap與HashTable的主要區別

    在很多的Java基礎書上都已經說過了,他們的主要區別其實就是Table加了線程同步保護

    • HashTable線程更加安全,代價就是因為它粗暴的添加了同步鎖,所以會有性能損失。
    • 其實有更好的concurrentHashMap可以替代HashTable

    JDK8中HashMap的新特性

    如果某個桶中的鏈表記錄過大的話(當前是TREEIFY_THRESHOLD = 8),就會把這個鏈動態變成紅黑二叉樹,使查詢最差復雜度由O(N)變成了O(logN)。

    12345678910111213//e 為臨時變量,p為當前的鏈for (int binCount = 0; ; ++binCount) {????if ((e = p.next) == null) {????????p.next = newNode(hash, key, value, null);????????if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st????????????treeifyBin(tab, hash);????????break;????}????if (e.hash == hash &&????????((k = e.key) == key || (key != null && key.equals(k))))????????break;????p = e;}

    JDK8在其他地方也有提升,更多的可以看這里。

    HashMap的裝箱空間效率

    在筆試題中,一般“內存”是完全能夠使用的,而在現實中HashMap空間效率之低,你卻不一定知道。

    比如定義了一個?HashMap<Long,Long>

    1. Long的裝箱

    在對象頭中,加入額外的指針8Bype,加入8Bype的MarkWord(hashcode與鎖信息),這里就是16Byte

    也就是說,long在裝箱后,效率為 8/24 = 1/3

    2. Map.Entry的裝箱

    字段空間: hash(4) + padding(4) + next(8) = 16Byte,這里的padding是字節對齊

    對象頭: 16Byte,指針+MarkWord

    也就是說,維護一個Entry需要32Byte的空間

    1234567static class Node<K,V> implements Map.Entry<K,V>{??? ????final int hash;??? ????final K key;??? ????V value;??? ????Node<K,V> next;}

    3. 總效率

    8/(24 + 32) = 1/7

    計算結果可能有差異,本文主要在強調裝箱過程造成的損失

    在Android中使用SparseArray代替HashMap

    官方推薦使用SparseArray([spɑ:s] [?'re?],稀疏的數組)或者LongSparseArray代替HashMap,目前國內好像涉及的比較少,容我先粘貼一段

    Note that this container keeps its mappings in an array data structure, using a binary search to find keys. The implementation is not intended to be appropriate for data structures that may contain large numbers of items. It is generally slower than a traditional HashMap, since lookups require a binary search and adds and removes require inserting and deleting entries in the array.

    For containers holding up to hundreds of items, the performance difference is not significant, less than 50%.
    To help with performance, the container includes an optimization when removing keys: instead of compacting its array immediately, it leaves the removed entry marked as deleted. The entry can then be re-used for the same key, or compacted later in a single garbage collection step of all removed entries. This garbage collection will need to be performed at any time the array needs to be grown or the the map size or entry values are retrieved.

    總的來說就是:

    • SparseArray使用基本類型(Primitive)中的int作為Key,不需要Pair<K,V>或者Entry<K,V>這樣的包裝類,節約了內存;
    • SpareAraay維護的是一個排序好的數組,使用二分查找數據,即O(log(N)),每次插入數據都要進行排序,同樣耗時O(N);而HashMap使用hashCode來加入/查找/刪除數據,即O(N/buckets_size);
    • 總的來說,就是SparseArray針對Android嵌入式設備進行了優化,犧牲了微小的時間性能,換取了更大的內存優化;同時它還有別的優化,比如對刪除操作做了優化;
    • 如果你的數據非常少(實際上也是如此),那么使用SpareArray也是不錯的;

    在筆試中的使用

    1. 查重與分組問題

    某公司正在做一個尋找走失兒童的公益項目,現在有一個函數,可以輸入兩個圖片,并返回這個兒童是否重復。請你設計一個系統,幫助他們尋找兒童。

  • 網友可以同時上傳一批圖片
  • 系統能夠把所有圖片分類并歸為一組
  • 網友上傳圖片后,網頁要盡快返回該照片所在的組。
  • A:假設你現在有一個機器,請寫出你的數據結構與處理流程,設計的思路。
    B:如果你有多臺機器,如果縮短請求的時間?

    A:我們可以把它分解為兩個部分,一個是數據結構一個是上傳流程。

    (1). 對于數據結構來說,一個是對兒童信息進行包裝,另一個是實現兒童信息的高效查找。對于兒童信息包裝類來說,除了加入兒童的圖片,姓名,生日等基本信息外,特別要注意重寫equals與hashCode,這個equals就是題目所說的比較函數。對于查找的實現來說,首先我們建立一個HashSet,用于存儲兒童信息。網友上傳后,服務器通過對圖像計算出特征Hash值,并查Hash表,如果HashCode相同,則返回所在的組;如果不相同,就加入hash表中。(2). 對于多圖上傳問題,使用生產者-消費者阻塞隊列就可以實現盡快的依次返回照片所在的組。

    B:

  • 考慮將Hash計算后取余,分配給其他計算機進行存儲與查詢,我就想到這一個…..其它的嘛,大家幫我想想。
  • 常規做法,Select反代,管道回調
  • TOP10的實現

    搜索引擎會通過日志文件把用戶每次檢索使用的所有檢索串都記錄下來,每個查詢串的長度為1-255字節。
    假設目前有一千萬個記錄(這些查詢串的重復度比較高,雖然總數是1千萬,但如果除去重復后,不超過3百萬個。一個查詢串的重復度越高,說明查詢它的用戶越多,也就是越熱門。),請你統計最熱門的10個查詢串,要求使用的內存不能超過1G。

    這個題目與上個題目類似,我們選擇使用HashMap,key為查詢值,val為計數,內存使用為 3 * 256 M == 768M < 1G,然后我們不斷的put就可以了,偽代碼

    1234567HashMap<String, Integer> map = new HashMap<String,Integer>();//如果內存再多點的話,我們就可以把初始化容量湊個1024的整數,減少擴容損失。while(fileLog.hasNext()){????String queue = fileLog.next();????map.put(queue, map.get(queue) + 1);}

    接著使用堆排序遍歷即可,堆的大小為10,復雜度為10xO(LogN)。

    綜上,O(10^7) +10 * O(Log(3×10^6));

    使用WeakHashMap作為緩沖

    在動態代理等耗時操作中,為了實現復用,使用了HashMap實現緩存,下面的一個例子是Picasso的Transformation操作

    123456789101112131415161718192021222324252627public final class PaletteTransformation implements Transformation {????private static final PaletteTransformation INSTANCE = new PaletteTransformation();????private static final Map<Bitmap, Palette> CACHE = new WeakHashMap<>();????public static PaletteTransformation instance() {????????return INSTANCE;????}????public static Palette getPalette(Bitmap bitmap) {????????return CACHE.get(bitmap);????}????private PaletteTransformation() {????}????@Override????public Bitmap transform(Bitmap source) {????????Palette palette = Palette.generate(source);????????CACHE.put(source, palette);????????return source;????}????@Override????public String key() {????????return "PaletteTransformation";????}}

    附錄一:集合中元素的排序方式:

    剛剛對比SparseArray與HashMap,我怕各位繞進去了,講下Java中集合的排序方式

    • 按照添加/刪除的順序,比如FIFO,FILO,常見的比如Queue,Stack就是按照這個順序實現的;
    • 按照Hash表進行排序,比如HashMap的table中的元素是通過hash運算隨機均勻排列的(至少理論上是),可以通過計算Key的Hash值快速查找到Value
    • 按照自定義的排序,比如按照數字大小,拼音首字母排序,常見的有線性順序表,二叉查找樹,以及高度封裝好的TreeMap,它們需要實現Comaparable接口以進行進一步的自定義CompareTo操作。

    附錄二:hashCode, == ,equals, Comparable的區別?

    • == : 這個就是內存地址的比較,從C語言開始我們就知道這個了。
    • hashCode/equals:對于Object來說,hashCode就是地址的取樣運算,而equals就是判斷地址是否相同;在實際使用中,特別是在集合(Set)中,特別是HashSet,為了防止插入的是兩個相同的值,我們更注重內容上的對比而不是地址的對比,需要通過計算hashCode來判斷是否equals,所以兩個方法要同時重寫,比如String。
    • Comparable: 在集合需要排序(SortSet)的情況下,就需要給對象實現Comparable接口,比如TreeMap。這個在Android開發中實際需要手動寫的情況并不多,畢竟包多,在ORM框架中一般都幫你寫好了。

    HashMap在Android項目中的使用

  • Bundle與Parcelable,實際上就是Android中對HashMap與Serializable的接口實現(當然底層已經是IPC了);
  • 反射時使用WeakReference做緩存,比如Retrofit等動態代理框架;
  • 廣播的底層結構是HashMap<IBinder, ReceiverList>;
  • 后記

    看這種JDK源碼又累又欣賞,特別是if((n.next=p) != null)這樣的代碼頻頻出現卻忘了運行順序,說明了自己的基礎不足(然并卵,現在已經能寫出這種WTF的代碼了)。這是我第一次寫分析而不是寫過程,希望有問題能夠提出,無論是文章排版還是技術上的問題都可以提出來。

    最后打個廣告
    我目前正在準備技術面試,所以關于Java所有的文章有個總結,不妨關注一下。

    Reference

  • http://bigocheatsheet.com/
  • https://github.com/android-cn/android-discuss
  • http://www.ibm.com/developerworks/cn/java/j-jtp08223/
  • http://www.jianshu.com/p/9a48bcbdfece
  • http://www.jianshu.com/p/4e13fcdf9ab5
  • http://blog.csdn.net/zimo2013/article/details/39692245
  • http://coderbee.net/index.php/java/20131018/519
  • http://www.guokr.com/blog/747926/
  • http://blog.csdn.net/v_JULY_v/article/details/6256463

  • 總結

    以上是生活随笔為你收集整理的HashMap的实现与优化的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    国产一区二区三区久久久 | 国产日韩精品一区二区三区 | 偷拍福利视频一区二区三区 | 免费高清在线观看成人 | 久久综合九色99 | 日日夜夜网 | av一级免费| 久久久国产精品成人免费 | 五月天色丁香 | 玖玖玖国产精品 | 成+人+色综合 | 久久久久亚洲精品中文字幕 | 正在播放五月婷婷狠狠干 | 国产精品影音先锋 | 国产精品久久久久久久毛片 | 国产精品h在线观看 | 五月天综合婷婷 | 久久综合五月 | 精品久久久久久久久久岛国gif | 国产成本人视频在线观看 | 香蕉久久久久久久 | 午夜在线观看 | 婷婷国产精品 | 日本乱码在线 | a视频免费在线观看 | 国产精品18久久久久vr手机版特色 | 性日韩欧美在线视频 | 六月丁香婷婷久久 | 天天操天天添 | 日本精品免费看 | 日本资源中文字幕在线 | 中文字幕有码在线 | 欧美在线日韩在线 | 亚洲精品高清一区二区三区四区 | 国产xx视频 | 色婷婷a | 成年人在线观看 | 天天操夜夜操天天射 | 国产精品永久免费观看 | 免费视频久久 | 天天色天天爱天天射综合 | 婷婷资源站 | 天堂视频中文在线 | 亚洲欧洲中文日韩久久av乱码 | 久久久久久久久亚洲精品 | 69夜色精品国产69乱 | 国产精品都在这里 | 精品99在线 | 中文字幕av免费观看 | 99爱视频 | 国产视频日本 | 国产精品乱码久久久久久1区2区 | 97色免费视频 | 超碰97av在线 | 人人爽人人干 | 欧美激情精品一区 | 69国产盗摄一区二区三区五区 | 欧美黑人巨大xxxxx | 成人免费精品 | 狠狠做深爱婷婷综合一区 | 日韩中文字幕视频在线观看 | 99精品免费久久久久久日本 | 久久精品观看 | 久久精品99国产国产精 | 日韩成人精品一区二区三区 | 亚洲资源| av观看在线观看 | 亚洲天天 | aⅴ视频在线 | 99久久久久久久久久 | 一区二区三区四区五区在线 | 探花视频在线版播放免费观看 | 久久婷婷开心 | 免费在线观看av网址 | 麻豆mv在线观看 | 国产精品一区二区中文字幕 | 国产视频一区二区在线播放 | 日本夜夜草视频网站 | av一区二区在线观看中文字幕 | 久久成人午夜 | 国产精品系列在线播放 | 亚洲成a人片在线观看网站口工 | 一二三区在线 | 亚洲天堂香蕉 | 欧美资源| 久久与婷婷 | 欧美韩日视频 | 日韩在线观看第一页 | 在线看黄色av | 最近中文字幕国语免费高清6 | 中文字幕在线免费看 | 欧美一区二区三区四区夜夜大片 | 欧美大码xxxx | 国产精品综合久久久久久 | 成人国产精品久久久 | 在线免费观看国产黄色 | 成年人免费av | 久久福利在线 | 麻豆传媒一区二区 | 国产一区二区精品久久91 | 久久久久免费视频 | 国产精品v欧美精品v日韩 | 天天爽综合网 | 久久视频国产精品免费视频在线 | 狠狠综合| 91麻豆精品国产91久久久无限制版 | 欧美日韩性视频在线 | 四虎在线免费观看视频 | 天天干天天草天天爽 | 丁香六月激情 | www.伊人网| 波多野结衣久久资源 | 夜夜嗨av色一区二区不卡 | 欧美日韩国内在线 | 永久免费在线 | 日本精品中文字幕 | 精品国产乱码久久久久久1区2匹 | 精品av在线播放 | 国内外成人免费在线视频 | 久久成人一区二区 | 黄污网站在线观看 | 91精品亚洲影视在线观看 | 亚洲春色综合另类校园电影 | 日日日干| 97操操操| 91探花在线视频 | 久久五月婷婷丁香社区 | 国产 一区二区三区 在线 | 日韩综合视频在线观看 | 91成人精品观看 | 麻豆一区二区三区视频 | 中文av在线免费观看 | 免费在线一区二区 | 欧美日韩精品在线视频 | 久久精品中文视频 | 99这里只有久久精品视频 | 国产日产精品一区二区三区四区的观看方式 | 97天堂网 | 久久久国产视频 | 四虎最新域名 | 黄污网站在线 | 久操免费视频 | 蜜桃麻豆www久久囤产精品 | www日韩在线观看 | 天天色天天射综合网 | 欧美日韩一区三区 | 中文字幕第一页在线视频 | 国产视频精品久久 | 看片网站黄 | 国产麻豆精品95视频 | 黄色福利视频网站 | 国产九色91 | 国产不卡免费 | 色婷婷狠狠五月综合天色拍 | 在线观看一区二区精品 | 99精品在线看 | 五月婷婷久久综合 | 在线视频久久 | 美女视频黄在线观看 | 国产成人久久精品一区二区三区 | 成人国产精品 | 日本成人中文字幕在线观看 | 激情综合网天天干 | 婷婷中文字幕在线观看 | 久久久久久久影视 | 草久电影| av不卡中文 | www.婷婷色 | 色www免费视频| 97视频入口免费观看 | 久久看片网 | 日韩有色 | 三级av在线 | 爱爱一区 | 亚洲精品高清在线 | 久久夜色精品国产欧美乱极品 | 国产特级毛片aaaaaa毛片 | 91手机电视 | 亚洲精品国产第一综合99久久 | 人人爽人人爽人人爽学生一级 | 欧美日韩精品免费观看视频 | 人人爱人人射 | 国产精品久久99综合免费观看尤物 | 在线综合色| www.夜夜爱 | 久久国产高清视频 | 激情婷婷丁香 | 在线免费观看欧美日韩 | 国产精品高潮呻吟久久久久 | 视频成人永久免费视频 | 色综合天天天天做夜夜夜夜做 | 蜜臀av麻豆 | 亚洲在线视频免费 | 成人午夜电影在线观看 | 日韩高清三区 | av在线进入 | 国产精品初高中精品久久 | 91亚洲国产| 国产精品女同一区二区三区久久夜 | 97精品在线| 97国产超碰在线 | 国产一级视频在线免费观看 | 国产精品3 | 亚洲日本中文字幕在线观看 | 国产三级视频在线 | 亚洲欧洲国产视频 | 亚洲欧美婷婷六月色综合 | 人人爽人人看 | 国产色网| 欧美一区二区免费在线观看 | 亚洲精品国产精品国自产观看 | 国产成人免费精品 | 在线播放91| 午夜精品av | 97免费| 成人久久免费 | 欧美精品色 | 91黄在线看| 国产69精品久久99不卡的观看体验 | 精品一二区 | 精品91在线 | 免费高清在线视频一区· | 久久久男人的天堂 | 亚洲精品午夜久久久久久久 | 久久精品视频在线观看 | 日p视频 | 国产高清在线不卡 | 天天色天天色天天色 | 亚洲综合成人专区片 | 欧美一级片在线播放 | 97超碰资源站 | 中文久草 | 69性欧美| 中文av网站| 日韩欧美亚州 | 欧美成天堂网地址 | 久久人人97超碰精品888 | 欧美日一级片 | 色偷偷男人的天堂av | 日韩免费看片 | 成人av午夜 | 天天操天天干天天操天天干 | 国产亚洲精品成人av久久影院 | av亚洲产国偷v产偷v自拍小说 | 久久久午夜电影 | 亚洲天堂在线观看完整版 | 91高清免费在线观看 | 国产精品99久久久精品免费观看 | 91精品视频在线观看免费 | 国产视频色 | 久久99精品一区二区三区三区 | 国产老熟 | 香蕉影院在线 | 亚洲欧洲国产日韩精品 | 国产免费三级在线观看 | 欧美 日韩 久久 | 永久免费在线 | 在线看av的网址 | 黄色三几片| 91人人澡人人爽人人精品 | 99国产成+人+综合+亚洲 欧美 | 99视频这里有精品 | 超碰在线98| 97人人澡人人添人人爽超碰 | 日韩免费视频网站 | 欧美va日韩va | 91成人精品一区在线播放69 | 欧美日韩高清在线观看 | 91在线看网站 | 婷婷六月丁 | 狠狠色狠狠色 | 伊甸园永久入口www 99热 精品在线 | 99热在线精品观看 | 国产一区福利在线 | 久久久久99精品成人片三人毛片 | 午夜精品99久久免费 | 亚洲区视频在线 | 国产黄色在线看 | 日韩激情中文字幕 | 波多野结衣视频一区二区三区 | 人人舔人人插 | 国产综合精品一区二区三区 | 国产精品美女久久久网av | 人人插人人艹 | 麻豆视频免费观看 | 国产男女免费完整视频 | 在线小视频 | 91av九色 | av大全免费在线观看 | 日韩av一区二区在线影视 | 久久精品亚洲综合专区 | 免费碰碰 | 中文字幕日韩国产 | 久久国产网站 | 国产精品一区二区三区在线 | 深爱婷婷 | 日韩在线观看视频免费 | 美女网站黄在线观看 | 久久久精品免费看 | 国产精品免费在线播放 | 夜夜躁天天躁很躁波 | 欧美色图另类 | 中文字幕日韩国产 | 在线 国产 亚洲 欧美 | 国产手机在线 | 久久最新 | 激情五月婷婷丁香 | 日韩欧美精选 | 日日干网址 | 99精品视频一区二区 | 亚洲三级在线播放 | 久久精品视频在线看 | 色干干 | 国产资源免费 | 九九在线精品视频 | 久久婷婷激情 | 一区二区三区免费在线观看视频 | 日韩av女优视频 | 成人av资源站 | 小草av在线播放 | 国产精品久久久久久久免费 | 国产综合小视频 | 91精品国产自产老师啪 | 亚洲午夜av久久乱码 | 91成人网页版 | 91九色视频观看 | 在线之家免费在线观看电影 | 精品自拍sae8—视频 | 国产成人一区二区三区影院在线 | 久久精品久久99 | av成人资源| 国产精品亚洲片夜色在线 | 973理论片235影院9 | 999久久久久久久久 69av视频在线观看 | 成人av久久 | 精品视频免费观看 | av福利在线导航 | 男女激情免费网站 | 最近中文字幕国语免费av | 右手影院亚洲欧美 | 免费高清影视 | 视频国产一区二区三区 | 色综合久久久久久久 | 在线观看国产麻豆 | 99久久国产免费免费 | 欧美乱码精品一区 | 美女免费网视频 | 五月婷网站| 在线日本v二区不卡 | 精品国产一区二区三区久久久久久 | 国产精品情侣视频 | 亚洲精品中文字幕在线 | 国产一区二区三精品久久久无广告 | 亚洲国产精品第一区二区 | 日韩特黄av| 综合在线色 | 91九色视频在线观看 | 色小说在线 | 久草在线手机视频 | 中文字幕在线免费观看 | 97超碰资源站 | 精品九九九 | 国产 中文 日韩 欧美 | 天天干,夜夜操 | 欧美日韩精品在线一区二区 | av一区二区在线观看中文字幕 | 日韩免费三区 | 亚洲午夜精品久久久久久久久久久久 | 亚洲欧美日韩不卡 | 亚洲精品成人 | 一级性生活片 | 国产精品久久久久久久久久久久午夜 | 在线看黄网站 | 又黄又爽又湿又无遮挡的在线视频 | 97网| 久久精品中文字幕一区二区三区 | 91自拍视频在线观看 | 日韩理论 | 91av免费观看 | 欧洲亚洲女同hd | 久久国产精品久久久久 | 久草免费新视频 | 亚洲精品美女久久17c | av综合网址| 精品久久久久久亚洲 | 日韩一级成人av | 亚洲综合色av | 国产精品视频久久 | 日韩免费在线观看视频 | 少妇高潮冒白浆 | 91一区二区三区久久久久国产乱 | 欧美午夜激情网 | 91最新视频 | 国产精品久久久久三级 | 激情视频区 | 亚洲在线色 | 欧美午夜精品久久久久 | 中文字幕网站视频在线 | 91av国产视频 | 久黄色| 久久久精品国产免费观看同学 | 美女在线观看网站 | 久久久久电影网站 | 久久久亚洲精华液 | 欧美一区二区三区免费观看 | 婷婷福利影院 | 久久精品视频4 | 国产精品原创视频 | 色多多视频在线观看 | 三级av片 | 91香蕉视频在线 | 国产精品激情偷乱一区二区∴ | 操综合| 久操久 | 亚洲区视频在线观看 | 中文字幕在线网 | 久久精品视频日本 | 久久不射网站 | www.av免费| 99精品视频免费在线观看 | 国产一在线精品一区在线观看 | 日韩av免费在线看 | 免费日韩一区二区三区 | 天天干,天天干 | 国产99精品| 97成人在线观看视频 | 色婷婷激情网 | 四虎在线观看视频 | 99热在线观看 | 国产专区第一页 | 国产黄在线播放 | 午夜精品一区二区三区视频免费看 | 夜夜爽天天爽 | 一级做a视频 | 97在线免费视频观看 | 不卡的av在线播放 | 欧美日韩不卡在线 | 九九天堂 | 日本精品视频在线观看 | 久久视频在线 | 91欧美精品| 人人爽久久久噜噜噜电影 | 成人毛片100免费观看 | 国产日韩欧美中文 | 在线看片视频 | 狠狠的干狠狠的操 | 国产视频一区在线播放 | 国产韩国精品一区二区三区 | 成年人视频在线免费观看 | 日韩午夜在线 | 日本黄色免费网站 | 人人干狠狠操 | 91九色pron| 黄色福利视频网站 | 国产码电影 | 欧美精品网站 | 中文字幕黄色 | 国产成人黄色 | 午夜日b视频 | 91麻豆精品国产91久久久无限制版 | 久草免费在线 | 国产a免费 | 91| 91大神精品视频在线观看 | 日日干av| 五月天中文在线 | 日韩中文字幕在线不卡 | 中文在线a√在线 | 天天综合网国产 | 欧美日韩免费一区二区 | 欧美乱淫视频 | 一区三区视频在线观看 | 婷久久 | 三级黄色欧美 | 国产成人精品免高潮在线观看 | 精品久久免费看 | 久久精品视频99 | 岛国片在线 | 国色天香永久免费 | 激情综合亚洲 | 国产精品高清一区二区三区 | 婷婷爱五月天 | 日韩a欧美 | 五月婷婷一区 | 去干成人网 | 精品视频国产一区 | 韩国av永久免费 | 国内久久 | 国产免码va在线观看免费 | 亚洲狠狠| 国产第一福利 | 色成人亚洲 | av三级av| av在线最新 | 国产剧情在线一区 | 久久精品麻豆 | 色a在线观看 | www.夜夜干.com| 日本黄区免费视频观看 | 在线黄色观看 | 九九免费精品视频在线观看 | 久久国产片 | 国产 亚洲 欧美 在线 | 超碰在线个人 | 男女啪啪网站 | 91片黄在线观看动漫 | 青青河边草免费视频 | 国产精品欧美 | 久久久精品免费看 | 三级av在线 | 亚洲精品av中文字幕在线在线 | 久久久久免费电影 | 国产精品18毛片一区二区 | 新版资源中文在线观看 | 国产精品美女久久久 | 国产999精品久久久 免费a网站 | 超碰在线97免费 | 国产亚洲精品电影 | 天天久久综合 | 亚洲精品1234区 | 精品久久1| 欧美欧美 | 中文字幕日韩高清 | 精品在线观 | 97超级碰碰碰视频在线观看 | 亚洲激情六月 | 国产97碰免费视频 | 国产免费黄视频在线观看 | 日韩高清一 | 国产91亚洲| 久久网址 | 日韩视频在线观看视频 | 久久综合色播五月 | 麻豆久久精品 | 国产一区免费在线观看 | 国产色婷婷 | 国产成人精品午夜在线播放 | 免费看片成年人 | 欧美另类xxx | 国产在线超碰 | 一区二区三区四区五区在线视频 | 欧美性极品xxxx做受 | 波多野结衣一区三区 | 久久久高清 | 欧美成人免费在线 | 天天射天天干天天插 | 天堂在线一区二区三区 | 亚洲午夜不卡 | 啪啪小视频网站 | 久久99亚洲网美利坚合众国 | 亚洲精品永久免费视频 | 麻豆91在线播放 | 国产99久久久精品 | 日韩视频图片 | 久久精品一二三区 | 天堂中文在线播放 | 在线观看中文字幕av | 成人黄色小说在线观看 | 国内精品久久久久久久久久清纯 | 国产精品久久久久av福利动漫 | 国产精品6| 久久视频网址 | 亚洲精品国偷自产在线99热 | 爱色婷婷| 精品国产伦一区二区三区免费 | 在线观看国产 | 五月天综合网站 | 国产成人精品一区二区三区网站观看 | 人人舔人人干 | 懂色av懂色av粉嫩av分享吧 | 国产录像在线观看 | 伊人午夜视频 | 久久免费精品国产 | 天天天干天天射天天天操 | 国产一级免费视频 | 狠狠干婷婷色 | 国产精品免费麻豆入口 | 日韩高清三区 | 五月综合色婷婷 | 亚洲欧美成人在线 | 狠狠干我 | 黄色a视频 | 久久久久国产一区二区三区四区 | 亚洲精品美女在线 | 日韩一级成人av | 国产成人免费高清 | 国产高清精品在线观看 | 美女免费网视频 | 啪啪免费试看 | 天天操福利视频 | 亚洲视频 视频在线 | 久久99精品国产91久久来源 | 久久久视屏 | 色婷婷视频在线 | www色婷婷com| 天天干天天干天天射 | 九九九九免费视频 | 免费视频区 | www四虎影院 | av一级免费 | 国内精品一区二区 | 日韩中文字幕免费在线观看 | 在线精品视频免费播放 | 中字幕视频在线永久在线观看免费 | 国产在线精品二区 | 在线观看av黄色 | 日韩在线在线 | 黄色三级在线观看 | 九色在线视频 | 国产精品久久久一区二区三区网站 | 久久av黄色| 日本精品一二区 | 欧美激情精品久久久久久变态 | 91在线小视频 | a级片网站 | 99久久这里只有精品 | 久草视频在线看 | 国产一区二区三区 在线 | 天堂av在线网址 | 在线观看视频精品 | 国产福利91精品张津瑜 | 蜜桃av综合网 | av片在线观看免费 | 国产高清 不卡 | 免费观看性生交大片3 | 久久久久激情 | 永久免费在线 | 中文字幕在线乱 | 啪嗒啪嗒免费观看完整版 | 91av电影在线 | 国产玖玖在线 | 成年人在线观看 | 亚洲综合色网站 | 免费视频久久久 | 国产精品99久久久久久小说 | 激情喷水| 五月天激情视频在线观看 | 日韩精品视频免费在线观看 | 深爱婷婷网 | 在线99| 亚洲天堂精品视频在线观看 | 粉嫩av一区二区三区四区在线观看 | 国产精品影音先锋 | 日日夜精品| 深爱开心激情网 | 99免费在线观看 | 国产福利91精品一区 | 精品久久久久久综合 | 免费看成人a | 日韩国产精品久久久久久亚洲 | 中文字幕在线资源 | 精品国偷自产在线 | 久久精品久久久久 | 粉嫩一区二区三区粉嫩91 | 久久国产热视频 | av大片网站 | 永久黄网站色视频免费观看w | 超碰在线免费福利 | 国产精品刺激对白麻豆99 | 久久精品国亚洲 | 91av视频观看| 日韩免费二区 | 夜夜骑首页 | 国产成年人av | 国产精品日韩在线观看 | 欧美大荫蒂xxx | 69久久99精品久久久久婷婷 | 久久精品国产99国产 | 久久狠狠一本精品综合网 | 国产精品av免费 | 国产麻豆成人传媒免费观看 | 人人澡澡人人 | 亚洲 欧洲 国产 精品 | 三上悠亚一区二区在线观看 | 深爱激情五月网 | 国产在线永久 | 久久久久免费网 | 免费人成网 | 婷婷五月色综合 | 精品美女久久久久久免费 | 亚洲精选久久 | 日韩av免费一区二区 | 欧美日韩中 | 亚洲成人av在线播放 | 五月天婷婷在线观看视频 | 欧美日韩性生活 | 日韩精品一区二区三区丰满 | 乱子伦av| 亚洲伊人网在线观看 | www欧美日韩 | 精品国产乱码一区二 | 久久艹国产 | 久久人人爽人人爽人人 | 一级做a爱片性色毛片www | 婷婷国产在线 | 99国产精品久久久久久久久久 | 黄色电影在线免费观看 | 国产精品久久久久久久久久ktv | 天天干天天操av | 国产少妇在线观看 | 97超视频在线观看 | 九九热在线精品视频 | 二区三区在线视频 | 亚洲三级av | 精品国产成人在线 | 国产精品视频久久久 | 亚洲精品在线电影 | 91在线欧美 | 青青河边草观看完整版高清 | 国产福利一区二区三区视频 | 一区二区三区在线视频观看58 | 久久夜夜爽 | 久青草影院 | 久久久久免费精品国产小说色大师 | 国产精品9999久久久久仙踪林 | 久久国产午夜精品理论片最新版本 | 一区二区三区在线播放 | 中文字幕免费高清在线 | 91高清免费观看 | 超碰人人在线观看 | 免费av视屏 | 六月天综合网 | 国产精品久久久久久999 | 91av在线国产 | 日批视频在线播放 | 欧美少妇xx | 免费在线观看av的网站 | 日韩精品视频免费在线观看 | 成人免费看视频 | 天天操天天色天天射 | 国产精品黄色影片导航在线观看 | 久久免费视频5 | 成年人黄色av | 中文字幕视频一区二区 | 91视频高清免费 | 亚洲人人射| 久久99热这里只有精品 | 在线观看日韩视频 | 国产色在线 | 欧美日韩首页 | 五月婷婷网站 | 精品在线99 | 中文在线字幕免费观看 | 免费网站v| 日韩1页 | 黄色a视频 | 五月天久久久久久 | 草免费视频 | 亚洲 中文 欧美 日韩vr 在线 | 亚洲免费精彩视频 | 国产亚洲精品免费 | 午夜久久精品 | 日韩亚洲在线观看 | 色欲综合视频天天天 | 99国产精品久久久久久久久久 | 久草青青在线观看 | 91最新在线观看 | 在线观看黄色免费视频 | 日韩av二区 | 麻豆91精品 | 欧美日韩一区二区视频在线观看 | 日韩免费三区 | 久久国精品 | 人人爱天天操 | 中文亚洲欧美日韩 | 国产亚洲综合精品 | 亚洲精品国偷拍自产在线观看蜜桃 | 成人av网站在线 | 日韩高清二区 | 成人v| 国产一区在线播放 | 一本一本久久a久久 | 欧美一级乱黄 | 最新中文在线视频 | 美女黄频网站 | 视频国产精品 | 久久久久久久久久久高潮一区二区 | av福利在线| 久久视频在线看 | 欧美日韩免费网站 | 日韩久久视频 | 在线免费观看视频一区 | av电影中文字幕在线观看 | www.色com| 国精产品999国精产 久久久久 | 日韩视频一区二区在线 | 96精品视频 | 天天操天天综合网 | 日韩在线视频免费播放 | 日韩网站免费观看 | 婷婷午夜激情 | 91最新国产| 丁香六月综合网 | 成人黄色在线观看视频 | 亚洲国产免费看 | 国产精品嫩草69影院 | www.久草视频| 日产乱码一二三区别在线 | 黄色一区二区在线观看 | 四虎天堂| 人人插人人插 | 麻豆传媒视频在线播放 | 国产精品嫩草影院9 | 97精品国自产拍在线观看 | 亚洲视屏在线播放 | 国内少妇自拍视频一区 | 色婷婷精品| av导航福利 | 国产字幕在线播放 | 日本在线视频一区二区三区 | 狠狠狠操 | 天天做日日做天天爽视频免费 | 国产精品不卡在线播放 | 免费在线观看av的网站 | 色偷偷88888欧美精品久久久 | 天天操天天射天天爱 | 最新国产精品久久精品 | 久久首页 | 欧美色噜噜 | 国产精品久久久网站 | 亚洲综合色激情五月 | 亚洲另类久久 | 2019中文字幕第一页 | 国产精品久久久久久久免费观看 | 国产不卡一 | 色综合久久综合中文综合网 | 日日夜夜操操操操 | 久久再线视频 | 免费在线观看日韩 | 人人澡视频 | 夜夜夜夜夜夜操 | 婷婷新五月 | 91香蕉视频在线下载 | 91麻豆视频 | 99久久99| 2019中文在线观看 | 久久久国产一区二区三区 | 久草网站在线观看 | 免费又黄又爽 | 国产一区视频在线播放 | 天天爱天天舔 | 日本中文字幕在线观看 | 免费在线观看av网站 | 天天操 夜夜操 | 中文国产在线观看 | 国产尤物一区二区三区 | 色婷婷免费视频 | 18性欧美xxxⅹ性满足 | 久久久久伊人 | 日日干影院 | 午夜电影av | 欧美另类sm图片 | 激情欧美一区二区三区 | 午夜久久成人 | 国产精品麻豆果冻传媒在线播放 | 国产在线观看污片 | 91丨九色丨勾搭 | 国产视频日韩视频欧美视频 | 天天色天天艹 | 久久99精品久久久久久清纯直播 | 国产婷婷色 | 99久久精品国产亚洲 | 玖玖视频国产 | 深夜免费小视频 | 日韩欧美精品在线 | 精品av在线播放 | 99精品免费久久久久久久久日本 | 成人网中文字幕 | 国产999精品久久久久久绿帽 | 又湿又紧又大又爽a视频国产 | 国产黄色片免费观看 | 天堂久久电影网 | 精品久久久久一区二区国产 | 亚洲精品视频在线播放 | 久久伊99综合婷婷久久伊 | 天天操天天操天天操天天操天天操 | 精品综合久久 | 亚洲成人免费在线观看 | 亚洲一级性 | 欧美日韩中文国产一区发布 | 日韩手机在线观看 | 五月亚洲| 在线视频黄 | 97精品国自产拍在线观看 | 成人影片免费 | 日韩精品中文字幕久久臀 | 日韩狠狠操 | 超碰人人乐 | 免费99精品国产自在在线 | 伊人精品在线 | 欧美日韩一区二区在线观看 | 婷婷色在线播放 | 娇妻呻吟一区二区三区 | 日韩网站免费观看 | 99久久99| 成人久久毛片 | 视频在线日韩 | 中中文字幕av在线 | 日韩理论电影在线 | 在线天堂8√ | www.狠狠插.com | 国产精品女同一区二区三区久久夜 | 狠狠干网 | 久久久综合九色合综国产精品 | 国产精品成人一区二区三区吃奶 | 久久久久久久久久久国产精品 | 国产亲近乱来精品 | 国产黄色大片免费看 | 天天躁天天操 | 91自拍视频在线观看 | 亚洲国产成人在线播放 | 中文字幕在线播放第一页 | 黄网站免费大全入口 | 97超碰在 | 国产精品久久久久永久免费看 | 欧亚日韩精品一区二区在线 | 久久国产精品二国产精品中国洋人 | 中文字幕乱码在线播放 | 欧美一级特黄高清视频 | 亚洲精品国产精品国自 | 国产精品久久久久久爽爽爽 | 日本成人中文字幕在线观看 | 一级片视频在线 | 久久精品视频2 | 日韩精品视频在线观看免费 | 午夜国产福利在线 | 久久激五月天综合精品 | 操处女逼 | 成人午夜影院在线观看 | 久久综合精品一区 | 国产精品18久久久久久不卡孕妇 | 欧美日本不卡视频 | 毛片视频网址 | av线上看| 久久国产精品免费观看 | 亚洲一区二区麻豆 | 伊人中文在线 | 91av精品| 麻豆视频大全 | 五月激情姐姐 | 亚洲精品在线二区 | 久久免费中文视频 | 日本午夜在线观看 | 久久精品波多野结衣 | 亚洲小视频在线观看 | 99精品欧美一区二区三区黑人哦 | 色综合久久久久 | 天天操夜夜曰 | 日韩av网站在线播放 | 日韩最新在线 | 欧美网址在线观看 | 国产高清久久久久 | 欧美精品在线观看免费 | av福利在线 | 国产成人777777 | 在线午夜| 国产美女精品视频免费观看 | 国产精品美女久久久久久免费 | 久久成人免费电影 | 一区二区中文字幕在线 | 91免费看黄色 | 天天激情在线 | 色午夜| av3级在线 | 亚洲亚洲精品在线观看 | 一区二区三区播放 | 天堂av免费观看 | 一区二区成人国产精品 | 免费在线色 | 亚洲国产精品推荐 | 日韩在线视频免费观看 | 成人免费观看视频大全 | 国产视频在 | 一区视频在线 | 婷婷激情网站 | 九九综合久久 | 蜜桃av人人夜夜澡人人爽 | 欧美日韩亚洲第一页 | 亚洲三级在线播放 | 激情xxxx| 亚洲精品午夜国产va久久成人 | 成年人国产在线观看 | 日本性久久 | 亚洲福利精品 | 五月天狠狠操 | 美女一级毛片视频 | 日韩在线| 欧美专区国产专区 | 久草精品在线播放 | 婷婷激情欧美 | 亚洲国产av精品毛片鲁大师 | 欧美日韩裸体免费视频 | 国产又粗又猛又爽 | 亚洲一级国产 | 亚洲国产精品激情在线观看 | 啪啪肉肉污av国网站 | 91av在线免费观看 | 成人av电影免费在线播放 |