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

面試官提問:如何去掉List集合中重復的元素?

開發 前端
在實際開發的時候,我們經常會碰到這么一個困難:一個集合容器里面有很多重復的對象,里面的對象沒有主鍵,但是根據業務的需求,實際上我們需要根據條件篩選出沒有重復的對象。

本文轉載自微信公眾號「Java極客技術」,作者鴨血粉絲。轉載本文請聯系Java極客技術公眾號。

 一、問題由來

在實際開發的時候,我們經常會碰到這么一個困難:一個集合容器里面有很多重復的對象,里面的對象沒有主鍵,但是根據業務的需求,實際上我們需要根據條件篩選出沒有重復的對象。

比較暴力的方法,就是根據業務需求,通過兩層循環來進行判斷,沒有重復的元素就加入到新集合中,新集合中已經有的元素就跳過。

操作例子如下,創建一個實體對象PenBean,代碼如下:

  1. /** 
  2.  * 筆實體 
  3.  */ 
  4. public class PenBean { 
  5.  
  6.     /**類型*/ 
  7.     private String type; 
  8.  
  9.     /**顏色*/ 
  10.     private String color; 
  11.  
  12.     //... 省略 setter 和 getter 
  13.  
  14.     public PenBean(String type, String color) { 
  15.         this.type = type; 
  16.         this.color = color; 
  17.     } 
  18.  
  19.     @Override 
  20.     public String toString() { 
  21.         return "PenBean{" + 
  22.                 "type='" + type + '\'' + 
  23.                 ", color='" + color + '\'' + 
  24.                 '}'
  25.     } 

測試 demo,如下:

  1. public static void main(String[] args) { 
  2.     //添加信息,PenBean中沒有主鍵 
  3.     List<PenBean> penBeanList = new ArrayList<PenBean>(); 
  4.     penBeanList.add(new PenBean("鉛筆","black")); 
  5.     penBeanList.add(new PenBean("鉛筆","white")); 
  6.     penBeanList.add(new PenBean("鉛筆","black")); 
  7.     penBeanList.add(new PenBean("中性筆","white")); 
  8.     penBeanList.add(new PenBean("中性筆","white")); 
  9.  
  10.     //新數據 
  11.     List<PenBean> newPenBeanList = new ArrayList<PenBean>(); 
  12.     //傳統重復判斷 
  13.     for (PenBean penBean : penBeanList) { 
  14.         if(newPenBeanList.isEmpty()){ 
  15.             newPenBeanList.add(penBean); 
  16.         }else
  17.             boolean isSame = false
  18.             for (PenBean newPenBean : newPenBeanList) { 
  19.                 //依靠type、color來判斷,是否有重復元素 
  20.                 //如果新集合包含元素,直接跳過 
  21.                 if(penBean.getType().equals(newPenBean.getType()) && penBean.getColor().equals(newPenBean.getColor())){ 
  22.                     isSame = true
  23.                     break; 
  24.                 } 
  25.             } 
  26.             if(!isSame){ 
  27.                 newPenBeanList.add(penBean); 
  28.             } 
  29.         } 
  30.     } 
  31.  
  32.     //輸出結果 
  33.     System.out.println("=========新數據======"); 
  34.     for (PenBean penBean : newPenBeanList) { 
  35.         System.out.println(penBean.toString()); 
  36.     } 

輸出結果:

  1. =========新數據====== 
  2. PenBean{type='鉛筆', color='black'
  3. PenBean{type='鉛筆', color='white'
  4. PenBean{type='中性筆', color='white'

一般處理數組類型的對象時,可以通過這種方法來對數組元素進行去重操作,以篩選出沒有包含重復元素的數組。

那有沒有更加簡潔的寫法呢?

答案肯定是有的,List中的contains()方法就是!

二、利用list中contains方法去重

在使用contains()之前,必須要對PenBean類重寫equals()方法,為什么要這么做?等會會詳細解釋!

我們先在PenBean類中重寫equals()方法,內容如下:

  1. @Override 
  2. public boolean equals(Object o) { 
  3.     if (this == o) return true
  4.     if (o == null || getClass() != o.getClass()) return false
  5.     PenBean penBean = (PenBean) o; 
  6.    //當type、color 內容都相等的時候,才返回true 
  7.     return Objects.equals(type, penBean.type) && 
  8.             Objects.equals(color, penBean.color); 

修改測試 demo,如下:

  1. public static void main(String[] args) { 
  2.     //添加信息 
  3.     List<PenBean> penBeanList = new ArrayList<PenBean>(); 
  4.     penBeanList.add(new PenBean("鉛筆","black")); 
  5.     penBeanList.add(new PenBean("鉛筆","white")); 
  6.     penBeanList.add(new PenBean("鉛筆","black")); 
  7.     penBeanList.add(new PenBean("中性筆","white")); 
  8.     penBeanList.add(new PenBean("中性筆","white")); 
  9.  
  10.     //新數據 
  11.     List<PenBean> newPenBeanList = new ArrayList<PenBean>(); 
  12.     //使用contain判斷,是否有相同的元素 
  13.     for (PenBean penBean : penBeanList) { 
  14.         if(!newPenBeanList.contains(penBean)){ 
  15.             newPenBeanList.add(penBean); 
  16.         } 
  17.     } 
  18.  
  19.     //輸出結果 
  20.     System.out.println("=========新數據======"); 
  21.     for (PenBean penBean : newPenBeanList) { 
  22.         System.out.println(penBean.toString()); 
  23.     } 

輸出結果如下:

  1. =========新數據====== 
  2. PenBean{type='鉛筆', color='black'
  3. PenBean{type='鉛筆', color='white'
  4. PenBean{type='中性筆', color='white'

如果PenBean對象不重寫equals(),contains()方法的都是false!新數據與源數據是一樣的,并不能達到我們想要除去重復元素的目的

那么contains()是怎么做到,判斷一個集合里面有相同的元素呢?

我們打開ArrayList中contains()方法,源碼如下:

  1. public boolean contains(Object o) { 
  2.     return indexOf(o) >= 0; 

找到indexOf(o)方法,繼續往下看,源碼如下:

  1. public int indexOf(Object o) { 
  2.     if (o == null) { 
  3.         for (int i = 0; i < size; i++) 
  4.             if (elementData[i]==null
  5.                 return i; 
  6.     } else { 
  7.         for (int i = 0; i < size; i++) 
  8.            //對象通過 equals 方法,判斷是否相同 
  9.             if (o.equals(elementData[i])) 
  10.                 return i; 
  11.     } 
  12.     return -1; 

此時,非常清晰了,如果傳入的對象是null,for循環判斷數組中的元素是否有null,如果有就返回下標;如果傳入的對象不是null,通過對象的equals()方法,for循環判斷是否有相同的元素,如果有就返回下標!

如果是數組返回的下標,肯定是大于0,否則返回-1!

這就是為什么在List中使用contains()方法,對象需要重寫equals()方法的原因!

三、java 8中去重操作

當然,有些朋友可能會想到 JDK1.8 中的流式寫法,例如 jdk1.8 中的集合元素去重寫法如下:

  1. public static void main(String[] args) { 
  2.     //添加信息 
  3.     List<PenBean> penBeanList = new ArrayList<PenBean>(); 
  4.     penBeanList.add(new PenBean("鉛筆","black")); 
  5.     penBeanList.add(new PenBean("鉛筆","white")); 
  6.     penBeanList.add(new PenBean("鉛筆","black")); 
  7.     penBeanList.add(new PenBean("中性筆","white")); 
  8.     penBeanList.add(new PenBean("中性筆","white")); 
  9.  
  10.     //使用java8新特性stream進行List去重 
  11.     List<PenBean> newPenBeanList = penBeanList.stream().distinct().collect(Collectors.toList()); 
  12.  
  13.     //輸出結果 
  14.     System.out.println("=========新數據======"); 
  15.     for (PenBean penBean : newPenBeanList) { 
  16.         System.out.println(penBean.toString()); 
  17.     } 

利用 jdk1.8 中提供的Stream.distinct()列表去重,Stream.distinct()使用hashCode()和equals()方法來獲取不同的元素,因此使用這種寫法,對象需要重寫hashCode()和equals()方法!

對PenBean對象重寫hashCode()方法,代碼如下:

  1. @Override 
  2. public int hashCode() { 
  3.     return Objects.hash(type, color); 

在運行測試demo,結果如下:

  1. =========新數據====== 
  2. PenBean{type='鉛筆', color='black'
  3. PenBean{type='鉛筆', color='white'
  4. PenBean{type='中性筆', color='white'

即可實現集合元素的去重操作!

那為什么當我們使用String類型的對象作為集合元素時,沒有重寫呢?

因為 java 中String原生類,已經重寫好了,源碼如下:

  1. public final class String 
  2. implements java.io.Serializable, Comparable<String>, CharSequence { 
  3.   
  4.  @Override 
  5.  public boolean equals(Object anObject) { 
  6.         if (this == anObject) { 
  7.             return true
  8.         } 
  9.         if (anObject instanceof String) { 
  10.             String anotherString = (String)anObject; 
  11.             int n = value.length; 
  12.             if (n == anotherString.value.length) { 
  13.                 char v1[] = value; 
  14.                 char v2[] = anotherString.value; 
  15.                 int i = 0; 
  16.                 while (n-- != 0) { 
  17.                     if (v1[i] != v2[i]) 
  18.                         return false
  19.                     i++; 
  20.                 } 
  21.                 return true
  22.             } 
  23.         } 
  24.         return false
  25.     } 
  26.   
  27.  @Override 
  28.  public int hashCode() { 
  29.     int h = hash; 
  30.     if (h == 0 && value.length > 0) { 
  31.         char val[] = value; 
  32.  
  33.         for (int i = 0; i < value.length; i++) { 
  34.             h = 31 * h + val[i]; 
  35.         } 
  36.         hash = h; 
  37.     } 
  38.     return h; 

四、HashSet去重操作

在上面的分享中,我們介紹了 List 的集合去重操作!其中網友還提到了HashSet可以實現元素的去重!

的確,HashSet集合天然支持元素不重復!

實踐代碼如下!

還是先創建一個對象PenBean,同時重寫Object中的equals()和hashCode()方法,如下:

  1. /** 
  2.  * 筆實體 
  3.  */ 
  4. public class PenBean { 
  5.     /**類型*/ 
  6.     private String type; 
  7.     /**顏色*/ 
  8.     private String color; 
  9.     //... 省略 setter 和 getter 
  10.     public PenBean(String type, String color) { 
  11.         this.type = type; 
  12.         this.color = color; 
  13.     } 
  14.     @Override 
  15.     public String toString() { 
  16.         return "PenBean{" + 
  17.                 "type='" + type + '\'' + 
  18.                 ", color='" + color + '\'' + 
  19.                 '}'
  20.     } 
  21.   
  22.  @Override 
  23.  public boolean equals(Object o) { 
  24.       if (this == o) return true
  25.       if (o == null || getClass() != o.getClass()) return false
  26.       PenBean penBean = (PenBean) o; 
  27.       //當type、color 內容都相等的時候,才返回true 
  28.       return Objects.equals(type, penBean.type) && 
  29.           Objects.equals(color, penBean.color); 
  30.  } 
  31.   
  32.  @Override 
  33.  public int hashCode() { 
  34.     return Objects.hash(type, color); 
  35.  } 
  36.    

創建測試 demo,如下:

  1. public static void main(String[] args) { 
  2.     //添加信息 
  3.     List<PenBean> penBeanList = new ArrayList<PenBean>(); 
  4.     penBeanList.add(new PenBean("鉛筆","black")); 
  5.     penBeanList.add(new PenBean("鉛筆","white")); 
  6.     penBeanList.add(new PenBean("鉛筆","black")); 
  7.     penBeanList.add(new PenBean("中性筆","white")); 
  8.     penBeanList.add(new PenBean("中性筆","white")); 
  9.  
  10.     //新數據 
  11.     List<PenBean> newPenBeanList = new ArrayList<PenBean>(); 
  12.     //set去重 
  13.     HashSet<PenBean> set = new HashSet<>(penBeanList); 
  14.     newPenBeanList.addAll(set); 
  15.  
  16.     //輸出結果 
  17.     System.out.println("=========新數據======"); 
  18.     for (PenBean penBean : newPenBeanList) { 
  19.         System.out.println(penBean.toString()); 
  20.     } 

輸出結果如下:

  1. =========新數據====== 
  2. PenBean{type='鉛筆', color='white'
  3. PenBean{type='鉛筆', color='black'
  4. PenBean{type='中性筆', color='white'

很明細,返回的新集合沒有重復元素!

那HashSet是怎么做的的呢?

打開HashSet的源碼,查看我們傳入的構造方法如下:

  1. public HashSet(Collection<? extends E> c) { 
  2.     map = new HashMap<>(Math.max((int) (c.size()/.75f) + 1, 16)); 
  3.     addAll(c); 

很顯然,首先創建了一個HashMap對象,然后調用addAll()方法,繼續往下看這個方法!

  1. public boolean addAll(Collection<? extends E> c) { 
  2.     boolean modified = false
  3.     for (E e : c) 
  4.         if (add(e)) 
  5.             modified = true
  6.     return modified; 

首先遍歷List中的元素,然后調用add()方法,這個方法,源碼如下:

  1. public boolean add(E e) { 
  2.     return map.put(e, PRESENT)==null

其實,就是向HashMap對象中插入元素,其中PRESENT是一個new Object()常量!

  1. private static final Object PRESENT = new Object(); 

到這里就基本很清楚了,向HashSet中添加元素,其實等同于

  1. Map<Object,Object> map = new HashMap<Object,Object>(); 
  2. map.put(e,new Object);//e表示要插入的元素 

其中插入的元素e,就是HashMap中的key!

我們知道HashMap,是通過equals()和hashCode()來判斷插入的key是否為同一個key,因此,當我們對PenBean對象進行重寫equals()和hashCode()時,保證判斷是同一個key時,就可以達到元素去重的目的!

最后,對已經去重的集合HashSet,再通過ArrayList中的addAll()方法進行包裝,即可得到我們想要的不包含重復元素的數據!

 

責任編輯:武曉燕 來源: Java極客技術
相關推薦

2021-12-15 06:58:13

List 集合LinkedHashS

2021-12-21 07:07:43

HashSet元素數量

2021-12-08 06:53:29

面試動態代理

2022-09-29 07:30:57

數據庫索引字段

2020-09-30 06:49:25

MySQL查詢刪除

2024-10-29 08:17:43

2015-08-13 10:29:12

面試面試官

2020-08-17 07:40:19

消息隊列

2023-10-12 07:35:45

面試線程通信

2010-08-12 16:28:35

面試官

2023-02-16 08:10:40

死鎖線程

2024-10-15 10:00:06

2021-10-14 06:51:55

數據庫SQL

2024-06-18 14:08:22

2025-04-03 09:12:26

GolangWaitGroup工具

2025-11-20 08:49:23

2024-02-20 14:10:55

系統緩存冗余

2024-03-18 14:06:00

停機Spring服務器

2024-09-11 22:51:19

線程通訊Object

2025-03-17 00:00:00

點贊
收藏

51CTO技術棧公眾號

日韩美女主播视频| 亚洲成色www8888| 亚洲精品自在在线观看| 一区二区自拍偷拍| 亚洲天堂免费| 精品91自产拍在线观看一区| 黄色片一级视频| 一区二区三区视频在线观看视频| 精品中文字幕一区二区小辣椒| 久热精品视频在线观看| 无码一区二区精品| jvid一区二区三区| 亚洲不卡av一区二区三区| 欧美日本亚洲| 亚洲av片不卡无码久久| 成人全视频免费观看在线看| 依依成人精品视频| 欧美午夜视频在线| 国产成人三级在线播放| 欧美精品一区二区三区在线播放| 成人久久一区二区| 日本一级淫片免费放| 精品国产一级毛片| 91精品国产综合久久久久久久 | 国产精品伦理一区| 亚洲精品系列| 欧美三级日韩在线| 日韩a级在线观看| av在线1区2区| 91视频免费看| 亚洲一区美女视频在线观看免费| 亚洲成人第一网站| 一区久久精品| 久久亚洲成人精品| 精品人伦一区二区三电影 | 欧美日韩久久不卡| 看av免费毛片手机播放| 亚洲资源一区| 国产精品毛片久久久久久久| 久久五月天婷婷| 蜜臀av中文字幕| 国产精品一区二区你懂的| 国产精品美女网站| 日日骚av一区二区| 亚洲少妇自拍| 日韩激情视频在线| 性折磨bdsm欧美激情另类| 成人国产网站| 欧美在线不卡一区| 国产天堂在线播放| 欧美1级2级| 欧美视频二区36p| 久久久久久久久久久99| 国产91足控脚交在线观看| 亚洲视频一区二区在线| 色撸撸在线观看| 欧美边添边摸边做边爱免费| 国产精品你懂的在线| 日本一区视频在线播放| 国产在线91| 国产欧美一区二区精品忘忧草| 国产精品久久久久久久av大片| 日本免费在线观看视频| 免费看的黄色欧美网站| 欧美亚洲日本网站| 日本中文字幕第一页| 乱码第一页成人| 国产精品扒开腿爽爽爽视频| 无码人妻一区二区三区免费| 日韩成人一区二区三区在线观看| 国产精品久久97| 一级片一区二区三区| 91精品蜜臀一区二区三区在线| 中国日韩欧美久久久久久久久| av网在线播放| 久久在线免费| 欧美成人午夜视频| 久草视频在线资源| 激情久久综合| 日韩av免费网站| 中文字幕 欧美激情| 精品一区二区三区日韩| 亚洲一区二区三区xxx视频| 午夜精品小视频| 久久国产日本精品| 国产精品欧美日韩一区二区| 中文字幕在线2019| 国产福利精品一区| 久久久久久亚洲精品不卡4k岛国| 一卡二卡三卡在线| 国产一区二区三区美女| 国产一级特黄a大片99| 色网站在线免费观看| 美女视频一区二区三区| 91香蕉亚洲精品| 狠狠躁夜夜躁av无码中文幕| 久久久亚洲精品石原莉奈| 亚洲精品不卡| 成人三级小说| 欧美三级中文字幕在线观看| 久久久久99人妻一区二区三区| 亚洲激情播播| 操日韩av在线电影| 国产精品一区二区三区四| 老司机精品视频导航| 国产精品乱码| 97视频在线观看网站| 亚洲一级二级三级在线免费观看| 日本黄网站免费| 久久伦理中文字幕| 亚洲日韩中文字幕| 免费在线观看亚洲| 日本欧美加勒比视频| 国产精品午夜av在线| 91精品国产91久久久久游泳池 | 精品视频久久久久久| 一级全黄裸体片| 国产一区二区三区网| 久久69精品久久久久久国产越南| 国产一区免费看| 久久资源在线| 日产日韩在线亚洲欧美| 国产理论片在线观看| 国产亚洲自拍一区| 亚洲 欧美 综合 另类 中字| 欧美成a人片免费观看久久五月天| 亚洲国产欧美自拍| 久久人妻无码aⅴ毛片a片app | 久久久久久有精品国产| 亚洲天堂视频网| 久久综合国产精品| 国产 日韩 欧美在线| 国产亚洲高清一区| 91精品久久久久久久久99蜜臂| 朝桐光av一区二区三区| 欧美~级网站不卡| 国产一区私人高清影院| 国内三级在线观看| 天天亚洲美女在线视频| 日本wwww色| 欧美在线亚洲| 亚洲va欧美va在线观看| 视频三区在线| 欧美丝袜丝交足nylons图片| 五级黄高潮片90分钟视频| 日韩网站在线| 精品国产区在线| 超碰资源在线| 亚洲激情免费观看| 久久久久亚洲av成人片| 国产成人免费在线观看| 欧美另类videos| 香蕉成人app| 欧美高跟鞋交xxxxhd| 国产黄a三级三级三级| 亚洲欧美一区二区三区孕妇| 久久久福利影院| 久久影院资源站| 欧美激情综合色综合啪啪五月| 亚洲av无码国产精品久久不卡| jlzzjlzz亚洲日本少妇| 日韩a级黄色片| 999在线精品| 午夜欧美大片免费观看| 亚州精品国产精品乱码不99按摩| 国产日本欧美一区二区| 国产精品亚洲二区在线观看| 国产精品自拍区| 国产精品久久久久久亚洲调教| 高清美女视频一区| 欧美人xxxx| 美国黄色小视频| 岛国一区二区在线观看| 国产中文字幕二区| 国产99久久| 国产日本欧美在线观看| 肉体视频在线| 日韩av在线网页| 最新中文字幕在线观看视频| 国产精品不卡一区| 麻豆tv在线播放| 亚洲男人都懂第一日本| 国产成人拍精品视频午夜网站 | 欧美一区二区三区性视频| 国产a免费视频| 99视频精品在线| 久久婷婷国产精品| 99精品网站| 欧美一级电影免费在线观看| 国产黄色免费在线观看| 91精品黄色片免费大全| 91在线看视频| 中文字幕免费观看一区| 好吊操视频这里只有精品| 老鸭窝毛片一区二区三区| 麻豆中文字幕在线观看| 加勒比色老久久爱综合网| 国产精品久久久久久久久久新婚 | 欧美成人免费大片| 婷婷丁香花五月天| 欧美日韩成人综合在线一区二区| 久久免费视频99| 国产日韩欧美一区二区三区综合 | 国产剧情一区二区在线观看| 91精品国产色综合| 麻豆最新免费在线视频| 日韩久久午夜影院| 国产裸体永久免费无遮挡| 激情懂色av一区av二区av| 欧美性生给视频| 99v久久综合狠狠综合久久| 婷婷激情综合五月天| 性高湖久久久久久久久| 亚洲精品天堂成人片av在线播放| 最近国产精品视频| 99国产在线视频| h1515四虎成人| 欧美一级成年大片在线观看| 羞羞视频在线观看免费| 在线性视频日韩欧美| 天堂网2014av| 日韩精品中文字幕一区二区三区 | 正在播放国产对白害羞| www.亚洲在线| 麻豆网站免费观看| 美美哒免费高清在线观看视频一区二区| 久无码久无码av无码| 911久久香蕉国产线看观看| 欧美裸体网站| 人人网欧美视频| 国产精品免费一区二区三区观看 | 亚洲free性xxxx护士hd| 中文.日本.精品| 欧美一级大片在线免费观看| heyzo高清中文字幕在线| 欧美xxxx18性欧美| 日韩三级影院| 综合久久五月天| 国产乱子伦三级在线播放| 日韩高清欧美高清| 少妇人妻精品一区二区三区| 欧美本精品男人aⅴ天堂| 国产欧美第一页| 在线不卡欧美精品一区二区三区| 中文字幕a级片| 91久久精品日日躁夜夜躁欧美| 欧美亚洲精品天堂| 无吗不卡中文字幕| 日韩三级av在线| 香蕉av福利精品导航| 日韩免费一二三区| 亚洲电影中文字幕在线观看| 久久久久久久福利| 亚洲一区中文在线| 国产真实的和子乱拍在线观看| 亚洲自拍偷拍九九九| 国产一级淫片免费| 亚洲一区二区黄色| 日韩成人高清视频| 精品福利免费观看| 亚洲天堂一区在线观看| 日韩欧美国产免费播放| 69视频免费看| 欧美三级视频在线| 国产男女裸体做爰爽爽| 欧美岛国在线观看| 三级在线观看网站| 亚洲欧美另类自拍| 亚洲视频一区在线播放| 欧美日韩极品在线观看一区| 国产又粗又猛又色又| 日韩你懂的在线播放| 天天操天天射天天舔| 亚洲欧美在线看| www.成人.com| 麻豆乱码国产一区二区三区 | 一区二区三区.www| 日本少妇裸体做爰| 日韩欧美在线观看视频| а中文在线天堂| 91精品国产综合久久精品图片| 亚洲大尺度视频| 精品呦交小u女在线| av免费在线一区二区三区| 美女精品视频一区| 日本а中文在线天堂| 国产自摸综合网| 国产精品天天看天天狠| 日本精品一区二区三区高清 久久 日本精品一区二区三区不卡无字幕 | 国产91美女视频| 精品一区二区免费| 高清中文字幕mv的电影| 国产日韩v精品一区二区| 欧美老熟妇一区二区三区| www..com久久爱| 黄色av免费播放| 亚洲男人天堂av| 国产日韩精品中文字无码| 亚洲精品国产一区二区精华液 | 在线观看av中文字幕| 中文一区在线播放| 日韩黄色a级片| 欧美图片一区二区三区| 男人天堂网在线视频| 日韩中文字幕在线| 欧美gv在线| 亚洲japanese制服美女| 自拍偷拍欧美一区| 日韩免费在线观看av| 青青草伊人久久| 日本69式三人交| 亚洲欧美区自拍先锋| 好吊色在线视频| 精品sm在线观看| 日本三级在线播放完整版| 2019av中文字幕| 91精品入口| 91传媒视频在线观看| 免费一区二区三区视频导航| 国产一级大片免费看| 美国一区二区三区在线播放| 风间由美一二三区av片| 夜夜嗨av一区二区三区| 在线免费看av的网站| 亚洲免费电影在线观看| 福利成人导航| 亚洲va久久久噜噜噜| 欧美日韩国产传媒| 成人黄色av片| 成人免费视频app| 男女羞羞免费视频| 欧美电影一区二区三区| 中文字幕日本在线观看| 日韩av免费在线观看| 麻豆精品99| 青青青青草视频| 成人午夜视频福利| 激情小说中文字幕| 91精品国产日韩91久久久久久| 一级日本在线| 91精品国产自产在线观看永久| 国产欧美日韩| 99草草国产熟女视频在线| 91色porny在线视频| 黄色片视频网站| 亚洲国模精品私拍| 丁香高清在线观看完整电影视频| 7777精品伊久久久大香线蕉语言| 91精品天堂福利在线观看 | 日韩精品影院| 日本精品一区二区| 欧美aa在线视频| 乱老熟女一区二区三区| 欧美日本一区二区三区四区 | 国产精品进线69影院| 中文字幕精品一区二| 中文字幕日本欧美| 久久精品国产福利| 亚洲永久激情精品| 精品在线观看免费| 免费在线黄色网| 日韩精品一区国产麻豆| 岛国片av在线| 久久久久久久久久久久久久一区| 久久免费高清| 日本一区二区视频在线播放| 依依成人综合视频| 亚洲成人黄色片| 91精品国产一区| 国产传媒欧美日韩成人精品大片| 别急慢慢来1978如如2| 国产精品久久三区| 国产高清第一页| 91精品国产网站| 成人短片线上看| 色婷婷激情视频| 亚洲第一综合色| 精彩国产在线| 成人黄色大片在线免费观看| 综合久久99| 黄色片视频免费观看| 欧美性猛片aaaaaaa做受| 91极品在线| 老牛影视免费一区二区| 日本不卡在线视频| 精品97人妻无码中文永久在线| 亚洲精品狠狠操| 国产一区高清| 韩日视频在线观看| 久久精品夜夜夜夜久久| 国产精品羞羞答答在线| 97香蕉超级碰碰久久免费的优势| 不卡日本视频| 熟女人妻一区二区三区免费看| 欧美视频精品一区| 国产在线高清视频| 美媛馆国产精品一区二区| 激情五月婷婷综合| 欧美特黄aaaaaa| 欧美床上激情在线观看|