亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > List集合有哪些特性?

List集合有哪些特性?

來源:千鋒教育
發布人:zyh
時間: 2023-06-12 16:44:00 1686559440

  全文大約【5800】字,不說廢話,只講可以讓你學到技術、明白原理的純干貨!本文帶有豐富的案例及配圖視頻,讓你更好地理解和運用文中的技術概念,并可以給你帶來具有足夠啟迪的思考......

List集合有哪些特性

  一. List集合簡介

  1.概述

  List本身是一個接口,該接口繼承自Collection接口,它有兩個常用的實現子類ArrayList和LinkedList。從功能特性上來看,List是有序、可重復的單列集合,集合中的每個元素都有對應的順序索引,我們可以通過該索引來訪問指定位置上的集合元素。默認情況下,List會按元素的添加順序給元素設置索引,第一個添加到List集合中的元素索引為0,第二個為1,后面依此類推。所以List的行為和數組幾乎完全相同,它們都是有序的存儲結構。另外List集合中允許有重復的元素,甚至可以有多個null值。

  但是如果我們是使用數組來添加和刪除元素,就會非常的不方便。比如從一個已有的數組{'A', 'B', 'C', 'D', 'E'}中刪除索引為2的元素,這個“刪除”操作實際上是把'C'后面的元素依次往前挪一個位置;而“添加”操作實際上是把指定位置以后的元素依次向后挪一個位置,騰出位置給新加入的元素。針對這兩種操作,使用數組實現起來都會非常麻2. 類關系

  我們來看看List接口的類關系,如下圖所示:煩。所以在實際應用中,我們增刪元素時,一般都是使用有序列表(如ArrayList),而不是使用數組。

  2.類關系

  我們來看看List接口的類關系,如下圖所示:

1684745831000.image

  從這個類關系中我們可以看到,List接口繼承了Collection接口,并且有ArrayList、LinkedList、Vector等子類,其中Vector現在已經不太常用了,所以我們重點掌握ArrayList和LinkedList就行。

  3. 常用API方法

  在List接口中定義了子類的一些通用方法,如下所示:

  ● boolean add(E e):在集合末尾添加一個數據元素;

  ● boolean add(int index, E e):在集合的指定索引出添加一個數據元素;

  ● E remove(int index):刪除集合中指定索引的元素;

  ● boolean remove(Object e):刪除集合中的某個元素;

  ● E get(int index):獲取集合中指定索引出的元素;

  ● int size():獲取集合的大小(包含元素的個數)。

  以上這些方法,就是我們在開發時比較常用的幾個方法,大家需要記住哦。

  4. List對象創建方式

  List作為一個接口,我們通常不能直接new List來創建其對象,在Java中給我們提供了如下兩種創建List對象的方式:

  ● 通過多態方式創建:new List的某個子類,比如new ArrayList()等;

  ● 通過List.of()方法創建:of()方法可以根據給定的數據元素快速創建出List對象,但該方法不接受null值,如果傳入null會拋出NullPointerException異常。  

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Demo01 {
public static void main(String[] args) {
//創建List對象方式一:
List<String> list1=new ArrayList<>();

List<String> list2=new LinkedList<>();

//創建List對象方式二:
List<Integer> list3 = List.of(1,3,5,7,9);

//該方式不能傳入null參數,否則會產生NullPointerException異常
//List<Integer> list4 = List.of(1,3,5,7,9,null);
}
}

  5.List集合遍歷方式

  很多時候,我們都會對集合進行遍歷操作,也就是要把集合中的每個元素挨個的取出來,以下是幾種常用的集合遍歷方式:

  ● 普通for循環配合get(索引值)方法進行遍歷:這種遍歷方式實現起來代碼較為復雜,且get(int)取值方法只對ArrayList比較高效,但對LinkedList效率較低,索引越大時訪問速度越慢。

  ● 增強for循環進行遍歷:我們也可以使用增強for循環進行遍歷,該方式比普通for循環實現起來更為簡潔。

  ● 使用Iterator迭代器進行集合遍歷:不同的List對象調用iterator()方法時,會返回不同實現的Iterator對象,該Iterator對象對集合總是具有最高的訪問效率。  

import java.util.Iterator;
import java.util.List;

