亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

Collection,List,Set和Map用法和區別

2019-11-14 12:17:26
字體:
來源:轉載
供稿:網友

以下內容轉自:http://blog.csdn.net/an341221/article/details/50514664

Collection,List,Set和Map用法和區別

作者:zccst

 

 

java sPRing MVC框架的調用關系是弄明白了,可是發現后面要走的路還很長,有很多東西對我還是很神秘,比如list,set,map等,今天就來一一解開他們的面紗。當還還有一大堆需要記憶的系統已經封裝好的類、接口等等,這些內容會在以后,慢慢道來。

 

首先看一下他們之間的關系

Collection          接口的接口  對象的集合├List                   子接口     按進入先后有序保存  可重復│├LinkedList                接口實現類  鏈表  插入刪除  沒有同步  線程不安全│├ArrayList                  接口實現類  數組  隨機訪問  沒有同步  線程不安全│└Vector                      接口實現類  數組                同步       線程安全│ └Stack└Set                   子接口      僅接收一次,并做內部排序

├HashSet

│ └LinkedHashSet└TreeSet

 

對于List,關心的是順序,它保證維護元素特定的順序(允許有相同元素),使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數組下標)來訪問List中的元素。

對于Set,只關心某元素是否屬于Set(不允許有相同元素),而不關心它的順序。

 

Map                接口     鍵值對的集合├Hashtable                  接口實現類                 同步        線程安全├HashMap                   接口實現類                 沒有同步   線程不安全

│├LinkedHashMap

│└WeakHashMap

├TreeMap└IdentifyHashMap

對于Map,最大的特點是鍵值映射,且為一一映射,鍵不能重復,值可以,所以是用鍵來索引值。方法put(Objectkey, Object value)添加一個“值”(想要得東西)和與“值”相關聯的“鍵”(key) (使用它來查找)。方法get(Object key)返回與給定“鍵”相關聯的“值”。

Map同樣對每個元素保存一份,但這是基于"鍵"的,Map也有內置的排序,因而不關心元素添加的順序。如果添加元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap.

對于效率,Map由于采用了哈希散列,查找元素時明顯比ArrayList快。

 

 

但我有一個自己的原則想法:復雜的問題簡單化。即把很多晦澀難懂的問題用通俗直白的話,一下子就看明白了,而不是大段大段的寫。不得不指出的是現在部分所謂的“專家”往往把簡單的問題復雜化,讓人看了生畏,甚至望而卻步,以此來顯示他的高深莫測,當然也可能有別的用意,那我就不得而知了。

 

更為精煉的總結:

Collection是對象集合,Collection有兩個子接口List和Set

List可以通過下標(1,2..)來取得值,值可以重復

而Set只能通過游標來取值,并且值是不能重復的

ArrayList,Vector,LinkedList是List的實現類

ArrayList是線程不安全的,Vector是線程安全的,這兩個類底層都是由數組實現的

LinkedList是線程不安全的,底層是由鏈表實現的  

Map是鍵值對集合

HashTable和HashMap是Map的實現類   HashTable是線程安全的,不能存儲null值   HashMap不是線程安全的,可以存儲null值  

 

 

所以,如果你是想在一個很短的時間來弄明白這些問題,比如1~2分鐘。沒有也不想花大量時間于此,那么建議你現在就可以收兵走人了。

 

如果你想對此做一個詳細的了解,請繼續看下去。

 

眾所周知,Java來源于C++,屏蔽了其底層實現,簡化了對底層實現的管理,使開發者專注于上層功能的實現。在C/C++里關于數據的存儲需要程序員非常清楚,而Java程序員可以完全不管這些,那么,Java是怎么管理的呢?其實Java還是需要面臨這些問題,只不過經過封裝后,變得面目全非。所以對于像我這種從C/C++轉向Java的人還需要一段時間適應,Collection、List、Set、Map等概念還需要一個接受的過程。其實到后來發現,不管是什么語言,其底層存儲不外乎數組、線性表、棧、隊列、串、樹和圖等數據結構。想明白了這些,一切都敞亮了。

 

