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

面試官:HashSet如何保證元素不重復?

開發 前端
HashSet 實現了 Set 接口,由哈希表(實際是 HashMap)提供支持。HashSet 不保證集合的迭代順序,但允許插入 null 值。也就是說 HashSet 不能保證元素插入順序和迭代順序相同。

[[441322]]

HashSet 實現了 Set 接口,由哈希表(實際是 HashMap)提供支持。HashSet 不保證集合的迭代順序,但允許插入 null 值。也就是說 HashSet 不能保證元素插入順序和迭代順序相同。HashSet 具備去重的特性,也就是說它可以將集合中的重復元素自動過濾掉,保存存儲在 HashSet 中的元素都是唯一的。

1.HashSet 基本用法

HashSet 基本操作方法有:add(添加)、remove(刪除)、contains(判斷某個元素是否存在)和 size(集合數量)。這些方法的性能都是固定操作時間,如果哈希函數是將元素分散在桶中的正確位置。HashSet 基本使用如下:

  1. // 創建 HashSet 集合 
  2. HashSet<String> strSet = new HashSet<>(); 
  3. // 給 HashSet 添加數據 
  4. strSet.add("Java"); 
  5. strSet.add("MySQL"); 
  6. strSet.add("Redis"); 
  7. // 循環打印 HashSet 中的所有元素 
  8. strSet.forEach(s -> System.out.println(s)); 

2.HashSet 無序性

HashSet 不能保證插入元素的順序和循環輸出元素的順序一定相同,也就是說 HashSet 其實是無序的集合,具體代碼示例如下:

  1. HashSet<String> mapSet = new HashSet<>(); 
  2. mapSet.add("深圳"); 
  3. mapSet.add("北京"); 
  4. mapSet.add("西安"); 
  5. // 循環打印 HashSet 中的所有元素 
  6. mapSet.forEach(m -> System.out.println(m)); 

以上程序的執行結果如下:

從上述代碼和執行結果可以看出,HashSet 插入的順序是:深圳 -> 北京 -> 西安,而循環打印的順序卻是:西安 -> 深圳 -> 北京,所以 HashSet 是無序的,不能保證插入和迭代的順序一致。

PS:如果要保證插入順序和迭代順序一致,可使用 LinkedHashSet 來替換 HashSet。

3.HashSet 錯誤用法

有人說 HashSet 只能保證基礎數據類型不重復,卻不能保證自定義對象不重復?這樣說對嗎?我們通過以下示例來說明此問題。

3.1 HashSet 與基本數據類型

使用 HashSet 存儲基本數據類型,實現代碼如下:

  1. HashSet<Long> longSet = new HashSet<>(); 
  2. longSet.add(666l); 
  3. longSet.add(777l); 
  4. longSet.add(999l); 
  5. longSet.add(666l); 
  6. // 循環打印 HashSet 中的所有元素 
  7. longSet.forEach(l -> System.out.println(l)); 

以上程序的執行結果如下:

從上述結果可以看出,使用 HashSet 可以保證基礎數據類型不重復。

3.2 HashSet 與自定義對象類型