public class Demo02 {
public static void main(String[] args) {
//List遍歷方式一,普通for循環:
List<String> list = List.of("java", "大數據", "壹小編");
for(int i=0;i<list.size();i++) {
System.out.println("遍歷方式一,值="+list.get(i));
}

//List遍歷方式二,迭代器:
Iterator<String> it = list.iterator();
while(it.hasNext()){
//取出下一個值
String value = it.next();
System.out.println("遍歷方式二,值="+value);
}

//List遍歷方式三,增強for循環:內部會自動使用Iterator
for(String item:list) {
System.out.println("遍歷方式三,item="+item);
}
}
}

  上面提到的Iterator對象,有兩個常用方法,如下所示:

  ● boolean hasNext():該方法用于判斷集合中是否還有下一個元素;

  ● E next():該方法用于返回集合的下一個元素。

  雖然使用Iterator遍歷List集合的代碼,看起來比使用索引較復雜,但Iterator遍歷List集合的效率卻是最高效的方式。

  另外只要是實現了Iterable接口的集合類,我們都可以直接使用for each增強循環來遍歷。在增強for循環中,Java編譯器會自動把for each循環變成基于Iterator方式的遍歷方式。

  6. List與數組的轉換方式

  其實List與Array數組在很多地方都是比較相似的,比如都可以根據索引對數據元素進行遍歷取值等操作。因為存在著這種相似之處,所以在List和數組之間是可以互相轉換的,即List集合可以轉成數組,數組也可以轉成List集合。

  6.1 List轉數組

  一般情況下,List轉數組有如下幾種方式:

  ● toArray()方法:該方法會返回一個Object[]數組,但該方法會丟失類型信息,在實際開發時較少使用;

  ● toArray(T[])方法:傳入一個與集合的數據元素類型相同的Array,List會自動把元素復制到傳入的Array中;

  ● T[] toArray(IntFunction generator)方法:函數式寫法,這是Java中的新特性,后面小編會單獨講解。 

import java.util.List;

public class Demo03 {
public static void main(String[] args) {
List<String> list = List.of("java", "大數據", "壹小編");

// List轉數組方式一:返回一個Object[]數組
Object[] array = list.toArray();
for (Object val : array) {
System.out.println("方式一,value="+val);
}

// List轉數組方式二,給toArray(T[])傳入與數組元素類型相同的Array,如果數組類型與集合數據元素類型不匹配則會產生如下異常:
// java.lang.ArrayStoreException: arraycopy: element type mismatch:
//can not cast one of the elements of java.lang.Object[] to the type of the destination array, java.lang.Integer
String[] array2 = list.toArray(new String[list.size()]);
for (String val : array2) {
System.out.println("方式二,value="+val);
}

// List轉數組方式三:返回一個String[]數組
String[] array3 = list.toArray(String[]::new);
for (String val : array3) {
System.out.println("方式二,value="+val);
}
}
}

  在本案例中,第一種實現方式是調用toArray()方法直接返回一個Object[]數組,但這種方法會丟失類型信息,所以開發是很少使用。

  第二種方式要給toArray(T[])方法傳入一個與集合數據元素類型相同的Array,List內部會自動把元素復制到傳入的Array數組中。如果Array類型與集合的數據元素類型不匹配,就會產生”java.lang.ArrayStoreException: arraycopy: element type mismatch: can not cast one of the elements of java.lang.Object[] to the type of the destination array......“異常。

  第三種方式是通過List接口定義的T[] toArray(IntFunction generator)方法,這是一種函數式寫法,小編以后再單獨給大家講解。

  6.2 數組轉List

  反過來,數組也可以轉為List集合,一般的方式如下:

  ● List.of(T...)方法:該方法會返回一個只讀的List集合,如果我們對只讀List調用add()、remove()方法會拋出UnsupportedOperationException異常。其中的T是泛型參數,代表要轉成List集合的數組;

  ● Arrays.asList(T...)方法:該方法也會返回一個List集合,但它返回的List不一定就是ArrayList或者LinkedList,因為List只是一個接口。 

import java.util.Arrays;
import java.util.List;