一、容器(Collection)接口   容器(Collection)是最基本的集合接口,一個容器(Collection)保存一組對象(Object),即對象是容器的元素(Elements)。一些 Collection允許相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子接口”如List和Set?! ∷袑崿FCollection接口的類都必須提供兩個標準的構造函數:無參數的構造函數用于創建一個空的Collection,有一個 Collection參數的構造函數用于創建一個新的Collection,這個新的Collection與傳入的Collection有相同的元素。后一個構造函數允許用戶復制一個Collection?! ∪绾伪闅vCollection中的每一個元素?不論Collection的實際類型如何,它都支持一個iterator()的方法,該方法返回一個迭代子,使用該迭代子即可逐一訪問Collection中每一個元素。典型的用法如下:    Iterator it = collection.iterator(); // 獲得一個迭代子    while(it.hasNext()) {      Object obj = it.next(); // 得到下一個元素    }

 

 

由Collection接口派生的兩個接口是List和Set。List按對象進入的順序保存對象,不做排序或編輯操作。Set對每個對象只接受一次,并使用自己內部的排序方法(通常,你只關心某個元素是否屬于Set,而不關心它的順序--否則應該使用List)。

 

1,List接口  List是有序的Collection,次序是List最重要的特點:它保證維護元素特定的順序。使用此接口能夠精確的控制每個元素插入的位置。用戶能夠使用索引(元素在List中的位置,類似于數組下標)來訪問List中的元素,這類似于Java的數組。和下面要提到的Set不同,List允許有相同的元素?!? 除了具有Collection接口必備的iterator()方法外,List還提供一個listIterator()方法,返回一個ListIterator接口,和標準的Iterator接口相比,ListIterator多了一些add()之類的方法,允許添加,刪除,設定元素,還能向前或向后遍歷。  實現List接口的常用類有LinkedList,ArrayList,Vector和Stack。其中,最常用的是LinkedList和 ArrayList兩個。LinkedList類   LinkedList實現了List接口,允許null元素。此外LinkedList提供額外的addFirst(),addLast(), getFirst(), getLast(), removeFirst(), removeLast(), insertFirst(),insertLast()方法在 LinkedList的首部或尾部,這些方法(沒有在任何接口或基類中定義過)使LinkedList可被用作堆棧(stack),隊列(queue)或雙向隊列(deque)。

注意LinkedList沒有同步方法。如果多個線程同時訪問一個List,則必須自己實現訪問同步。一種解決方法是在創建List時構造一個同步的List:    List list = Collections.synchronizedList(new LinkedList(...));

特點:對順序訪問進行了優化,向List中間插入與刪除的開銷并不大。隨機訪問則相對較慢。(使用ArrayList代替。)ArrayList類  ArrayList是由數組實現的List,并且實現了可變大小的數組。它允許所有元素,包括null。ArrayList沒有同步。size,isEmpty,get,set方法運行時間為常數。但是add方法開銷為分攤的常數,添加n個元素需要O(n)的時間。其他的方法運行時間為線性?!? 每個ArrayList實例都有一個容量(Capacity),即用于存儲元素的數組的大小。這個容量可隨著不斷添加新元素而自動增加,但是增長算法并沒有定義。當需要插入大量元素時,在插入前可以調用ensureCapacity方法來增加ArrayList的容量以提高插入效率?! 『蚅inkedList一樣,ArrayList也是非同步的(unsynchronized)。

 

特點:允許對元素進行快速隨機訪問,但是向List中間插入與移除元素的速度很慢。ListIterator只應該用來由后向前遍歷ArrayList,而不是用來插入和移除元素。因為那比LinkedList開銷要大很多。

 