接下來,將自定義對象存儲到 HashSet 中,實現代碼如下:

  1. public class HashSetExample { 
  2.     public static void main(String[] args) { 
  3.         HashSet<Person> personSet = new HashSet<>(); 
  4.         personSet.add(new Person("曹操""123")); 
  5.         personSet.add(new Person("孫權""123")); 
  6.         personSet.add(new Person("曹操""123")); 
  7.         // 循環打印 HashSet 中的所有元素 
  8.         personSet.forEach(p -> System.out.println(p)); 
  9.     } 
  10. @Getter 
  11. @Setter 
  12. @ToString 
  13. class Person { 
  14.     private String name
  15.     private String password
  16.  
  17.     public Person(String name, String password) { 
  18.         this.name = name
  19.         this.password = password
  20.     } 

以上程序的執行結果如下:

從上述結果可以看出,自定義對象類型確實沒有被去重,那也就是說 HashSet 不能實現自定義對象類型的去重咯?其實并不是,HashSet 去重功能是依賴元素的 hashCode 和 equals 方法判斷的,通過這兩個方法返回的都是 true 那就是相同對象,否則就是不同對象。而前面的 Long 類型元素之所以能實現去重,正是因為 Long 類型中已經重寫了 hashCode 和 equals 方法,具體實現源碼如下:

  1. @Override 
  2. public int hashCode() { 
  3.     return Long.hashCode(value); 
  4. public boolean equals(Object obj) { 
  5.     if (obj instanceof Long) { 
  6.         return value == ((Long)obj).longValue(); 
  7.     } 
  8.     return false
  9. //省略其他源碼...... 

更多關于 hashCode 和 equals 的內容,詳見:https://mp.weixin.qq.com/s/40zaEJEkQYM3Awk2EwIrWA

那么,想讓 HashSet 支持自定義對象去重,只需要在自定義對象中重寫 hashCode 和 equals 方法即可,具體實現代碼如下:

  1. @Setter 
  2. @Getter 
  3. @ToString 
  4. class Person { 
  5.     private String name
  6.     private String password
  7.     public Person(String name, String password) { 
  8.         this.name = name
  9.         this.password = password
  10.     } 
  11.     @Override 
  12.     public boolean equals(Object o) { 
  13.         if (this == o) return true; // 引用相等返回 true 
  14.         // 如果等于 null,或者對象類型不同返回 false 
  15.         if (o == null || getClass() != o.getClass()) return false
  16.         // 強轉為自定義 Person 類型 
  17.         Person persion = (Person) o; 
  18.         // 如果 name 和 password 都相等,就返回 true 
  19.         return Objects.equals(name, persion.name) && 
  20.                 Objects.equals(password, persion.password); 
  21.     } 
  22.     @Override 
  23.     public int hashCode() { 
  24.         // 對比 name 和 password 是否相等 
  25.         return Objects.hash(namepassword); 
  26.     } 

重新運行以上代碼,執行結果如下圖所示:圖片從上述結果可以看出,之前的重復項“曹操”已經被去重了。

4.HashSet 如何保證元素不重復?

我們只要了解了 HashSet 執行添加元素的流程,就能知道為什么 HashSet 能保證元素不重復了?HashSet 添加元素的執行流程是:當把對象加入 HashSet 時,HashSet 會先計算對象的 hashcode 值來判斷對象加入的位置,同時也會與其他加入的對象的 hashcode 值作比較,如果沒有相符的 hashcode,HashSet 會假設對象沒有重復出現,會將對象插入到相應的位置中。但是如果發現有相同 hashcode 值的對象,這時會調用對象的 equals() 方法來檢查對象是否真的相同,如果相同,則 HashSet 就不會讓重復的對象加入到 HashSet 中,這樣就保證了元素的不重復。

為了更清楚的了解 HashSet 的添加流程,我們可以嘗試閱讀 HashSet 的具體實現源碼,HashSet 添加方法的實現源碼如下(以下源碼基于 JDK 8):

  1. // hashmap 中 put() 返回 null 時,表示操作成功 
  2. public boolean add(E e) { 
  3.     return map.put(e, PRESENT)==null

從上述源碼可以看出 HashSet 中的 add 方法,實際調用的是 HashMap 中的 put,那么我們繼續看 HashMap 中的 put 實現:

  1. final V putVal(int hash, K key, V value, boolean onlyIfAbsent, 
  2.                 boolean evict) { 
  3.      Node<K, V>[] tab; 
  4.      Node<K, V> p; 
  5.      int n, i; 
  6.      //如果哈希表為空,調用 resize() 創建一個哈希表,并用變量 n 記錄哈希表長度 
  7.      if ((tab = table) == null || (n = tab.length) == 0) 
  8.          n = (tab = resize()).length; 
  9.      /** 
  10.       * 如果指定參數 hash 在表中沒有對應的桶,即為沒有碰撞 
  11.       * Hash函數,(n - 1) & hash 計算 key 將被放置的槽位 
  12.       * (n - 1) & hash 本質上是 hash % n 位運算更快 
  13.       */ 
  14.      if ((p = tab[i = (n - 1) & hash]) == null
  15.          // 直接將鍵值對插入到 map 中即可 
  16.          tab[i] = newNode(hash, key, value, null); 
  17.      else {// 桶中已經存在元素 
  18.          Node<K, V> e; 
  19.          K k; 
  20.          // 比較桶中第一個元素(數組中的結點)的 hash 值相等,key 相等 
  21.          if (p.hash == hash && 
  22.                  ((k = p.key) == key || (key != null && key.equals(k)))) 
  23.              // 將第一個元素賦值給 e,用 e 來記錄 
  24.              e = p; 
  25.              // 當前桶中無該鍵值對,且桶是紅黑樹結構,按照紅黑樹結構插入 
  26.          else if (p instanceof TreeNode) 
  27.              e = ((TreeNode<K, V>) p).putTreeVal(this, tab, hash, key, value); 
  28.              // 當前桶中無該鍵值對,且桶是鏈表結構,按照鏈表結構插入到尾部 
  29.          else { 
  30.              for (int binCount = 0; ; ++binCount) { 
  31.                  // 遍歷到鏈表尾部 
  32.                  if ((e = p.next) == null) { 
  33.                      p.next = newNode(hash, key, value, null); 
  34.                      // 檢查鏈表長度是否達到閾值,達到將該槽位節點組織形式轉為紅黑樹 
  35.                      if (binCount >= TREEIFY_THRESHOLD - 1) // -1 for 1st 
  36.                          treeifyBin(tab, hash); 
  37.                      break; 
  38.                  } 
  39.                  // 鏈表節點的<key, value>與 put 操作<key, value> 
  40.                  // 相同時,不做重復操作,跳出循環 
  41.                  if (e.hash == hash && 
  42.                          ((k = e.key) == key || (key != null && key.equals(k)))) 
  43.                      break; 
  44.                  p = e; 
  45.              } 
  46.          } 
  47.          // 找到或新建一個 key 和 hashCode 與插入元素相等的鍵值對,進行 put 操作 
  48.          if (e != null) { // existing mapping for key 
  49.              // 記錄 e 的 value 
  50.              V oldValue = e.value; 
  51.              /** 
  52.               * onlyIfAbsent 為 false 或舊值為 null 時,允許替換舊值 
  53.               * 否則無需替換 
  54.               */ 
  55.              if (!onlyIfAbsent || oldValue == null
  56.                  e.value = value; 
  57.              // 訪問后回調 
  58.              afterNodeAccess(e); 
  59.              // 返回舊值 
  60.              return oldValue; 
  61.          } 
  62.      } 
  63.      // 更新結構化修改信息 
  64.      ++modCount; 
  65.      // 鍵值對數目超過閾值時,進行 rehash 
  66.      if (++size > threshold) 
  67.          resize(); 
  68.      // 插入后回調 
  69.      afterNodeInsertion(evict); 
  70.      return null
  71.  } 

從上述源碼可以看出,當將一個鍵值對放入 HashMap 時,首先根據 key 的 hashCode() 返回值決定該 Entry 的存儲位置。如果有兩個 key 的 hash 值相同,則會判斷這兩個元素 key 的 equals() 是否相同,如果相同就返回 true,說明是重復鍵值對,那么 HashSet 中 add() 方法的返回值會是 false,表示 HashSet 添加元素失敗。因此,如果向 HashSet 中添加一個已經存在的元素,新添加的集合元素不會覆蓋已有元素,從而保證了元素的不重復。如果不是重復元素,put 方法最終會返回 null,傳遞到 HashSet 的 add 方法就是添加成功。

總結

HashSet 底層是由 HashMap 實現的,它可以實現重復元素的去重功能,如果存儲的是自定義對象必須重寫 hashCode 和 equals 方法。HashSet 保證元素不重復是利用 HashMap 的 put 方法實現的,在存儲之前先根據 key 的 hashCode 和 equals 判斷是否已存在,如果存在就不在重復插入了,這樣就保證了元素的不重復。

 

責任編輯:武曉燕 來源: Java面試真題解析
相關推薦

2023-09-01 15:27:31

2024-02-28 10:14:47

Redis數據硬盤

2020-08-06 07:49:57

List元素集合

2021-10-22 08:37:13

消息不丟失rocketmq消息隊列

2025-11-11 09:05:09

2025-10-09 01:22:00

2023-11-27 08:32:02

元素HashMap

2025-03-10 11:48:22

項目服務設計

2024-10-29 08:17:43

2015-08-13 10:29:12

面試面試官

2025-09-18 08:53:20

2025-09-22 08:26:37

2023-02-16 08:10:40

死鎖線程

2024-01-15 10:38:20

多級緩存數據一致性分布式緩存

2020-09-30 06:49:25

MySQL查詢刪除

2023-01-26 02:07:51

HashSet線程安全

2024-06-18 08:26:22

2024-09-11 22:51:19

線程通訊Object

2025-03-17 00:00:00

2024-04-03 00:00:00

Redis集群代碼
點贊
收藏

51CTO技術棧公眾號

国产精品视频久久久| 91麻豆精品国产自产在线观看一区| 99在线视频首页| 日本五十熟hd丰满| 国产毛片一区二区三区| 欧美日韩精品专区| 国产精品一色哟哟| 国产福利小视频在线| 极品少妇xxxx精品少妇偷拍| 久久久久久久999| 中文字幕免费在线看线人动作大片| 欧美在线一级| 亚洲最新视频在线观看| 国产精品v欧美精品v日韩精品| 麻豆久久久久久久久久| 午夜精品毛片| 亚洲男人av在线| 日本少妇一区二区三区| 成人片免费看| 一区二区三区精品在线| 日本视频一区在线观看| www.超碰在线.com| 奇米精品一区二区三区在线观看一| 久久视频精品在线| 91视频免费在观看| 欧美电影免费网站| 欧美一个色资源| 手机看片福利日韩| а√天堂8资源中文在线| 国产精品大尺度| 欧美成人免费在线| 丰满人妻一区二区| 久久99精品久久久久久| 日本韩国欧美精品大片卡二| 唐朝av高清盛宴| 999久久久免费精品国产| 亚洲老头同性xxxxx| 国偷自产av一区二区三区麻豆| a屁视频一区二区三区四区| 亚洲成av人影院| 欧洲精品视频在线| 男人天堂久久久| 国产午夜一区二区三区| 久久国产精品-国产精品| 不卡av中文字幕| 激情久久五月天| 国产综合久久久久| 久草热在线观看| 日韩精品福利网| 77777亚洲午夜久久多人| 欧美极品视频在线观看| 自由日本语亚洲人高潮| 日韩一区二区精品视频| 日韩影视一区二区三区| 久久成人高清| 亚洲人成毛片在线播放| 97超碰在线资源| 伊人久久综合影院| 亚洲欧美成人网| 91精品人妻一区二区三区蜜桃欧美| 久久中文字幕导航| 亚洲精品国偷自产在线99热| 国产女主播在线播放| 97久久亚洲| 亚洲成人aaa| 久久久久久婷婷| 久久婷婷国产| 亚洲欧美日韩一区二区在线| 免费看污片网站| 第四色成人网| 亚洲一区999| 综合 欧美 亚洲日本| 久久免费大视频| 久久亚洲欧美日韩精品专区| 欧美性x x x| 很黄很黄激情成人| 97久久久久久| 成人免费毛片视频| 久久se这里有精品| 99国内精品久久久久久久软件| 亚洲av无码乱码国产精品| 国产成人精品亚洲777人妖| 国产精品12| 九九在线视频| 亚洲色欲色欲www在线观看| 看全色黄大色大片| av中文字幕电影在线看| 色综合天天综合网天天看片| 亚洲福利精品视频| 日韩精品一区二区三区中文字幕 | 丰满女人性猛交| 中文在线字幕免费观看| 激情久久av一区av二区av三区| 成年人观看网站| 欧美男男gaygay1069| 日韩欧美国产不卡| 好吊视频在线观看| 一区二区免费不卡在线| 韩剧1988免费观看全集| 国产成人a v| 国产成人啪免费观看软件| 欧美自拍资源在线| 福利在线视频网站| 欧美色另类天堂2015| 福利视频999| 日韩母乳在线| 久热精品视频在线| 人人爽人人爽人人片av| 久久国产精品一区二区| 国产综合第一页| 永久av在线| 岛国av在线不卡| ass极品水嫩小美女ass| 亚洲人成网站77777在线观看| 亚洲人免费视频| 久久久精品一区二区涩爱| 日本 国产 欧美色综合| 国产精品日韩欧美一区二区三区| 91大神在线网站| 日韩欧美成人区| 国产日韩欧美影视| 大片在线观看网站免费收看| 国产后进白嫩翘臀在线观看视频| 在线视频欧美精品| 亚洲视频在线播放免费| 国产韩国精品一区二区三区| 91精品91久久久久久| av高清一区二区| 最新不卡av在线| 最近免费中文字幕中文高清百度| 亚洲一区二区电影| 久久久精品网站| 一级一级黄色片| 久久中文字幕电影| www黄色日本| 国产一区二区三区亚洲| 欧美日韩xxxxx| 国产三级午夜理伦三级| 中文字幕乱码久久午夜不卡| 男人揉女人奶房视频60分 | 日韩黄色影院| 色婷婷综合久久久中文字幕| 亚州av综合色区无码一区| 欧美国产日本| 91亚洲国产成人精品性色| gogogo高清在线观看免费完整版| 狠狠躁夜夜躁人人爽超碰91| 亚洲av成人片无码| 99视频一区| 国产精品视频免费观看| 欧洲精品二区| 亚洲精品在线观看网站| 中文字幕av久久爽av| 国产精品自拍av| mm131午夜| 日本免费一区二区三区视频| 久久综合色88| 99热这里只有精品9| 亚洲精品v日韩精品| 日本少妇一区二区三区| 亚洲婷婷免费| 国产在线播放一区二区| 美女高潮在线观看| 亚洲欧洲在线看| 中文字字幕在线中文乱码| 国产女同性恋一区二区| 日韩在线一区视频| 欧美激情一级片一区二区| www日韩av| 在线天堂资源www在线污| 国产网站欧美日韩免费精品在线观看 | 国产精品人人做人人爽人人添| 三级a在线观看| 欧美va久久久噜噜噜久久| 成人h视频在线| 青春草在线视频| 日韩av最新在线观看| 亚洲成人第一网站| 国产精品国产三级国产三级人妇| av在线网站免费观看| 一区免费视频| 欧美在线播放一区| 亚洲三级电影| 国内精品久久久久伊人av| 神马亚洲视频| 欧美美女一区二区| 黄色激情视频在线观看| 久久久精品天堂| 夜夜爽久久精品91| 久久亚洲视频| 国产一二三四五| 国产99精品一区| 亚洲最大av在线| 中文av在线全新| 北条麻妃一区二区三区中文字幕| 老牛影视av牛牛影视av| 在线观看www91| 美女视频黄免费| 国产三级欧美三级日产三级99 | 最新精品视频| 老牛精品亚洲成av人片| 国产一区私人高清影院| 2021天堂中文幕一二区在线观| 一本一本久久a久久精品综合小说 一本一本久久a久久精品牛牛影视 | 中文字幕av片| 亚洲国产精品久久久久秋霞影院| 天堂久久精品忘忧草| 国产精品888| 牛夜精品久久久久久久| 国内在线观看一区二区三区| 神马影院午夜我不卡影院| 亚洲精品高潮| 国产精品三级久久久久久电影| www在线看| 久热国产精品视频| 亚乱亚乱亚洲乱妇| 国产网站欧美日韩免费精品在线观看| 国产男男gay体育生网站| 大桥未久av一区二区三区| 国产盗摄x88av| 国产精品美女久久久久久2018 | 久久久久久久久97黄色工厂| 国产香蕉精品视频| 国模少妇一区二区三区| 黄色成人免费看| 久久人人超碰| 三上悠亚久久精品| 国产精品a久久久久| 在线观看亚洲视频啊啊啊啊| 国产探花在线精品| 精品亚洲一区二区三区四区五区高| 高清国产一区二区三区四区五区| 国产精品91在线观看| 中文字幕在线中文字幕在线中三区| 久久6免费高清热精品| 激情影院在线观看| 综合欧美国产视频二区| 国产在线视频资源| 亚洲欧洲黄色网| 天堂a中文在线| 亚洲精品电影网在线观看| 朝桐光av在线一区二区三区| 欧美一级二级三级蜜桃| www.com在线观看| 日韩免费视频一区| 国产成人三级在线播放| 欧美一区二区在线免费观看| 97在线视频人妻无码| 欧美日韩dvd在线观看| 中文字幕av网站| 欧美二区乱c少妇| 一级特黄色大片| 制服丝袜中文字幕一区| 91精品国产乱码久久久久| 欧美三级蜜桃2在线观看| 波多野结衣大片| 欧美撒尿777hd撒尿| 真实的国产乱xxxx在线91| 欧美日韩在线三级| 国产欧美久久久| 欧美tickling挠脚心丨vk| 精品人妻一区二区三区三区四区| 欧美第一区第二区| 欧美视频一二区| 亚洲久久久久久久久久| 韩国中文免费在线视频| 色婷婷av一区二区三区久久| 日本中文在线| 欧美成人午夜激情在线| 久久青青色综合| 欧美又大粗又爽又黄大片视频| 欧美日韩精品免费观看视完整| 国产精品国产亚洲伊人久久 | 97人摸人人澡人人人超一碰| 一区二区三区视频免费视频观看网站| 国产精品v欧美精品∨日韩| 日韩av不卡一区| 四虎一区二区| 91精品秘密在线观看| 久草视频这里只有精品| 奶水喷射视频一区| 欧美成人福利在线观看| 国产精品亚洲一区二区三区妖精| 国产精品成人99一区无码| 久久精品亚洲一区二区三区浴池| 亚洲女人毛茸茸高潮| 亚洲欧美电影一区二区| 日韩精品一卡二卡| 欧美视频在线播放| 懂色av蜜臀av粉嫩av分享吧| 亚洲欧美福利视频| av在线app| 国产www精品| 精品国产一区二| 久久综合入口| 国产韩国精品一区二区三区| 人妻少妇精品久久| 久久国产夜色精品鲁鲁99| 亚洲精品乱码久久久久久蜜桃欧美| 久久午夜色播影院免费高清| 小早川怜子一区二区的演员表| 性做久久久久久久久| 又骚又黄的视频| 亚洲精品乱码久久久久久按摩观| 在线观看免费黄视频| 午夜精品久久久久久久久久久久久 | 亚洲av无码专区在线| 亚洲久久久久久久久久| 七七成人影院| 国产美女91呻吟求| 网曝91综合精品门事件在线| 亚洲最新免费视频| 久久亚洲电影| 国产a级黄色片| 亚洲男人电影天堂| 久草视频在线免费| 日韩成人在线视频网站| 操你啦在线视频| 国产精品美女午夜av| 任你弄精品视频免费观看| 麻豆视频传媒入口| 男人的天堂亚洲一区| av无码av天天av天天爽| 亚洲一线二线三线视频| 国产精品自拍电影| 在线观看欧美日韩国产| 成人免费网站视频| 鲁丝一区鲁丝二区鲁丝三区| 欧美激情第10页| 色播五月激情五月| 中国色在线观看另类| yjizz国产| 亚洲国内高清视频| 国产丝袜精品丝袜| 99精品国产一区二区| 五月激情综合| 亚洲精品性视频| 日韩一区欧美一区| 一区二区精品视频在线观看| 国产一区二区三区在线播放免费观看 | 91久久精品国产91性色69| 亚洲精品中文字幕av| 成av人片在线观看www| 国产精品嫩草在线观看| 亚洲电影成人| 182在线视频| 欧美日韩一区二区免费视频| 人妻精品一区一区三区蜜桃91| 色综合久久精品亚洲国产| 国内精品视频| 在线观看17c| 大美女一区二区三区| 欧美交换国产一区内射| 精品国产乱码久久久久久蜜臀 | 日韩精品一区二区三区免费观看| 熟妇人妻va精品中文字幕| 久久综合九色综合欧美98| 免费av网站在线| 亚洲色图五月天| 日本欧美韩国| 久久av秘一区二区三区| 国产一区福利在线| 久久精品免费av| 日韩精品久久久久久福利| 成人欧美一区二区三区的电影| 日本精品一区二区三区高清 久久| 日韩电影在线免费观看| 免费看91的网站| 91麻豆精品国产91久久久资源速度 | 中文字幕无线精品亚洲乱码一区 | 日韩精品电影一区二区| 日本高清不卡一区| 麻豆传媒在线免费| 国产二区一区| 久久精品日韩欧美| 日本视频在线免费| 欧美v日韩v国产v| 天堂中文最新版在线中文| 秋霞毛片久久久久久久久| 美美哒免费高清在线观看视频一区二区 | 国产中文字幕二区| 国产亚洲视频系列| 99久久久久久久| 91精品国产色综合| 成人高清av| 无码人妻aⅴ一区二区三区玉蒲团| 精品美女国产在线| 嫩草香蕉在线91一二三区| 粉嫩av免费一区二区三区| 久久久久久自在自线| 性色av无码久久一区二区三区| 亚洲成年人在线| 国产精品黄色片| av免费观看大全| 国产精品福利一区二区三区| xxxx国产精品| 国产欧美日韩91| 99av国产精品欲麻豆| 天堂网中文在线观看| 日韩经典中文字幕|