public class Demo04 {
public static void main(String[] args) {
// 數組轉List的方式一:List.of()返回一個只讀的集合,不能進行add/remove等修改操作。
List<Integer> values = List.of(1,8,222,10,5);
for (Integer val : values) {
System.out.println("方式一,value="+val);

//該集合是一種只讀的集合,不能在遍歷時進行增刪改等更新操作,只能進行讀取操作,
//否則會產生java.lang.UnsupportedOperationException異常
//values.remove(0);
}

// 數組轉List的方式二:Arrays.asList()返回一個只讀的集合,不能進行add/remove等修改操作。
List<String> items = Arrays.asList("java","壹小編","元宇宙");
for (String item : items) {
System.out.println("方式二,value="+item);

//不可以進行增刪改操作
//items.add("sss");
//items.remove(0);
}
}
}

  在本案例中,無論我們是通過List.of()方法,還是通過Arrays.asList()方法,都只會返回一個只讀的集合。這種集合在遍歷時不能進行增刪改等更新操作,只能進行讀取操作,否則會產生java.lang.UnsupportedOperationException異常。

  二. ArrayList集合

  1.簡介

  ArrayList是一個數組隊列,位于java.util包中,它繼承自AbstractList,并實現了List接口。其底層是一個可以動態修改的數組,該數組與普通數組的區別,在于它沒有固定的大小限制,我們可以對其動態地進行元素的添加或刪除。

1684746655246.image

  存儲在集合內的數據被稱為”元素“,我們可以利用索引來訪問集合中的每個元素。為了方便我們操作這些元素,ArrayList給我們提供了相關的添加、刪除、修改、遍歷等功能。

  因為ArrayList的底層是一個動態數組,所以該集合適合對元素進行快速的隨機訪問(遍歷查詢),另外尾部成員的增加和刪除操作速度也較快,但是其他位置上元素的插入與刪除速度相對較慢。基于這種特性,所以ArrayList具有查詢快,增刪慢的特點。

  2.常用方法

  ArrayList給我們提供了如下這些方法,我們可以先來了解一下:

1684746916697.image

  接下來小編就挑選幾個常用的方法,通過幾個案例來給大家講解一下ArrayList的用法。

  3.添加元素

  ArrayList給我們提供了多個與添加相關的方法,比如add()和addAll()方法,可以將元素添加到集合中。另外如果我們要計算ArrayList中元素的數量,可以使用size()方法。 

import java.util.ArrayList;

public class Demo05 {
public static void main(String[] args) {
//創建ArrayList集合,<String>中的是泛型,后面我們會專門講解泛型
ArrayList<String> names = new ArrayList<String>();
//一個一個地添加元素
names.add("java");
names.add("數學");

//遍歷集合
for (String name : names) {
System.out.println("name="+name+",size="+names.size());
}

ArrayList<String> names2 = new ArrayList<String>();
names2.add();
//在A集合中追加B集合
names2.addAll(names);

//遍歷集合
for (String name : names2) {
System.out.println("name="+name);
}
}
}

  在上面的代碼中,這部分是泛型,小編會在后面給大家專門講解,敬請期待哦。

  4. 遍歷元素

  我們對ArrayList中元素進行遍歷的方式,其實與List的遍歷是一樣的,我們可以使用普通for循環、增強for循環、Iterator迭代器等方式對集合進行遍歷,這里我們就不再單獨展示其用法了。

  5. 修改元素

  我們使用add()方法將元素添加到集合中之后,如果想對集合中的元素進行修改,可以使用set()方法。 

import java.util.ArrayList;

public class Demo06 {
public static void main(String[] args) {
//創建ArrayList集合,<String>中的是泛型,后面我們會專門講解泛型
ArrayList<String> names = new ArrayList<String>();
//一個一個地添加元素
names.add("java");
names.add("數學");

//修改集合中的元素:第一個參數是集合中的索引,第二個是要修改的值
names.set(1, "Android");
names.set(2, "iOS");

//遍歷集合
for (String name : names) {
System.out.println("name="+name);
}
}
}

  6.刪除元素

  如果我們要刪除ArrayList中的元素,可以使用remove()、removeAll()等方法。 

import java.util.ArrayList;

public class Demo07 {
public static void main(String[] args) {
//創建ArrayList集合,<String>中的是泛型,后面我們會專門講解泛型
ArrayList<String> names = new ArrayList<String>();
//一個一個地添加元素
names.add("java");
names.add("數學");

//刪除集合中指定位置上的某個元素
names.remove(0);
//刪除集合中的某個指定元素
names.remove("java");

//遍歷集合
for (String name : names) {
System.out.println("name="+name);
}

ArrayList<String> names2 = new ArrayList<String>();
names2.add("語文");
names2.add("英語");
names2.add("數學");
//刪除本集合中的另一個集合
names2.removeAll(names);
//遍歷集合
for (String name : names2) {
System.out.println("name2="+name);
}
}
}

  7.集合排序

  我們可以使用Collections.sort()方法對集合進行升序排列。 