Vector類   Vector非常類似ArrayList,但是Vector是同步的。由Vector創建的Iterator,雖然和ArrayList創建的 Iterator是同一接口,但是,因為Vector是同步的,當一個Iterator被創建而且正在被使用,另一個線程改變了Vector的狀態(例如,添加或刪除了一些元素),這時調用Iterator的方法時將拋出ConcurrentModificationException,因此必須捕獲該異常。   Stack 類:Stack繼承自Vector,實現一個后進先出的堆棧。Stack提供5個額外的方法使得Vector得以被當作堆棧使用?;镜膒ush和pop 方法,還有peek方法得到棧頂的元素,empty方法測試堆棧是否為空,search方法檢測一個元素在堆棧中的位置。Stack剛創建后是空棧。2,Set接口  Set具有與Collection完全一樣的接口,因此沒有任何額外的功能,不像前面有幾個不同的List。實際上Set就是 Collection,只是行為不同。(這是繼承與多態思想的典型應用:表現不同的行為)。其次,Set是一種不包含重復的元素的Collection,加入Set的元素必須定義equals()方法以確保對象的唯一性( 即任意的兩個元素e1和e2都有e1.equals(e2)=false),與List不同的是,Set接口不保證維護元素的次序。最后,Set最多有一個null元素?! 『苊黠@,Set的構造函數有一個約束條件,傳入的Collection參數不能包含重復的元素?! ≌堊⒁猓罕仨毿⌒牟僮骺勺儗ο螅∕utable Object)。如果一個Set中的可變元素改變了自身狀態導致Object.equals(Object)=true將導致一些問題。

HashSet類

為快速查找設計的Set。存入HashSet的對象必須定義hashCode()。

 

LinkedHashSet類:具有HashSet的查詢速度,且內部使用鏈表維護元素的順序(插入的次序)。于是在使用迭代器遍歷Set時,結果會按元素插入的次序顯示。

 

TreeSet類

保存次序的Set, 底層為樹結構。使用它可以從Set中提取有序的序列。

 

 

二、Map接口   請注意,Map沒有繼承Collection接口,Map提供key到value的映射,你可以通過“鍵”查找“值”。一個Map中不能包含相同的key,每個key只能映射一個 value。Map接口提供3種集合的視圖,Map的內容可以被當作一組key集合,一組value集合,或者一組key-value映射。

方法put(Object key,Object value)添加一個“值”(想要得東西)和與“值”相關聯的“鍵”(key) (使用它來查找)。方法get(Object key)返回與給定“鍵”相關聯的“值”。可以用containsKey()和containsValue()測試Map中是否包含某個“鍵”或“值”。標準的Java類庫中包含了幾種不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它們都有同樣的基本接口Map,但是行為、效率、排序策略、保存對象的生命周期和判定“鍵”等價的策略等各不相同。

Map同樣對每個元素保存一份,但這是基于"鍵"的,Map也有內置的排序,因而不關心元素添加的順序。如果添加元素的順序對你很重要,應該使用 LinkedHashSet或者LinkedHashMap.

執行效率是Map的一個大問題??纯磄et()要做哪些事,就會明白為什么在ArrayList中搜索“鍵”是相當慢的。而這正是HashMap提高速度的地方。HashMap使用了特殊的值,稱為“散列碼”(hash code),來取代對鍵的緩慢搜索?!吧⒘写a”是“相對唯一”用以代表對象的int值,它是通過將該對象的某些信息進行轉換而生成的(在下面總結二:需要的注意的地方有更進一步探討)。所有Java對象都能產生散列碼,因為hashCode()是定義在基類Object中的方法。HashMap就是使用對象的hashCode()進行快速查詢的。此方法能夠顯著提高性能。

