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

Java ArrayList 的不同排序方法

開發 后端
在這篇文章中,將討論ArrayList 中一種極其重要的操作,你很有可能需要在企業應用開發中實現它。它就是ArrayList元素的排序。

由于其功能性和靈活性,ArrayList是 Java 集合框架中使用最為普遍的集合類之一。ArrayList 是一種 List 實現,它的內部用一個動態數組來存儲元素,因此 ArrayList 能夠在添加和移除元素的時候進行動態的擴展和縮減。你可能已經使用過 ArrayList,因此我將略過基礎部分。如果你對 ArrayList 還不熟悉,你可以參考它的 API 文檔可以很容易理解在 ArrayList 上執行基本的操作。

在這篇文章中,我將討論ArrayList中一種極其重要的操作,你很有可能需要在企業應用開發中實現它。它就是ArrayList元素的排序。

排序字符串對象的 ArrayList

考慮一個 ArrayList 存儲著以字符串形式存在的國名(country name),為了對這個 ArrayList 進行排序,你需要調用 Collections.sort()方法,傳遞由國名構成的 ArrayList 對象。這種方法將按照自然順序(按字母升序)對元素(國名)進行排序。讓我們為此來寫一段代碼。

SortArrayListAscendingDescending.java

  1. package guru.springframework.blog.sortarraylist.ascendingdescending; 
  2. import java.util.ArrayList; 
  3. import java.util.Collections; 
  4. public class SortArrayListAscendingDescending { 
  5. private ArrayList arrayList; 
  6. public SortArrayListAscendingDescending(ArrayList arrayList) { 
  7. this.arrayList = arrayList; 
  8. public ArrayList getArrayList() { 
  9. return this.arrayList; 
  10. public ArrayList sortAscending() { 
  11. Collections.sort(this.arrayList); 
  12. return this.arrayList; 
  13. public ArrayList sortDescending() { 
  14. Collections.sort(this.arrayList, Collections.reverseOrder()); 
  15. return this.arrayList; 

在上面的類中,我們在構造器中初始化了一個 ArrayList 對象。在 sortAscending()方法中,我們調用了 Collections.sort()方法,并傳遞這個初始化的 ArrayList對象為參數,返回排序后的 ArrayList。在 sortDescending()方法中,我們調用重載的 Collections.sort()方法讓其按照降序對元素排序,這個版本的 Collections.sort()接收ArrayList對象作為***個參數,一個由 Collections.reverseOrder()方法返回的 Comparator 對象作為第二個參數。我們將會在稍后講解 Comparator。為了測試排序功能,我們將寫一段測試代碼。

SortArrayListAscendingDescendingTest.java

  1. package guru.springframework.blog.sortarraylist.ascendingdescending; 
  2. import org.junit.Test; 
  3. import java.util.ArrayList; 
  4. import static org.junit.Assert.*; 
  5. public class SortArrayListAscendingDescendingTest { 
  6. <a href="http://www.jobbole.com/members/madao">@Test</a> 
  7. public void testSortAscendingDescending() throws Exception { 
  8. ArrayList countryList = new ArrayList&lt;&gt;(); 
  9. countryList.add("France"); 
  10. countryList.add("USA"); 
  11. countryList.add("India"); 
  12. countryList.add("Spain"); 
  13. countryList.add("England"); 
  14. SortArrayListAscendingDescending sortArrayList = new SortArrayListAscendingDescending(countryList); 
  15. ArrayList unsortedArrayList = sortArrayList.getArrayList(); 
  16. System.out.println("Unsorted ArrayList: " + unsortedArrayList); 
  17. ArrayList sortedArrayListAscending = sortArrayList.sortAscending(); 
  18. System.out.println("Sorted ArrayList in Ascending Order : " + sortedArrayListAscending); 
  19. ArrayList sortedArrayListDescending = sortArrayList.sortDescending(); 
  20. System.out.println("Sorted ArrayList in Descending Order: " + sortedArrayListDescending); 

在上面的測試代碼中,我們創建一個 ArrayList 對象,并添加了 5 個字符串對象代表 5 個國家的名字。然后我們調用 getArrayList()、sortAscending()和 sortDescending()方法,并打印這些方法返回的 ArrayList 對象。

輸出如下:

  1. ------------------------------------------------------- 
  2. T E S T S 
  3. -------------------------------------------------------   
  4. Running guru.springframework.blog.sortarraylist.ascendingdescending.SortArrayListAscendingDescendingTest   
  5. Unsorted ArrayList: [France, USA, India, Spain, England] 
  6. Sorted ArrayList in Ascending Order : [England, France, India, Spain, USA] 
  7. Sorted ArrayList in Descending Order: [USA, Spain, India, France, England]   
  8. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.001 sec - in guru.springframework.blog.sortarraylis 

到目前為止,所要排序的 ArrayList 元素都是非常簡單的,我們僅僅只是調用 Collections.sort()方法并傳遞了需要排序的 ArrayList 對象作為參數。但是更多的是你會遇到一些復雜的情景下對 ArrayList 進行排序。

Collections.sort() 方法對 ArrayList 的元素或者任何其他 List 的實現提供的可比較的元素進行排序,這意味著這些元素的類需要實現 java.lang 包的 Comparable 接口。正如 String 類實現了 Comparable 接口,我們就可以對由國名構成的 ArrayList 排序。有些其他的標準 Java 類實現了 Comparable 接口,包括原始的包裝類,例如 Integer、Short、Double、Float、Boolean、BigInteger、BigDecimal、File 和 Date 類都實現了 Comparable 接口。

使用Comparable排序ArrayList

Comparable 是帶有單一 compareTo()方法的接口。一個實現了 Comparable 接口的類對象可以與其它同類型的對象進行比較,實現 Comparable 接口的類需要重寫 compareTo()方法,這個方法接收一個同類型的對象,并實現這個對象和傳遞給方法的另一個對象比較的邏輯。compareTo()方法返回Int 類型的比較結果,分別代表下面的含義:

  • 正值表示當前對象比傳遞給 comPareTO()的對象大

  • 負值表示當前對象比傳遞給 comPareTO()的對象小

  • 零表示兩個對象相等

讓我們來舉一個例子,JobCandidate 類的對象保存在 ArrayList 中并準備對其進行排序。JobCandidate 類有三個成員變量:字符串類型的姓名和性別、整型的年齡。我們想要對保存在 ArrayList 中的 JobCandidate 對象按照年齡進行排序。因此我們要讓 JobCandidate 類實現 Comparable 接口并重寫 compareTo()方法。

JobCandidate類的代碼如下:

JobCandidate.java

  1. package guru.springframework.blog.sortarraylist.comparable; 
  2. public class JobCandidate implements Comparable { 
  3. private String name; 
  4. private String gender; 
  5. private int age; 
  6. public JobCandidate(String name, String gender, int age) { 
  7. this.name = name; 
  8. this.gender = gender; 
  9. this.age = age; 
  10. public String getName() { 
  11. return name; 
  12. public String getGender() { 
  13. return gender; 
  14. public int getAge() { 
  15. return age; 
  16. @Override 
  17. public int compareTo(JobCandidate candidate) { 
  18. return (this.getAge() < candidate.getAge() ? -1 : 
  19. (this.getAge() == candidate.getAge() ? 0 : 1)); 
  20. @Override 
  21. public String toString() { 
  22. return " Name: " + this.name + ", Gender: " + this.gender + ", age:" + this.age; 

在上面 JobCandidate 類被重寫的 compareTo()方法中,我們實現了基于年齡的比較邏輯。我見過很多程序員將(this.getAge() – candidate.getAge())作為返回的比較結果。盡管使用這種 return 語句看上去似乎很吸引人,并且也不會對我們的例子造成影響,我的建議是遠離這種語句。想象一下,比較整數值,其中有一個或者兩個都是負數的結果。這會導致 一些錯誤,讓你的程序行為不定,而且更重要的是,這樣的錯誤是很細微的,尤其是在大型的企業應用中很難檢測出來。下面我們將寫一個輔助類,為委托方對包含了 JobCandidate 元素的 ArrayList 對象進行排序。

JobCandidateSorter.java

  1. package guru.springframework.blog.sortarraylist.comparable; 
  2. import java.util.ArrayList; 
  3. import java.util.Collections; 
  4. public class JobCandidateSorter { 
  5. ArrayList jobCandidate = new ArrayList<>(); 
  6. public JobCandidateSorter(ArrayList jobCandidate) { 
  7. this.jobCandidate = jobCandidate; 
  8. public ArrayList getSortedJobCandidateByAge() { 
  9. Collections.sort(jobCandidate); 
  10. return jobCandidate; 

在 JobCandidateSorter 類中,我們初始化了一個 ArrayList 對象,委托方將通過構造函數實例化 JobCandidateSorter 。然后我們編寫了 getSortedJobCandidateByAge()方法,在這個方法中,我們調用 Collections.sort()并傳遞已經初始化了的 ArrayList 為參數,***返回排序后的 ArrayList。

接下來,我們寫一個測試類來測試一下我們的代碼。

JobCandidateSorterTest.java

  1. package guru.springframework.blog.sortarraylist.comparable; 
  2. import org.junit.Test; 
  3. import java.lang.reflect.Array; 
  4. import java.util.ArrayList; 
  5. import static org.junit.Assert.*; 
  6. public class JobCandidateSorterTest { 
  7. <a href="http://www.jobbole.com/members/madao">@Test</a> 
  8. public void testGetSortedJobCandidateByAge() throws Exception { 
  9. JobCandidate jobCandidate1 = new JobCandidate("Mark Smith""Male"26); 
  10. JobCandidate jobCandidate2 = new JobCandidate("Sandy Hunt""Female"23); 
  11. JobCandidate jobCandidate3 = new JobCandidate("Betty Clark""Female"20); 
  12. JobCandidate jobCandidate4 = new JobCandidate("Andrew Styne""Male"24); 
  13. ArrayList jobCandidateList = new ArrayList&lt;&gt;(); 
  14. jobCandidateList.add(jobCandidate1); 
  15. jobCandidateList.add(jobCandidate2); 
  16. jobCandidateList.add(jobCandidate3); 
  17. jobCandidateList.add(jobCandidate4); 
  18. JobCandidateSorter jobCandidateSorter = new JobCandidateSorter(jobCandidateList); 
  19. ArrayList sortedJobCandidate = jobCandidateSorter.getSortedJobCandidateByAge(); 
  20. System.out.println("-----Sorted JobCandidate by age: Ascending-----"); 
  21. for (JobCandidate jobCandidate : sortedJobCandidate) { 
  22. System.out.println(jobCandidate); 

在上面的測試類中,我們創建了四個 JobCandidate 對象并把它們添加到 ArrayList,然后傳遞這個 ArrayList 到構造函數來實例化 JobCandidateSorter 類。***,我們調用 JobCandidateSorter 類的 getSortedJobCandidateByAge()方法,并打印這個方法返回的排序后的 ArrayList。測試的輸出結果如下:

  1. ------------------------------------------------------- 
  2. T E S T S 
  3. ------------------------------------------------------- 
  4. Running guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest 
  5. -----Sorted JobCandidate by age: Ascending----- 
  6. Name: Betty Clark, Gender: Female, age:20 
  7. Name: Sandy Hunt, Gender: Female, age:23 
  8. Name: Andrew Styne, Gender: Male, age:24 
  9. Name: Mark Smith, Gender: Male, age:26 
  10. Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.003 sec 
  11. - in guru.springframework.blog.sortarraylist.comparable.JobCandidateSorterTest 

使用 Comparable 對 ArrayList 排序是一種常用的方法。但是你必須知道有某些限制。你想要排序的對象的類必須實現 Comparable 并覆寫 compareTo()方法。這基本上意味著你將只能基于一個成員變量來比較對象(我們例子中的年齡字段)。如果要求你按照姓名和年齡來對 JobCandidate 對象進行排序怎么辦? Comparable 就不是解決的方法了。另外,比較邏輯是需要進行比較的對象的類的一部分,它消除了比較邏輯可復用性的可能。Java 通過使用在 java.util 包下提供的Comparator接口解決了上述的比較需求。

使用 Comparator 排序 ArrayList

Comparator 接口與Comparable 接口相似也提供了一個單一的比較方法叫作 compare()。然而,與 Comparable的 compareTo()方法不同的是,這個 compare()接受兩個同類型的不同對象進行比較。

我們將用 Comparator 對我們之前使用過的相同 JobCandidate 類對象進行排序。我們將通過實現 Comparatoras 匿名內部類,允許對 JobCandidate 對象按照年齡和姓名進行排序。

下面是使用了 Comparator 的 JobCandidate 類代碼

JobCandidate.java

  1. package guru.springframework.blog.sortarraylist.comparator; 
  2. import java.util.Comparator; 
  3. public class JobCandidate { 
  4. private String name; 
  5. private String gender; 
  6. private int age; 
  7. public JobCandidate(String name, String gender, int age) { 
  8. this.name = name; 
  9. this.gender = gender; 
  10. this.age = age; 
  11. public String getName() { 
  12. return name; 
  13. public String getGender() { 
  14. return gender; 
  15. public int getAge() { 
  16. return age; 
  17. public static Comparator ageComparator = new Comparator() { 
  18. @Override 
  19. public int compare(JobCandidate jc1, JobCandidate jc2) { 
  20. return (jc2.getAge() < jc1.getAge() ? -1 : 
  21. (jc2.getAge() == jc1.getAge() ? 0 : 1)); 
  22. }; 
  23. public static Comparator nameComparator = new Comparator() { 
  24. @Override 
  25. public int compare(JobCandidate jc1, JobCandidate jc2) { 
  26. return (int) (jc1.getName().compareTo(jc2.getName())); 
  27. }; 
  28. @Override 
  29. public String toString() { 
  30. return " Name: " + this.name + ", Gender: " + this.gender + ", age:" + this.age; 

在上面的類中,從 29 行到 35 行,我們寫了一個匿名類并實現了 compare()方法,按照年齡的降序對 JobCandidate 對象進行排序。從37行到42行,我們又寫了一個匿名類并實現了 compare() 方法,按照姓名的升序對 JobCandidate進行排序。現在我們寫一個類,為委托方對 ArrayList 的元素進行排序。

JobCandidateSorter.java

  1. package guru.springframework.blog.sortarraylist.comparator; 
  2. import java.util.ArrayList; 
  3. import java.util.Collections; 
  4. public class JobCandidateSorter { 
  5. ArrayList jobCandidate = new ArrayList<>(); 
  6. public JobCandidateSorter(ArrayList jobCandidate) { 
  7. this.jobCandidate = jobCandidate; 
  8. public ArrayList getSortedJobCandidateByAge() { 
  9. Collections.sort(jobCandidate, JobCandidate.ageComparator); 
  10. return jobCandidate; 
  11. public ArrayList getSortedJobCandidateByName() { 
  12. Collections.sort(jobCandidate, JobCandidate.nameComparator); 
  13. return jobCandidate; 

在上面的類中,我們寫了 getSortedJobCandidateByAge()方法,在這個方法內部我們調用了 Collections.sort()的重載版本,這個版本傳遞要被排序的 ArrayList 對象和比較年齡的 Comparator 對象。在 getSortedJobCandidateByName()方法內部,我們又調用了 Collections.sort()的另一個重載版本,這個版本傳遞要被排序的 ArrayList 對象和比較姓名的 Comparator 對象。

讓我們寫一個測試類來測試我們的代碼。

JobCandidateSorterTest.java

  1. package guru.springframework.blog.sortarraylist.comparator; 
  2. import guru.springframework.blog.sortarraylist.comparator.JobCandidate; 
  3. import guru.springframework.blog.sortarraylist.comparator.JobCandidateSorter; 
  4. import org.junit.Before; 
  5. import org.junit.Test; 
  6. import java.util.ArrayList; 
  7. import static org.junit.Assert.*; 
  8. public class JobCandidateSorterTest { 
  9. JobCandidateSorter jobCandidateSorter; 
  10. @Before 
  11. public void setUp() throws Exception { 
  12. JobCandidate jobCandidate1 = new JobCandidate("Mark Smith""Male"26); 
  13. JobCandidate jobCandidate2 = new JobCandidate("Sandy Hunt""Female"23); 
  14. JobCandidate jobCandidate3 = new JobCandidate("Betty Clark""Female"20); 
  15. JobCandidate jobCandidate4 = new JobCandidate("Andrew Styne""Male"24); 
  16. ArrayList jobCandidateList = new ArrayList&lt;&gt;(); 
  17. jobCandidateList.add(jobCandidate1); 
  18. jobCandidateList.add(jobCandidate2); 
  19. jobCandidateList.add(jobCandidate3); 
  20. jobCandidateList.add(jobCandidate4); 
  21. jobCandidateSorter = new JobCandidateSorter(jobCandidateList); 
  22. <a href="http://www.jobbole.com/members/madao">@Test</a> 
  23. public void testGetSortedJobCandidateByAge() throws Exception { 
  24. System.out.println("-----Sorted JobCandidate by age: Descending-----"); 
  25. ArrayList sortedJobCandidate = jobCandidateSorter.getSortedJobCandidateByAge(); 
  26. for (JobCandidate jobCandidate : sortedJobCandidate) { 
  27. System.out.println(jobCandidate); 
  28. <a href="http://www.jobbole.com/members/madao">@Test</a> 
  29. public void testGetSortedJobCandidateByName() throws Exception { 
  30. System.out.println("-----Sorted JobCandidate by name: Ascending-----"); 
  31. ArrayList sortedJobCandidate = jobCandidateSorter.getSortedJobCandidateByName(); 
  32. for (JobCandidate jobCandidate : sortedJobCandidate) { 
  33. System.out.println(jobCandidate); 

在測試類中我們向 ArrayList 中添加若干 JobCandidate 對象,并使用 Before 注釋在測試單元的 setup()方法中創建了一個 JobCandidateSorter 對象。如果你是一個 Junit 新手,可以參考我以前的文章包括 Junit 注釋(Junit 單元測試系列)。 在 testGetSortedJobCandidateByAge()測試方法中我們調用了 getSortedJobCandidateByAge()方法,并打印了該方法返回的排序后的 ArrayList。在 testGetSortedJobCandidateByName()測試方法中我們調用了getSortedJobCandidateByName() 方法并同樣打印該方法返回的 ArrayList。測試的輸出如下:

  1. ------------------------------------------------------- 
  2. T E S T S 
  3. ------------------------------------------------------- 
  4. Running guru.springframework.blog.sortarraylist.comparator.JobCandidateSorterTest 
  5. -----Sorted JobCandidate by name: Ascending----- 
  6. Name: Andrew Styne, Gender: Male, age:24 
  7. Name: Betty Clark, Gender: Female, age:20 
  8. Name: Mark Smith, Gender: Male, age:26 
  9. Name: Sandy Hunt, Gender: Female, age:23 
  10. -----Sorted JobCandidate by age: Descending----- 
  11. Name: Mark Smith, Gender: Male, age:26 
  12. Name: Andrew Styne, Gender: Male, age:24 
  13. Name: Sandy Hunt, Gender: Female, age:23 
  14. Name: Betty Clark, Gender: Female, age:20 
  15. Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.023 sec 
  16. - in guru.springframework.blog.sortarraylist.comparator.JobCandidateSorterTest 

總結

在本文中我們看到了 ArrayList 排序的不同方法。一種是使用 Comparable 另一種是使用 Comparator。方法的選擇一直是造成程序員們困惑的原因之一。你最應該記住的就是一個 Comparable 對象可以說“我可以自己與另外一個對象比較”而一個 Comparator 對象可以說“我可以比較兩個不同的對象”。你不能說一個接口比另一個要好。選擇的接口取決于你需要實現的功能。

責任編輯:王雪燕 來源: ImportNew
相關推薦

2015-03-25 11:42:52

Java刪除特定元素

2015-08-04 09:18:26

JavaArrayList元素

2023-09-01 07:38:45

ArrayListArrayst實線類

2023-10-04 18:23:02

插入排序算法

2010-12-23 13:56:55

SharePointIntranet

2010-01-20 09:34:26

List<T>

2015-07-29 13:37:41

妹子處理

2009-06-26 16:31:50

區分不同對象Hibernate

2009-09-17 13:26:55

.NET方法簽名

2019-09-10 07:58:01

字符集MySQL數據庫

2021-12-20 07:11:26

Java List排序 Java 基礎

2012-06-08 03:36:30

C#Java

2011-12-30 13:15:53

Java

2021-08-19 10:30:13

Java集合排序程序開發

2023-01-03 07:49:45

Java隨機數線程

2019-11-06 16:21:25

ArrayListLinkedListVector

2010-09-02 10:15:46

SQL刪除

2024-02-22 08:59:41

JavaArrayListLinkedList

2011-05-26 14:49:53

ArrayListLinkedList

2009-10-10 09:27:42

Java泛型通用方法
點贊
收藏

51CTO技術棧公眾號

蜜桃av综合| 欧美成a人免费观看久久| 国产精品人妖ts系列视频| 久久国产精品首页| 成人啪啪18免费游戏链接| 成人免费在线电影| 久久99国产精品久久99果冻传媒| 亚洲日本中文字幕| 中文字幕 欧美日韩| 波多野结衣中文在线| 国产欧美综合在线观看第十页| 久久人人爽人人| 日本高清一区二区视频| 成人免费观看在线观看| 国产精品私人影院| 国产精品一区在线观看| 国产在线拍揄自揄拍无码视频| 亚洲不卡视频| 欧洲国产伦久久久久久久| 久久久久99精品成人片| 五月激情丁香婷婷| 黄页网站大全一区二区| 日韩美女视频免费看| 欧美日韩在线国产| 国产精品久久观看| 国产香蕉一区二区三区在线视频 | 亚洲成人一区二区在线观看| 亚洲精品不卡| 亚洲三级中文字幕| 国产成人综合视频| 成人一区二区电影| 久久久www成人免费毛片| 极品美女一区二区三区| 亚洲国产精品va在线看黑人动漫| 国产综合免费视频| jizz在线观看中文| 久久久久亚洲综合| 精品午夜一区二区三区| 高潮一区二区三区乱码| 国产高清不卡一区二区| 成人a在线视频| 中文字幕永久在线观看| 日韩精品免费专区| 日本久久久久久| 天天操天天摸天天干| 精品福利av| 欧美激情国产精品| 国产一级视频在线观看| 国产精品hd| 欧美激情区在线播放| 特级片在线观看| 午夜天堂精品久久久久| 久久夜色精品国产欧美乱| 任我爽在线视频| 999精品视频| 精品激情国产视频| 91香蕉视频在线播放| 国产大片一区| 久久国产精彩视频| 欧美成人免费看| 亚洲第一在线| 18性欧美xxxⅹ性满足| wwwwww国产| 久热re这里精品视频在线6| 人九九综合九九宗合| 青青视频在线免费观看| 日韩不卡一区二区| 国产狼人综合免费视频| 国产又黄又粗又爽| 久久亚洲图片| 国产欧美一区二区三区久久| 欧美三级一区二区三区| 国产伦理一区| 国产精品成人免费视频| 国产又粗又猛又爽又黄的视频一| 国产精品久久久久久模特| 欧美孕妇毛茸茸xxxx| 亚洲男人天堂网址| 国产在线一区观看| 国产精品国产精品国产专区蜜臀ah| 中文字幕日本人妻久久久免费| 亚洲在线观看| 国产精品亚洲精品| 波多野结衣电车痴汉| 麻豆精品一区二区综合av| 亚洲综合在线做性| 青青草超碰在线| 中文字幕一区二区三区四区不卡| 免费亚洲精品视频| 日本成人动漫在线观看| 国产丝袜欧美中文另类| 久久久久久国产精品免费免费| 亚洲伦理在线观看| 久久综合九色欧美综合狠狠 | av在线免费观看国产| 国产精品一区二区日韩| 欧美伊人久久久久久午夜久久久久| 播放灌醉水嫩大学生国内精品| 欧美另类tv| 色婷婷综合久久久久中文一区二区| 久久免费视频3| 四虎影视成人精品国库在线观看| 欧美性猛交xxxx乱大交退制版| 北条麻妃av高潮尖叫在线观看| 亚洲插插视频| 日韩一区二区在线观看视频播放| 中文字幕第六页| 国产亚洲久久| 日韩精品一区在线| 中文字幕人妻一区二区三区在线视频| 日韩精品免费一区二区夜夜嗨| 亚洲黄色av女优在线观看| 天堂资源在线视频| 一区二区三区精品视频在线观看| 日本国产欧美一区二区三区| 精品国产午夜福利| 国产精品一卡二卡| 伊人狠狠色丁香综合尤物| 国产黄色在线网站| 在线观看国产日韩| 噜噜噜在线视频| 午夜久久美女| 成人日韩在线电影| porn亚洲| 亚洲黄色片在线观看| 91插插插插插插插插| 综合亚洲色图| 午夜精品福利在线观看| 国产丰满果冻videossex| 国产精品色在线| 北条麻妃av高潮尖叫在线观看| 亚洲午夜国产成人| 中文字幕亚洲欧美在线| 日日噜噜噜噜人人爽亚洲精品| 久久国产综合精品| 午夜午夜精品一区二区三区文| 高潮毛片在线观看| 欧美日韩综合不卡| 成人性生交大片免费看无遮挡aⅴ| 婷婷久久一区| 国产精品视频自拍| а√中文在线资源库| 亚洲欧洲综合另类| 国产免费黄视频| 老牛国内精品亚洲成av人片| 亚洲天堂av在线免费| 久久国产视频一区| 久久精品在线观看| 日本新janpanese乱熟| 免费看日本一区二区| 欧美在线一级视频| 国产成人久久精品77777综合 | 不卡视频一区二区三区| 99福利在线| 日韩欧美区一区二| 久久这里只有精品免费| 成人一道本在线| 一区二区三区四区| 亚洲天堂资源| 亚洲人成电影在线播放| 欧美人妻精品一区二区三区 | 国产精品丝袜一区二区三区| 国产高清av在线| 欧美日韩国产在线播放网站| 国产探花在线视频| 国产激情视频一区二区在线观看| 婷婷亚洲婷婷综合色香五月| 97精品国产99久久久久久免费| 亚洲国产精品网站| 欧美 日韩 精品| 国产精品无人区| 992kp免费看片| 亚洲福利久久| 欧美中日韩免费视频| 国产一区高清| 欧美肥老妇视频| 无码精品一区二区三区在线 | 日韩欧美第一区| 久久国产精品系列| 丁香婷婷深情五月亚洲| 黄色片视频在线免费观看| 第一sis亚洲原创| 亚洲xxxxx| 日韩理论视频| www.xxxx精品| 视频一区二区免费| 欧美日韩免费观看一区二区三区| 国产精品20p| 国产麻豆日韩欧美久久| 欧美日韩在线免费观看视频| 中文在线综合| 国产福利精品av综合导导航| 伊人免费在线| 亚洲电影免费观看高清完整版在线| 在线免费观看亚洲视频| 国产一区二区三区四| 俄罗斯av网站| 亚洲精品小说| 日韩videos| 国产精品男女| 国产欧美va欧美va香蕉在| 免费在线观看黄色| 日韩成人黄色av| 国产精品色综合| 一道本成人在线| 欧美国产在线看| 欧美国产一区二区在线观看| 女女调教被c哭捆绑喷水百合| 亚洲第一在线| 天天干天天色天天爽| 在线精品视频一区| 国产一区欧美二区三区| 中文字幕色婷婷在线视频| 欧美精品中文字幕一区| 肥臀熟女一区二区三区| 欧美午夜片在线免费观看 | 成人久久久精品乱码一区二区三区 | 成人av二区| 精品无人乱码一区二区三区的优势| 黑人巨大亚洲一区二区久| 欧美日本黄视频| 日本在线视频网| 亚洲欧洲在线免费| 911美女片黄在线观看游戏| 日韩欧美在线视频| 潮喷失禁大喷水aⅴ无码| 99久久国产综合色|国产精品| 日本xxxxxxx免费视频| 亚洲国产美女| 香港三级日本三级a视频| 国产精品福利在线观看播放| 日韩av电影免费在线| 美女久久精品| 国产一区二区视频在线观看| 黄色精品视频| 国产精品啪视频| 主播大秀视频在线观看一区二区| 欧美精品做受xxx性少妇| 国产精品实拍| 亚洲美腿欧美激情另类| 天天综合天天综合| 亚洲精品在线观看视频| 亚洲成人777777| 日韩欧美的一区二区| www.久久久久久久久久| 欧美一二三区在线| 国产99久久九九精品无码免费| 精品久久久久久电影| 国产a∨精品一区二区三区仙踪林| 中文字幕不卡三区| 五月婷婷欧美激情| 国产精品白丝在线| 免费在线观看a级片| 亚洲欧美精品午睡沙发| 欧美精品成人久久| 亚洲一二三专区| 日本三级一区二区| 日韩欧美在线网址| 伊人网av在线| 91精品久久久久久久99蜜桃| av网站在线观看免费| 在线亚洲高清视频| 日韩精品成人在线| 色婷婷av一区二区三区软件| 中文在线免费观看| 日韩欧美成人精品| 亚洲综合久久网| 欧美日韩亚洲综合一区二区三区| av资源免费观看| 在线免费视频一区二区| 一区二区视频免费| 日韩欧美中文字幕公布| 天天干天天操av| 亚洲天堂av高清| 成人看片免费| **欧美日韩vr在线| 亚洲福利影视| 成人美女av在线直播| gogo人体一区| 日韩欧美手机在线| 综合久久十次| 成人在线免费在线观看| 麻豆精品国产传媒mv男同| 佐佐木明希电影| 国产精品 日产精品 欧美精品| 日韩av片免费观看| av中文字幕亚洲| 国产在线免费av| 亚洲成av人综合在线观看| 日批视频免费在线观看| 欧美乱妇15p| 国产影视一区二区| 亚洲国产欧美一区二区丝袜黑人| 隣の若妻さん波多野结衣| 亚洲欧美国产精品| 毛片网站在线| 欧美丰满片xxx777| 欧美xxxx性| 久久96国产精品久久99软件| 99久久.com| 免费黄色福利视频| 国产不卡视频一区二区三区| av网在线播放| 亚洲成人综合在线| 国产美女无遮挡永久免费| 亚洲欧美日韩网| 精品视频一二三| 色偷偷偷亚洲综合网另类| 久草免费在线| 国产ts一区二区| 亚洲午夜剧场| 欧美日韩在线播放一区二区| 青青一区二区三区| 午夜精品久久久久久久无码 | 国产情人综合久久777777| 精品亚洲aⅴ无码一区二区三区| 日本一区二区三区在线观看| 肉色超薄丝袜脚交69xx图片| 欧美性猛交xxxx免费看久久久| 久久精品五月天| 亚洲国产欧美一区二区丝袜黑人 | 视频一区视频二区欧美| 日韩av在线电影观看| 亚洲欧美日韩国产| 黄色网址在线视频| 国产女同互慰高潮91漫画| 久久国产精品系列| 亚洲国产精久久久久久 | 国产一区二区三区四区五区3d | 欧美爱爱网站| 欧美一级片免费播放| 国产精品一区在线观看你懂的| 182在线视频| 亚洲成av人片观看| 丰满人妻av一区二区三区| 裸体女人亚洲精品一区| 精品久久久久久久久久岛国gif| 精品国产一区二区三区四区精华| 国产永久精品大片wwwapp| 久久婷婷五月综合色国产香蕉| 久热成人在线视频| www.555国产精品免费| 悠悠色在线精品| 亚洲乱色熟女一区二区三区| 国产午夜精品视频免费不卡69堂| av软件在线观看| 日本成人精品在线| 国内精品视频在线观看| 国内自拍视频网| 国产精品欧美经典| 日本视频在线观看免费| 亚洲激情电影中文字幕| 黄av在线播放| 91久久久精品| 欧美va天堂在线| 日本人视频jizz页码69| 国产精品乱码久久久久久| 一级片一区二区三区| 精品国模在线视频| 欧美久久亚洲| 男人添女人下部视频免费| 成人精品免费网站| 青青操免费在线视频| 亚洲男人av在线| 国产黄色一区| 日韩精品免费一区| 久久99国内精品| 日韩精品无码一区二区三区久久久| 中文一区在线播放| 国产内射老熟女aaaa∵| 永久免费看mv网站入口亚洲| 三级在线观看视频| www.成人av.com| 亚洲影院免费| 日韩av手机在线免费观看| 精品国产免费人成电影在线观看四季 | 国产午夜精品全部视频播放| 欧美特黄色片| 人人干视频在线| 99视频精品全部免费在线| 91视频综合网| 欧美一区二区三区人| 欧美一区二区三区在线观看免费| 国产精品69久久| 九色成人国产蝌蚪91| 91视频这里只有精品| 一区在线中文字幕| 欧美熟妇乱码在线一区| 国产精品美女在线| 欧美呦呦网站| 亚洲熟女一区二区三区| 在线视频一区二区免费| 在线观看电影av| 欧美一区观看| 成人在线综合网站| 一级黄色片在线看| 2019亚洲日韩新视频| 亚洲精品久久久| 人妻少妇无码精品视频区| 日韩一区二区免费在线观看|