import java.util.ArrayList;
import java.util.Collections;

public class Demo08 {

public static void main(String[] args) {
//創建ArrayList集合
ArrayList<Integer> nums = new ArrayList<>();
//一個一個地添加元素
nums.add(100);
nums.add(85);
nums.add(120);
nums.add(55);

//對集合進行排序,默認是升序排列
Collections.sort(nums);

//遍歷集合
for (Integer num : nums) {
System.out.println("num="+num);
}
}
}

  三. LinkedList集合

  1.簡介

  LinkedList采用鏈表結構來保存數據,所以是一種鏈表集合,類似于ArrayList,也是List的一個子類,位于java.util包中。它的底層是基于線性鏈表這種常見的數據結構,但并沒有按線性的順序存儲數據,而是在每個節點中都存儲了下一個節點的地址。

1684747291514.image

  LinkedList的優點是便于向集合中插入或刪除元素,尤其是需要頻繁地向集合中插入和刪除元素時,使用LinkedList類比ArrayList的效率更高。但LinkedList隨機訪問元素的速度則相對較慢,即檢索集合中特定索引位置上的元素速度較慢。

  2. LinkedList類關系

  LinkedList直接繼承自AbstractSequentialList,并實現了List、Deque、Cloneable、Serializable等多個接口。通過實現List接口,具備了列表操作的能力;通過實現Cloneable接口,具備了克隆的能力;通過實現Queue和Deque接口,可以作為隊列使用;通過實現Serializable接口,可以具備序列化能力。LinkedList類結構關系如下圖所示:

1684747443690.image

  3. LinkedList與ArrayList對比

  與ArrayList相比,LinkedList進行添加和刪除的操作效率更高,但查找和修改的操作效率較低。基于這種特性,我們可以在以下情況中使用ArrayList:

  ● 需要經常訪問獲取列表中的某個元素;

  ● 只需要在列表的末尾進行添加和刪除某個元素。

  當遇到如下情況時,可以考慮使用LinkedList:

  ● 需要經常通過循環迭代來訪問列表中的某些元素;

  ● 需要經常在列表的開頭、中間、末尾等位置進行元素的添加和刪除操作。

  4. 常用方法

  LinkedList中的很多方法其實都來自于List接口,所以它的很多方法與ArrayList是一樣的。但由于其自身特點,也具有一些特有的常用方法,這里小編只列出LinkedList特有的常用方法,如下表所示:

1684747481458.image

  對這些方法進行基本的了解之后,接下來我們選擇幾個核心方法來來看看具體該怎么使用。

  5. 添加/刪除元素

  我們可以通過addFirst()和addLast()方法,分別在鏈表的開頭和結尾添加一個元素。當我們要頻繁地在一個列表的開頭和結尾進行元素添加、刪除時,使用LinkedList要比ArrayList的效率更高。 

import java.util.LinkedList;

public class Demo09 {

public static void main(String[] args) {
// 創建LinkedList集合
LinkedList<String> names = new LinkedList<String>();
// 一個一個地添加元素
names.add("java");
names.add("數學");

//在鏈表的開頭添加元素
names.addFirst("");

//在鏈表的結尾添加元素
names.addLast("歷史");

// 遍歷集合
for (String name : names) {
System.out.println("name=" + name);
}

//移除鏈表開頭的元素
names.removeFirst();
//移除鏈表結尾的元素
names.removeLast();
}
}

  6.迭代獲取元素

  我們可以通過getFirst()、getLast()等方法獲取到集合中的第一個、最后一個元素。 

import java.util.LinkedList;

public class Demo10 {
public static void main(String[] args) {
// 創建LinkedList集合
LinkedList<String> names = new LinkedList<String>();
// 一個一個地添加元素
names.add("java");
names.add("數學");

System.out.println("first=" + names.getFirst());
System.out.println("last=" + names.getLast());

// 迭代遍歷集合
for (String name : names) {
System.out.println("name=" + name);
}
}
}

  四. 結語

  至此,小編就把List集合給大家講解完畢了,最后我們再來看看本文的重點吧:

  ● List是按索引順序訪問的、長度可變的有序列表;

  ● 一般開發時,ArrayList比LinkedList的使用更頻繁;

  ● List和Array可以相互轉換;

  ● 集合遍歷時有多種方式,增強for循環和Iterator迭代器的效率更高;

  ● ArrayList與LinkedList都是List接口的實現類,都實現了List中所有未實現的方法,但實現的方式有所不同;

  ● ArrayList底層的數據結構基于動態數組,訪問元素速度快于LinkedList,在快速訪問數據時ArrayList的執行效率比較高;

  ● LinkedList底層的數據結構基于鏈表,占用的內存空間較大,但批量插入或刪除數據時快于ArrayList。當頻繁向集合中插入和刪除元素時,使用LinkedList比ArrayList的效率更高。