Hashtable類  Hashtable繼承Map接口,實現一個key-value映射的哈希表。任何非空(non-null)的對象都可作為key或者value?! √砑訑祿褂胮ut(key, value),取出數據使用get(key),這兩個基本操作的時間開銷為常數。    Hashtable 通過初始化容量(initialcapacity) 和負載因子(load factor)兩個參數調整性能。通常缺省的load factor 0.75較好地實現了時間和空間的均衡。增大load factor可以節省空間但相應的查找時間將增大,這會影響像get和put這樣的操作。    使用Hashtable的簡單示例如下,將1,2,3放到Hashtable中,他們的key分別是”one”,”two”,”three”:    Hashtable numbers = new Hashtable();    numbers.put(“one”, new Integer(1));    numbers.put(“two”, new Integer(2));    numbers.put(“three”, new Integer(3));  要取出一個數,比如2,用相應的key:    Integer n = (Integer)numbers.get(“two”);    System.out.println(“two = ” + n);   由于作為key的對象將通過計算其散列函數來確定與之對應的value的位置,因此任何作為key的對象都必須實現hashCode方法和equals方法。hashCode方法和equals方法繼承自根類Object,如果你用自定義的類當作key的話,要相當小心,按照散列函數的定義,如果兩個對象相同,即obj1.equals(obj2)=true,則它們的hashCode必須相同,但如果兩個對象不同,則它們的hashCode不一定不同,如果兩個不同對象的hashCode相同,這種現象稱為沖突,沖突會導致操作哈希表的時間開銷增大,所以盡量定義好的hashCode()方法,能加快哈希表的操作?! ∪绻嗤膶ο笥胁煌膆ashCode,對哈希表的操作會出現意想不到的結果(期待的get方法返回null),要避免這種問題,只需要牢記一條:要同時復寫equals方法和hashCode方法,而不要只寫其中一個。  Hashtable是同步的。HashMap類   HashMap和Hashtable類似,也是基于散列表的實現。不同之處在于HashMap是非同步的,并且允許null,即null value和null key。將HashMap視為Collection時(values()方法可返回Collection),插入和查詢“鍵值對”的開銷是固定的,但其迭代子操作時間開銷和HashMap 的容量成比例。因此,如果迭代操作的性能相當重要的話,不要將HashMap的初始化容量(initial capacity)設得過高,或者負載因子(load factor)過低。

  LinkedHashMap 類:類似于HashMap,但是迭代遍歷它時,取得“鍵值對”的順序是其插入次序,或者是最近最少使用(LRU)的次序。只比HashMap慢一點。而在迭代訪問時發而更快,因為它使用鏈表維護內部次序。

 

WeakHashMap類:弱鍵(weak key)Map是一種改進的HashMap,它是為解決特殊問題設計的,對key實行“弱引用”,如果一個key不再被外部所引用(沒有map之外的引用),那么該key可以被垃圾收集器(GC)回收。

 

TreeMap類

基于紅黑樹數據結構的實現。查看“鍵”或“鍵值對”時,它們會被排序(次序由Comparabel或Comparator決定)。TreeMap的特點在于,你得到的結果是經過排序的。TreeMap是唯一的帶有subMap()方法的Map,它可以返回一個子樹。

IdentifyHashMap類

使用==代替equals()對“鍵”作比較的hashmap。專為解決特殊問題而設計。

 

 

總結一:比較

1,數組(Array),數組類(Arrays)

Java所有“存儲及隨機訪問一連串對象”的做法,array是最有效率的一種。但缺點是容量固定且無法動態改變。array還有一個缺點是,無法判斷其中實際存有多少元素,length只是告訴我們array的容量。

 

Java中有一個數組類(Arrays),專門用來操作array。數組類(arrays)中擁有一組static函數。

equals():比較兩個array是否相等。array擁有相同元素個數,且所有對應元素兩兩相等。

fill():將值填入array中。

sort():用來對array進行排序。

binarySearch():在排好序的array中尋找元素。

System.arraycopy():array的復制。

 

若編寫程序時不知道究竟需要多少對象,需要在空間不足時自動擴增容量,則需要使用容器類庫,array不適用。

 

2,容器類與數組的區別

容器類僅能持有對象引用(指向對象的指針),而不是將對象信息copy一份至數列某位置。一旦將對象置入容器內,便損失了該對象的型別信息。

 

3,容器(Collection)與Map的聯系與區別

Collection類型,每個位置只有一個元素。

Map類型,持有 key-value 對(pair),像個小型數據庫。

 

Collections是針對集合類的一個幫助類。提供了一系列靜態方法實現對各種集合的搜索、排序、線程完全化等操作。相當于對Array進行類似操作的類——Arrays。

如,Collections.max(Collection coll); 取coll中最大的元素。

   Collections.sort(List list); 對list中元素排序

 

List,Set,Map將持有對象一律視為Object型別。

Collection、List、Set、Map都是接口,不能實例化。繼承自它們的 ArrayList, Vector, HashTable, HashMap是具象class,這些才可被實例化。

