精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

一级特黄特色的免费大片视频| www.com日本| 999国产在线视频| 精品一区二区av| 欧美日韩国产va另类| 欧美熟妇精品一区二区| 蜜臀久久精品| 国产精品女同互慰在线看| 91成人免费看| 欧美日韩精品区| 亚洲精品aaaaa| 欧美高清视频在线高清观看mv色露露十八 | 伊人影院蕉久影院在线播放| 本田岬高潮一区二区三区| 国产91色在线|| 青娱乐国产盛宴| 免费av一区二区三区四区| 欧美日韩夫妻久久| 欧美国产激情视频| 成人看av片| 国产午夜精品理论片a级大结局| 成人黄色av播放免费| 国产成人在线免费视频| 99久久婷婷| 亚洲视频第一页| 性感美女一区二区三区| 国产经典一区| 精品久久久视频| 国产高潮呻吟久久久| 四虎精品成人免费网站| 久久99这里只有精品| 欧美一级大片在线免费观看| 91 在线视频| 精品久久中文| 亚洲精品一二区| 在线精品视频播放| 国产精品美女久久久久人| 欧美性jizz18性欧美| 日韩一级特黄毛片| 蜜桃视频网站在线| 欧美韩国日本综合| 热re99久久精品国99热蜜月| 狠狠人妻久久久久久综合麻豆| 久久精品国产99| 国产精品久久久久不卡| 圆产精品久久久久久久久久久| 欧美a级一区| 久久不射热爱视频精品| 日日操免费视频| 成人一二三区| 国产一区二区三区在线看| 中文字幕在线免费看线人| av不卡一区二区| 欧美一区午夜视频在线观看| 日本在线观看免费视频| 日韩欧美另类一区二区| 色吊一区二区三区| 日韩av片在线看| 小早川怜子影音先锋在线观看| 一卡二卡三卡日韩欧美| 黄色网在线视频| av网址在线免费观看| 亚洲天堂中文字幕| 精品国产三级a∨在线| 日本激情视频在线观看| 136国产福利精品导航| 影音欧美亚洲| 日韩欧美一起| 偷拍一区二区三区| 97视频在线免费播放| 春暖花开亚洲一区二区三区| 色狠狠色狠狠综合| 五月激情五月婷婷| 人人爱人人干婷婷丁香亚洲| 欧美mv和日韩mv的网站| 催眠调教后宫乱淫校园| 亚洲精华一区二区三区| 伊人亚洲福利一区二区三区| 精品伦精品一区二区三区视频密桃| 色琪琪久久se色| 久久亚洲精品中文字幕冲田杏梨| 欧美日韩免费一区二区| 在线视频日韩| 国产精品自拍偷拍| 国产黄色片网站| av在线这里只有精品| 欧美极品一区| 精精国产xxxx视频在线| 亚洲二区在线观看| 久草综合在线观看| 亚洲成a人片777777久久| 日韩欧美国产小视频| 超碰caoprom| 精品色999| 久久香蕉国产线看观看av| 久久网一区二区| 美女黄网久久| 亚洲一区二区三区在线视频 | 免费观看成人鲁鲁鲁鲁鲁视频| 国产一区二区三区观看| 亚洲欧美成人一区二区在线电影| 欧美丰满老妇熟乱xxxxyyy| 99精品在线免费在线观看| 欧美黄色性视频| 69国产精品视频免费观看| 久草热8精品视频在线观看| 成人国产一区二区| 激情视频在线观看免费| 一区二区视频免费在线观看| 久久久噜噜噜www成人网| 青草综合视频| 精品亚洲aⅴ在线观看| 国产馆在线观看| 在线成人h网| 91九色国产视频| 日韩精品视频无播放器在线看 | 高清不卡日本v二区在线| 九色在线播放| 亚洲永久精品大片| 欧美婷婷精品激情| 农村少妇一区二区三区四区五区 | 欧美最新大片在线看| 波多野结衣办公室双飞| 999精品一区| 国产成人在线视频| 色婷婷综合视频| 中文字幕在线不卡| 欧美精品色婷婷五月综合| 欧美国产亚洲精品| 中文一区二区视频| 免费看日批视频| av亚洲精华国产精华精华| 亚洲AV无码成人精品一区| 欧美日韩免费看片| 亚洲国产日韩欧美在线图片| 草视频在线观看| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩国产不卡在线看| 日本高清成人vr专区| 欧美精品乱码久久久久久按摩| mm131美女视频| 亚洲国产美女| 国产伦精品一区二区三区高清版 | 国产区精品在线| 国产欧美一区二区在线观看| 久久综合九色综合88i| 天堂va在线高清一区| 久久精品国产99国产精品澳门 | 国产又黄又粗视频| 久久久999| 热re99久久精品国99热蜜月| 都市激情亚洲综合| 精品亚洲国产视频| 久久夜靖品2区| 成人网在线免费视频| 久久国产精品免费观看| 精品久久亚洲| 久久91精品国产| 国产成人三级一区二区在线观看一| 国产精品你懂的| www.夜夜爽| 99久久久久久中文字幕一区| 91视频国产高清| av网站大全在线| 精品国精品国产尤物美女| 久久久久香蕉视频| 成人激情校园春色| 波多野结衣综合网| 亚洲免费观看高清完整版在线观| 欧美专区在线播放| 搞黄视频免费在线观看| 欧美中文字幕一区| 国产精品久久久免费看| 激情久久五月天| 久久久久久久久久伊人| 成人av动漫| 2019中文在线观看| 大地资源中文在线观看免费版| 欧美综合天天夜夜久久| 永久av免费网站| 国产成人精品1024| 欧美极品欧美精品欧美| 国产欧美一区二区三区精品观看| 国产精品久久久一区| 国产精品一卡二卡三卡| 亚洲成人999| 亚洲中文无码av在线| 亚洲日本在线视频观看| 娇妻高潮浓精白浆xxⅹ| 噜噜噜在线观看免费视频日韩 | 免费黄色在线视频网站| 欧美色精品在线视频| 国产67194| 99视频精品免费视频| 9久久婷婷国产综合精品性色| 亚洲女同另类| 久久久福利视频| 青青草国产一区二区三区| 国外成人在线视频| 91精品大全| 亚洲黄色有码视频| 一区二区日韩视频| 精品久久久久久久大神国产| 天天操天天干天天操天天干| 国产精品性做久久久久久| 无码精品国产一区二区三区免费| 欧美电影一区| 久草热久草热线频97精品| 福利一区二区| 欧洲亚洲免费视频| 欧美1—12sexvideos| 在线视频精品一| 三级视频在线看| 欧美三级一区二区| 久久久精品免费看| 亚洲激情五月婷婷| 少妇愉情理伦三级| 91丨porny丨最新| 性xxxxxxxxx| 美女一区二区三区| 免费日韩视频在线观看| 国产精品av久久久久久麻豆网| 日韩av电影免费播放| 伊人精品久久| 91亚洲一区精品| 欧美大片1688网站| 5566日本婷婷色中文字幕97| 国产福利在线播放麻豆| 在线成人中文字幕| 涩爱av在线播放一区二区| 日韩免费视频一区| 国产麻豆免费视频| 欧美无人高清视频在线观看| 日日夜夜综合网| 图片区日韩欧美亚洲| 久久久久噜噜噜亚洲熟女综合| 日韩理论片在线| 黄色免费一级视频| 日本一区免费视频| 日韩一区二区a片免费观看| 91亚洲午夜精品久久久久久| 国产免费无码一区二区| 国产真实乱偷精品视频免| 91制片厂毛片| 蜜臀av性久久久久蜜臀aⅴ四虎 | 日韩成人精品在线| 777米奇影视第四色| 国产精品主播| 免费在线激情视频| 宅男噜噜噜66国产日韩在线观看| 成人黄色大片网站| 亚洲黄色影片| 国产玉足脚交久久欧美| 亚洲天堂激情| 欧美午夜性视频| 好看的亚洲午夜视频在线| 中文字幕日韩精品无码内射| 中文字幕av亚洲精品一部二部| 影音先锋欧美资源| 欧美激情亚洲| 国产日本在线播放| 在线亚洲伦理| 国产精品乱码久久久久| 美女精品一区二区| 日韩av.com| 国产一区二区三区久久久| 91人妻一区二区三区| 岛国一区二区三区| 国产高清成人久久| 久久影院视频免费| 成年人看的免费视频| 日韩一区在线播放| 妺妺窝人体色www聚色窝仙踪| 亚洲成年人影院| 男人午夜免费视频| 欧美网站一区二区| 精品国产无码一区二区三区| 亚洲国产成人久久综合| 男人天堂网在线观看| 日韩中文字幕久久| 日本在线观看高清完整版| 26uuu另类亚洲欧美日本老年| 依依综合在线| 亚洲va男人天堂| 久久资源综合| 亚洲精品日韩精品| 欧美欧美全黄| 午夜免费精品视频| 国产在线一区二区| 亚洲中文字幕无码av| 中文字幕av不卡| 久久一区二区三| 91久久精品国产91性色tv| 国产理论视频在线观看| 亚洲第一级黄色片| 中文字幕在线播放| 欧美激情伊人电影 | 日韩欧美一区二区三区久久| 在线观看中文字幕av| 亚洲成人精品av| 视频三区在线| 5566成人精品视频免费| 国产精品日本一区二区不卡视频| 久久国产精品一区二区三区| 天天射天天综合网| 六月丁香婷婷激情| 国产成人日日夜夜| 美国美女黄色片| 亚洲成人在线网站| 国产精品无码白浆高潮| 亚洲免费伊人电影在线观看av| 快射视频在线观看| 欧美一区在线直播| 亚洲五码在线| 亚洲精品永久www嫩草| 国产欧美91| 国产chinesehd精品露脸| 欧美国产成人精品| 日韩少妇高潮抽搐| 欧美成人一级视频| 欧美一级二级三级区| 日韩av电影在线播放| 6080成人| 欧美性受黑人性爽| 久久99九九99精品| 少妇精品无码一区二区免费视频| 五月天丁香久久| 亚洲国产精彩视频| 裸体女人亚洲精品一区| 久久伊人国产| 日本一区二区免费看| 99成人精品| 第一页在线视频| 亚洲免费观看高清完整版在线观看 | 亚洲男人天堂久久| 精品国产依人香蕉在线精品| 国产综合av| 免费观看成人高| 最新亚洲视频| 美女久久久久久久久| 亚洲黄色录像片| 精品人妻伦一区二区三区久久| 久久久av网站| 国产精品高清一区二区| 最新精品视频| 国内成人自拍视频| 黄色一级大片在线免费观看| 7777女厕盗摄久久久| 亚洲xxxxxx| 成人激情视频网| 91精品福利| 亚洲国产日韩在线一区| 亚洲伦在线观看| 亚洲国产精品suv| 性欧美视频videos6一9| 欧美亚洲tv| 精品99在线视频| 国产日韩欧美不卡| 最近中文字幕免费观看| 最近日韩中文字幕中文| 日韩一区二区三区四区五区| 影音先锋亚洲视频| 国产精品123| 国产在线视频在线观看| 亚洲精品国产欧美| 粉嫩一区二区三区| 日韩wuma| 极品少妇一区二区三区精品视频| 国产老头老太做爰视频| 欧美成人三级在线| 国产一二三在线| 天天综合色天天综合色hd| 卡一卡二国产精品 | 欧洲综合视频| 国产精品精品视频一区二区三区| 日韩三级在线| 中文字幕avav| 午夜欧美大尺度福利影院在线看 | 最近2019中文字幕大全第二页| 999精品嫩草久久久久久99| 国产高清不卡无码视频| 99r国产精品| 糖心vlog精品一区二区| 久色乳综合思思在线视频| 另类尿喷潮videofree| www黄色在线| 亚洲精品视频在线观看免费| 色屁屁草草影院ccyycom| 国产xxx69麻豆国语对白| 婷婷中文字幕一区| 日b视频在线观看| 欧美日韩一区高清| 国产区美女在线| 亚洲 日韩 国产第一区| 国产成人av电影在线| 人人草在线观看| 九九热这里只有精品6| 久久99国内| 一起草最新网址| 91国偷自产一区二区三区成为亚洲经典|