tags: List集合
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
樱桃CHERRY官网| 无码精品人妻一区二区| 四季亚洲AV无码一区在线观看| 无码精品H动漫成人影院| 亚洲国产AⅤ天堂久久| 中国毛茸茸性XXXX| 成人丝袜激情一区二区| 国产高清在线a视频大全| 波多野结衣TORRENT| 国产福利无码一区在线| 狠狠做深爱婷婷综合一区| 美女裸体无遮挡永久免费观看网站| 人成AAAAA毛天堂片| 无码人妻一区二区三区免费| 亚洲在AV极品无码高清| 啊轻点灬太粗嗯太深了用力| 国产美女裸体无遮挡免费视频高潮| 久久九九久精品国产88| 人人妻人人妻人人人人妻| 性妇WBBBB搡BBBB嗓小说| 又爽又黄又无遮挡的视频| 岛国精品一区免费视频在线 | 麻豆精品传媒卡一卡二老狼| 日韩A片无码ⅩXXXX| 亚洲AV无码成人精品国产| 377人体粉嫩噜噜噜| 够了够了到高C了| 久久久久久精品免费免费自慰| 人人爽人人片人人片AV| 亚洲AV无码麻豆一区二区三区 | 国产AV麻豆MAG剧集| 精品无人区卡卡卡卡卡二卡三乱码| 青青草原精品国产亚洲AV| 亚洲AV无码专区国产乱码APP| 69久久夜色精品国产69| 国产精品日日摸夜夜添夜夜添20 | 日韩成人精品久久网站| 亚洲精品无码MV在线观看网站| JAPAN丰满人妻HD| 黄A大片AV永久免费| 人妻熟妇女的欲乱系列| 亚洲精品国产A久久久久久| 把女人弄爽特黄A大片片| 交换玩弄两个美妇教师韩国电影| 日本毛多水多做受视频| 野花社区大全免费观看3| 国产V亚洲V天堂无码久久久| 乱码精品一卡2卡二卡三| 同性男男黄H片在线播放网站| 中文在线っと好きだっ最新版 | 久久综合香蕉国产蜜臀AV | 国产精品JIZZ视频| 欧美视频在线观看一区二区三区| 亚洲成AV人片在线观看WWW| 成人毛片100免费观看| 邻居少妇张开腿让我爽了在线观看| 天堂资源中文最新版在线一区| 777亚洲精品乱码久久久久久| 狠痕鲁狠狠爱2021在| 色欲AV蜜桃一区二区三| 37大但文体艺术A级都市天气| 好深好大再浪一点| 熟妇啊轻点灬大JI巴太粗| 97在线视频人妻无码| 精品一区二区三区不卡少妇av| 视频一区欧美日韩| 99久久免费只有精品国产| 久草日B视频一二三区| 无码人妻少妇久久中文字幕| MD豆传媒APP网址| 烂货我捏烂你的奶| 亚洲成A人V欧美综合天堂麻豆| 丰满的人妻沦为玩物在线| 欧美噜噜久久久XXX| 亚洲中文无码AV永久不收费| 国产三级精品三级在线专区1| 日韩人妻无码一区二区三区综合部| 1024久久亚洲精品无码| 久99久无码精品视频免费播放| 午夜亚洲乱码伦小说区69堂| 丁香五月缴情网站| 欧美综合自拍亚洲综合图| 在卫生间被教官做好爽| 精品人妻无码区在线视频 | 国产日产欧产精品精品| 日韓丨亞洲丨制服丨亂倫| 91夜黄性一交一乱一色一情人| 久久精品无码一区二区APP| 亚洲 欧洲 日产 经典| 闺蜜张开腿让我爽了一夜| 人妻无码系列一区二区三区| 696969C大但人文艺术作品 | 国产男男Gay视频在线看| 少妇愉情理仑片高潮| 博士用模型查出医院多收10万| 欧美交换配乱婬粗大| 中国农村真实BBWBBWBBW| 久久精品久久久久久噜噜| 亚洲国产丝袜精品一区| 国内老熟妇对白XXXXHD| 午夜无码一区二区三区在线观看 | 精品久久一区二区乱码| 亚洲A级成人无码网站| 国产精品久久国产精品99盘| 色综合视频一区二区三区44| 插花弄玉小说荔枝很甜作者卿凌| 欧美AⅤ精品一区二区三区| 最新的美国ZOOM动物| 免费视频片多多视频免费高清| 又爽又黄又无遮挡的视频在线观看| 久久久久亚洲AV成人片丁香| 亚洲中文久久精品无码WW16| 久久久久国产亚洲AV麻豆| 亚洲中文字幕日产无码| 久久人人做人人妻人人玩精品HD| 亚洲资源AV无码日韩AV无码| 久久天堂AV女色优精品| 在办公室把护士给爽了动态图| 老熟妇高潮一区二区三区网| 又大又粗又爽的少妇免费视频| 老乞丐没完没了73节| 综合亚洲另类欧美久久成人精品| 免费无遮挡很爽很污很黄的网站| 1000部拍拍拍18勿入免费视| 女生裙子里面到底穿了啥| FREEFORNVIDEOS性| 日本精品一区二区三区试看| 成人无码H免费动漫在线观看| 色噜噜人体337P人体| 国产大片内射1区2区| 性高朝久久久久久久| 精品国内自产拍在线观看| 亚洲午夜精品久久久久久浪潮| 久久婷婷五月综合成人D啪| 中文字幕人成无码人妻| 欧美日韩精品久久久免费观看| 锕锕锕锕锕锕锕好痛免费网址| 日韩亚洲中字无码一区二区三区| 国产成人精品日本亚洲语音| 香草乱码一二三四区别| 果冻传媒MV免费播放在线观看| 亚洲精品国精品久久99热| 狂猛欧美激情性XXXX在线观看| 99999久久久久久亚洲| 人人妻人人添人人爽欧美一区| 丰满少妇人妻HD高清大乳| 无人区码一码二码三码在线 | 女人18片毛片60分钟630| 爸的比老公大两倍儿媳妇叫什么呢| 色先锋AV资源中文字幕| 国产精品久久一国产精品胖虎| 亚洲AV中文无码乱人伦在线r▽| 久久久久精品国产亚洲AV| 8V蜜桃网最新电影| 色ww1区2区在线观看| 国产男女爽爽爽免费视频| 亚洲午夜无码久久久久小说| 女强人被春药精油按摩4| 厨房里的激战2免费观看不打丐赛 厨房里的激战2李明人物介绍 | 98色精品视频在线| 日韩精品一区二区视频| 国产网红无码精品视频| 影视AV久久久噜噜噜噜噜三级| 欧美性色欧美A在线播放| 国产成人A∨麻豆精品| 亚洲国产精品国自产拍AV| 免费无码又爽又刺激激情视频 | 在公交上被灌满白浆的视频| 人妻 白嫩 蹂躏 惨叫| 国产精品国产三级国AV | 宝贝乖女你的奶真大水真多小说| 熟妇人妻无乱码中文字幕| 狠狠澡人人添人人爽人妻少妇| 18禁成人黄网站免费观看| 色欲色香天天天综合无码WWW| 果冻十麻豆十天美十老师| 2023国产精品一卡2卡三卡 | 欧美性猛交一区二区| 国产精品美女久久久浪潮AV| 亚洲综合网站色欲色欲| 人妻无码人妻有码中文字幕| 国产亚洲AV浪潮A∨尹人Av| 成年女人天堂香蕉网| 黑巨人与欧美精品一区| 永久免费的AV在线网无码| 日韩AV无码精品人妻系列| 国色天香精品一卡2卡3卡| [中文] [3D全彩H漫]新来| 天堂AⅤ大芭蕉伊人AV| 熟妇人妻一区二区三区四区| 精品人妻久久久久久888| CHINESE农村老妓女| 亚洲 日韩 另类 制服 无码| 男人J桶进女人P无遮挡在线观看| 国产成人精品优优AV| 野花高清中文免费观看视频| 日韩精品一二三区| 久久久精品人妻无码专区不卡| 大象成品网站1688入口官网| 亚洲色偷偷综合亚洲AVYP|