vector容器確切知道它所持有的對象隸屬什么型別。vector不進行邊界檢查。

 

 

總結二:需要注意的地方

1、Collection只能通過iterator()遍歷元素,沒有get()方法來取得某個元素。

2、Set和Collection擁有一模一樣的接口。但排除掉傳入的Collection參數重復的元素。

3、List,可以通過get()方法來一次取出一個元素。使用數字來選擇一堆對象中的一個,get(0)...。(add/get)

4、Map用 put(k,v) /get(k),還可以使用containsKey()/containsValue()來檢查其中是否含有某個key/value。

HashMap會利用對象的hashCode來快速找到key。

哈希碼(hashing)就是將對象的信息經過一些轉變形成一個獨一無二的int值,這個值存儲在一個array中。我們都知道所有存儲結構中,array查找速度是最快的。所以,可以加速查找。發生碰撞時,讓array指向多個values。即,數組每個位置上又生成一個梿表。

5、Map中元素,可以將key序列、value序列單獨抽取出來。

使用keySet()抽取key序列,將map中的所有keys生成一個Set。

使用values()抽取value序列,將map中的所有values生成一個Collection。

為什么一個生成Set,一個生成Collection?那是因為,key總是獨一無二的,value允許重復。

 

總結三:如何選擇從效率角度:

在各種Lists,對于需要快速插入,刪除元素,應該使用LinkedList(可用LinkedList構造堆棧stack、隊列queue),如果需要快速隨機訪問元素,應該使用ArrayList。最好的做法是以ArrayList作為缺省選擇。Vector總是比ArrayList慢,所以要盡量避免使用。

在各種Sets中,HashSet通常優于HashTree(插入、查找)。只有當需要產生一個經過排序的序列,才用TreeSet。HashTree存在的唯一理由:能夠維護其內元素的排序狀態。

 

在各種Maps中HashMap用于快速查找。

最后,當元素個數固定,用Array,因為Array效率是最高的。

所以結論:最常用的是ArrayList,HashSet,HashMap,Array。

 

更近一步分析:

如果程序在單線程環境中,或者訪問僅僅在一個線程中進行,考慮非同步的類,其效率較高,如果多個線程可能同時操作一個類,應該使用同步的類。要特別注意對哈希表的操作,作為key的對象要同時正確復寫equals方法和hashCode方法。盡量返回接口而非實際的類型,如返回List而非ArrayList,這樣如果以后需要將ArrayList換成LinkedList時,客戶端代碼不用改變。這就是針對抽象編程。

 

注:本文參考部分網絡文獻。 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
精品国产鲁一鲁一区二区张丽| 日韩一区二区三区国产| 黑人欧美xxxx| 精品国偷自产在线视频99| 国产日韩在线一区| 欧美日韩国产一区中文午夜| 日韩hd视频在线观看| 2020国产精品视频| 日本三级韩国三级久久| 亚洲无av在线中文字幕| 亚洲第一在线视频| 亚洲91精品在线观看| 欧美精品一区二区免费| 国产精品免费小视频| 欧美日韩亚洲国产一区| 日韩女优人人人人射在线视频| 亚洲精品国产精品国自产观看浪潮| 亚洲日韩中文字幕| 午夜精品久久久久久久久久久久| 欧美在线视频观看免费网站| 欧美成人精品在线观看| 欧美午夜无遮挡| 亚洲一区二区日本| 美日韩精品免费视频| 欧美国产日韩二区| 国产精品高潮在线| 午夜精品久久久久久99热| 久久综合免费视频| 色狠狠久久aa北条麻妃| 在线播放日韩专区| 国产精品视频导航| 亚洲毛片在线观看| 一区二区三区无码高清视频| 久久理论片午夜琪琪电影网| 欧美激情乱人伦一区| 亚洲肉体裸体xxxx137| 性色av一区二区三区红粉影视| 亚洲人成电影在线观看天堂色| 一区二区三区在线播放欧美| 欧美裸体xxxx极品少妇| 欧美日韩精品二区| 青青草国产精品一区二区| 欧美激情在线狂野欧美精品| 亚洲乱码一区av黑人高潮| 亚洲成人黄色网址| 91av在线免费观看视频| 成人欧美一区二区三区黑人孕妇| 久久久在线观看| 欧美制服第一页| 欧美午夜视频一区二区| 日韩中文字幕av| 好吊成人免视频| 欧洲午夜精品久久久| 国产xxx69麻豆国语对白| 国内精品视频久久| 日韩视频免费在线观看| 国产精品男人爽免费视频1| 91精品国产乱码久久久久久蜜臀| 美日韩丰满少妇在线观看| 成人精品aaaa网站| 成人久久18免费网站图片| 日韩中文字幕久久| 成人网在线视频| 91免费版网站入口| 国产日韩视频在线观看| 亚洲综合在线播放| 久久久久久久久久亚洲| 成人亚洲激情网| 欧美日韩亚洲精品内裤| www欧美日韩| 精品久久久久久久久久久久久久| 欧美高清自拍一区| 欧美丝袜一区二区三区| 国产91在线播放| 国产精品成人久久久久| 国产精品久久久久久久久久久久久久| 91精品国产自产在线| 66m—66摸成人免费视频| 国产日产亚洲精品| 狠狠干狠狠久久| 538国产精品一区二区在线| 久久99国产精品自在自在app| 色偷偷av亚洲男人的天堂| 国产日韩中文字幕| 欧美孕妇孕交黑巨大网站| 精品国产一区二区三区在线观看| 中文字幕欧美日韩| 欧美成人黑人xx视频免费观看| 91美女片黄在线观看游戏| 日韩av中文字幕在线播放| 欧美激情精品久久久久久黑人| 中文字幕欧美在线| 日韩精品亚洲精品| 亚洲视频在线观看| www.日韩视频| 日韩精品中文字幕在线播放| 国产在线视频一区| 国内偷自视频区视频综合| 日韩a**中文字幕| 国产一区二区丝袜高跟鞋图片| 91成品人片a无限观看| 最新亚洲国产精品| 亚洲欧美日韩网| 国产精品美女在线观看| 亚洲影视九九影院在线观看| 日本aⅴ大伊香蕉精品视频| 亚洲国产成人精品久久| 97久久久久久| 成人高h视频在线| 国产精品黄页免费高清在线观看| 久久国产精品免费视频| 爱福利视频一区| 中文字幕综合一区| 欧美激情视频播放| 中文字幕亚洲一区二区三区| 亚洲www视频| 亚洲第一av网| 免费av一区二区| 成人激情视频免费在线| 亚洲一区二区精品| 91精品久久久久久久久久| 亚洲精品美女久久久| 538国产精品一区二区免费视频| 精品福利一区二区| 色伦专区97中文字幕| 亚洲美女自拍视频| 日韩成人网免费视频| 日日噜噜噜夜夜爽亚洲精品| 国产ts人妖一区二区三区| 久久久视频在线| 不卡av在线播放| 日韩在线一区二区三区免费视频| 国产美女久久精品香蕉69| 日韩av在线网站| 欧美日韩在线免费观看| 欧美成人剧情片在线观看| xxav国产精品美女主播| 欧美午夜精品久久久久久人妖| 日韩亚洲国产中文字幕| 欧美成人午夜激情视频| 欧美成人h版在线观看| 992tv在线成人免费观看| 欧美午夜精品久久久久久人妖| 国产一区二区免费| 欧美精品久久久久| 午夜精品视频在线| 免费97视频在线精品国自产拍| 欧美理论片在线观看| 国产精品久久久久久久7电影| 在线播放精品一区二区三区| 成人女保姆的销魂服务| 欧美大片欧美激情性色a∨久久| 国产精品网站视频| 亚洲人成电影网站色xx| 日韩欧美在线免费| 色爱av美腿丝袜综合粉嫩av| 伊人伊人伊人久久| 久久久精品在线| 欧美黑人性生活视频| 亚洲精品美女网站| 精品福利免费观看| 色青青草原桃花久久综合| 国产亚洲精品一区二区| 亚洲精品成人久久电影|