日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > java >内容正文

java

【Java集合源码剖析】Hashtable源码剖析

發(fā)布時(shí)間:2023/12/18 java 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Java集合源码剖析】Hashtable源码剖析 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(zhuǎn)載請(qǐng)注明出處:http://blog.csdn.net/ns_code/article/details/36191279

?

Hashtable簡(jiǎn)介

? ? Hashtable同樣是基于哈希表實(shí)現(xiàn)的,同樣每個(gè)元素是一個(gè)key-value對(duì),其內(nèi)部也是通過(guò)單鏈表解決沖突問(wèn)題,容量不足(超過(guò)了閥值)時(shí),同樣會(huì)自動(dòng)增長(zhǎng)。

? ? Hashtable也是JDK1.0引入的類(lèi),是線程安全的,能用于多線程環(huán)境中。

? ? Hashtable同樣實(shí)現(xiàn)了Serializable接口,它支持序列化,實(shí)現(xiàn)了Cloneable接口,能被克隆。

HashTable源碼剖析

? ? Hashtable的源碼的很多實(shí)現(xiàn)都與HashMap差不多,源碼如下(加入了比較詳細(xì)的注釋):

?

[java]?view plaincopy
  • package?java.util;????
  • import?java.io.*;????
  • ???
  • public?class?Hashtable<K,V>????
  • ????extends?Dictionary<K,V>????
  • ????implements?Map<K,V>,?Cloneable,?java.io.Serializable?{????
  • ???
  • ????//?保存key-value的數(shù)組。????
  • ????//?Hashtable同樣采用單鏈表解決沖突,每一個(gè)Entry本質(zhì)上是一個(gè)單向鏈表????
  • ????private?transient?Entry[]?table;????
  • ???
  • ????//?Hashtable中鍵值對(duì)的數(shù)量????
  • ????private?transient?int?count;????
  • ???
  • ????//?閾值,用于判斷是否需要調(diào)整Hashtable的容量(threshold?=?容量*加載因子)????
  • ????private?int?threshold;????
  • ???
  • ????//?加載因子????
  • ????private?float?loadFactor;????
  • ???
  • ????//?Hashtable被改變的次數(shù),用于fail-fast機(jī)制的實(shí)現(xiàn)????
  • ????private?transient?int?modCount?=?0;????
  • ???
  • ????//?序列版本號(hào)????
  • ????private?static?final?long?serialVersionUID?=?1421746759512286392L;????
  • ???
  • ????//?指定“容量大小”和“加載因子”的構(gòu)造函數(shù)????
  • ????public?Hashtable(int?initialCapacity,?float?loadFactor)?{????
  • ????????if?(initialCapacity?<?0)????
  • ????????????throw?new?IllegalArgumentException("Illegal?Capacity:?"+????
  • ???????????????????????????????????????????????initialCapacity);????
  • ????????if?(loadFactor?<=?0?||?Float.isNaN(loadFactor))????
  • ????????????throw?new?IllegalArgumentException("Illegal?Load:?"+loadFactor);????
  • ???
  • ????????if?(initialCapacity==0)????
  • ????????????initialCapacity?=?1;????
  • ????????this.loadFactor?=?loadFactor;????
  • ????????table?=?new?Entry[initialCapacity];????
  • ????????threshold?=?(int)(initialCapacity?*?loadFactor);????
  • ????}????
  • ???
  • ????//?指定“容量大小”的構(gòu)造函數(shù)????
  • ????public?Hashtable(int?initialCapacity)?{????
  • ????????this(initialCapacity,?0.75f);????
  • ????}????
  • ???
  • ????//?默認(rèn)構(gòu)造函數(shù)。????
  • ????public?Hashtable()?{????
  • ????????//?默認(rèn)構(gòu)造函數(shù),指定的容量大小是11;加載因子是0.75????
  • ????????this(11,?0.75f);????
  • ????}????
  • ???
  • ????//?包含“子Map”的構(gòu)造函數(shù)????
  • ????public?Hashtable(Map<??extends?K,???extends?V>?t)?{????
  • ????????this(Math.max(2*t.size(),?11),?0.75f);????
  • ????????//?將“子Map”的全部元素都添加到Hashtable中????
  • ????????putAll(t);????
  • ????}????
  • ???
  • ????public?synchronized?int?size()?{????
  • ????????return?count;????
  • ????}????
  • ???
  • ????public?synchronized?boolean?isEmpty()?{????
  • ????????return?count?==?0;????
  • ????}????
  • ???
  • ????//?返回“所有key”的枚舉對(duì)象????
  • ????public?synchronized?Enumeration<K>?keys()?{????
  • ????????return?this.<K>getEnumeration(KEYS);????
  • ????}????
  • ???
  • ????//?返回“所有value”的枚舉對(duì)象????
  • ????public?synchronized?Enumeration<V>?elements()?{????
  • ????????return?this.<V>getEnumeration(VALUES);????
  • ????}????
  • ???
  • ????//?判斷Hashtable是否包含“值(value)”????
  • ????public?synchronized?boolean?contains(Object?value)?{????
  • ????????//注意,Hashtable中的value不能是null,????
  • ????????//?若是null的話,拋出異常!????
  • ????????if?(value?==?null)?{????
  • ????????????throw?new?NullPointerException();????
  • ????????}????
  • ???
  • ????????//?從后向前遍歷table數(shù)組中的元素(Entry)????
  • ????????//?對(duì)于每個(gè)Entry(單向鏈表),逐個(gè)遍歷,判斷節(jié)點(diǎn)的值是否等于value????
  • ????????Entry?tab[]?=?table;????
  • ????????for?(int?i?=?tab.length?;?i--?>?0?;)?{????
  • ????????????for?(Entry<K,V>?e?=?tab[i]?;?e?!=?null?;?e?=?e.next)?{????
  • ????????????????if?(e.value.equals(value))?{????
  • ????????????????????return?true;????
  • ????????????????}????
  • ????????????}????
  • ????????}????
  • ????????return?false;????
  • ????}????
  • ???
  • ????public?boolean?containsValue(Object?value)?{????
  • ????????return?contains(value);????
  • ????}????
  • ???
  • ????//?判斷Hashtable是否包含key????
  • ????public?synchronized?boolean?containsKey(Object?key)?{????
  • ????????Entry?tab[]?=?table;????
  • ????????//計(jì)算hash值,直接用key的hashCode代替??
  • ????????int?hash?=?key.hashCode();??????
  • ????????//?計(jì)算在數(shù)組中的索引值???
  • ????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ????????//?找到“key對(duì)應(yīng)的Entry(鏈表)”,然后在鏈表中找出“哈希值”和“鍵值”與key都相等的元素????
  • ????????for?(Entry<K,V>?e?=?tab[index]?;?e?!=?null?;?e?=?e.next)?{????
  • ????????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ????????????????return?true;????
  • ????????????}????
  • ????????}????
  • ????????return?false;????
  • ????}????
  • ???
  • ????//?返回key對(duì)應(yīng)的value,沒(méi)有的話返回null????
  • ????public?synchronized?V?get(Object?key)?{????
  • ????????Entry?tab[]?=?table;????
  • ????????int?hash?=?key.hashCode();????
  • ????????//?計(jì)算索引值,????
  • ????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ????????//?找到“key對(duì)應(yīng)的Entry(鏈表)”,然后在鏈表中找出“哈希值”和“鍵值”與key都相等的元素????
  • ????????for?(Entry<K,V>?e?=?tab[index]?;?e?!=?null?;?e?=?e.next)?{????
  • ????????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ????????????????return?e.value;????
  • ????????????}????
  • ????????}????
  • ????????return?null;????
  • ????}????
  • ???
  • ????//?調(diào)整Hashtable的長(zhǎng)度,將長(zhǎng)度變成原來(lái)的2倍+1???
  • ????protected?void?rehash()?{????
  • ????????int?oldCapacity?=?table.length;????
  • ????????Entry[]?oldMap?=?table;????
  • ???
  • ????????//創(chuàng)建新容量大小的Entry數(shù)組??
  • ????????int?newCapacity?=?oldCapacity?*?2?+?1;????
  • ????????Entry[]?newMap?=?new?Entry[newCapacity];????
  • ???
  • ????????modCount++;????
  • ????????threshold?=?(int)(newCapacity?*?loadFactor);????
  • ????????table?=?newMap;????
  • ??????????
  • ????????//將“舊的Hashtable”中的元素復(fù)制到“新的Hashtable”中??
  • ????????for?(int?i?=?oldCapacity?;?i--?>?0?;)?{????
  • ????????????for?(Entry<K,V>?old?=?oldMap[i]?;?old?!=?null?;?)?{????
  • ????????????????Entry<K,V>?e?=?old;????
  • ????????????????old?=?old.next;????
  • ????????????????//重新計(jì)算index??
  • ????????????????int?index?=?(e.hash?&?0x7FFFFFFF)?%?newCapacity;????
  • ????????????????e.next?=?newMap[index];????
  • ????????????????newMap[index]?=?e;????
  • ????????????}????
  • ????????}????
  • ????}????
  • ???
  • ????//?將“key-value”添加到Hashtable中????
  • ????public?synchronized?V?put(K?key,?V?value)?{????
  • ????????//?Hashtable中不能插入value為null的元素!!!????
  • ????????if?(value?==?null)?{????
  • ????????????throw?new?NullPointerException();????
  • ????????}????
  • ???
  • ????????//?若“Hashtable中已存在鍵為key的鍵值對(duì)”,????
  • ????????//?則用“新的value”替換“舊的value”????
  • ????????Entry?tab[]?=?table;????
  • ????????int?hash?=?key.hashCode();????
  • ????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ????????for?(Entry<K,V>?e?=?tab[index]?;?e?!=?null?;?e?=?e.next)?{????
  • ????????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ????????????????V?old?=?e.value;????
  • ????????????????e.value?=?value;????
  • ????????????????return?old;????
  • ????????????????}????
  • ????????}????
  • ???
  • ????????//?若“Hashtable中不存在鍵為key的鍵值對(duì)”,??
  • ????????//?將“修改統(tǒng)計(jì)數(shù)”+1????
  • ????????modCount++;????
  • ????????//??若“Hashtable實(shí)際容量”?>?“閾值”(閾值=總的容量?*?加載因子)????
  • ????????//??則調(diào)整Hashtable的大小????
  • ????????if?(count?>=?threshold)?{??
  • ????????????rehash();????
  • ???
  • ????????????tab?=?table;????
  • ????????????index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ????????}????
  • ???
  • ????????//將新的key-value對(duì)插入到tab[index]處(即鏈表的頭結(jié)點(diǎn))??
  • ????????Entry<K,V>?e?=?tab[index];???????????
  • ????????tab[index]?=?new?Entry<K,V>(hash,?key,?value,?e);????
  • ????????count++;????
  • ????????return?null;????
  • ????}????
  • ???
  • ????//?刪除Hashtable中鍵為key的元素????
  • ????public?synchronized?V?remove(Object?key)?{????
  • ????????Entry?tab[]?=?table;????
  • ????????int?hash?=?key.hashCode();????
  • ????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ??????????
  • ????????//從table[index]鏈表中找出要?jiǎng)h除的節(jié)點(diǎn),并刪除該節(jié)點(diǎn)。??
  • ????????//因?yàn)槭菃捂湵?#xff0c;因此要保留帶刪節(jié)點(diǎn)的前一個(gè)節(jié)點(diǎn),才能有效地刪除節(jié)點(diǎn)??
  • ????????for?(Entry<K,V>?e?=?tab[index],?prev?=?null?;?e?!=?null?;?prev?=?e,?e?=?e.next)?{????
  • ????????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ????????????????modCount++;????
  • ????????????????if?(prev?!=?null)?{????
  • ????????????????????prev.next?=?e.next;????
  • ????????????????}?else?{????
  • ????????????????????tab[index]?=?e.next;????
  • ????????????????}????
  • ????????????????count--;????
  • ????????????????V?oldValue?=?e.value;????
  • ????????????????e.value?=?null;????
  • ????????????????return?oldValue;????
  • ????????????}????
  • ????????}????
  • ????????return?null;????
  • ????}????
  • ???
  • ????//?將“Map(t)”的中全部元素逐一添加到Hashtable中????
  • ????public?synchronized?void?putAll(Map<??extends?K,???extends?V>?t)?{????
  • ????????for?(Map.Entry<??extends?K,???extends?V>?e?:?t.entrySet())????
  • ????????????put(e.getKey(),?e.getValue());????
  • ????}????
  • ???
  • ????//?清空Hashtable????
  • ????//?將Hashtable的table數(shù)組的值全部設(shè)為null????
  • ????public?synchronized?void?clear()?{????
  • ????????Entry?tab[]?=?table;????
  • ????????modCount++;????
  • ????????for?(int?index?=?tab.length;?--index?>=?0;?)????
  • ????????????tab[index]?=?null;????
  • ????????count?=?0;????
  • ????}????
  • ???
  • ????//?克隆一個(gè)Hashtable,并以O(shè)bject的形式返回。????
  • ????public?synchronized?Object?clone()?{????
  • ????????try?{????
  • ????????????Hashtable<K,V>?t?=?(Hashtable<K,V>)?super.clone();????
  • ????????????t.table?=?new?Entry[table.length];????
  • ????????????for?(int?i?=?table.length?;?i--?>?0?;?)?{????
  • ????????????????t.table[i]?=?(table[i]?!=?null)????
  • ??????????????????(Entry<K,V>)?table[i].clone()?:?null;????
  • ????????????}????
  • ????????????t.keySet?=?null;????
  • ????????????t.entrySet?=?null;????
  • ????????????t.values?=?null;????
  • ????????????t.modCount?=?0;????
  • ????????????return?t;????
  • ????????}?catch?(CloneNotSupportedException?e)?{?????
  • ????????????throw?new?InternalError();????
  • ????????}????
  • ????}????
  • ???
  • ????public?synchronized?String?toString()?{????
  • ????????int?max?=?size()?-?1;????
  • ????????if?(max?==?-1)????
  • ????????????return?"{}";????
  • ???
  • ????????StringBuilder?sb?=?new?StringBuilder();????
  • ????????Iterator<Map.Entry<K,V>>?it?=?entrySet().iterator();????
  • ???
  • ????????sb.append('{');????
  • ????????for?(int?i?=?0;?;?i++)?{????
  • ????????????Map.Entry<K,V>?e?=?it.next();????
  • ????????????K?key?=?e.getKey();????
  • ????????????V?value?=?e.getValue();????
  • ????????????sb.append(key???==?this???"(this?Map)"?:?key.toString());????
  • ????????????sb.append('=');????
  • ????????????sb.append(value?==?this???"(this?Map)"?:?value.toString());????
  • ???
  • ????????????if?(i?==?max)????
  • ????????????????return?sb.append('}').toString();????
  • ????????????sb.append(",?");????
  • ????????}????
  • ????}????
  • ???
  • ????//?獲取Hashtable的枚舉類(lèi)對(duì)象????
  • ????//?若Hashtable的實(shí)際大小為0,則返回“空枚舉類(lèi)”對(duì)象;????
  • ????//?否則,返回正常的Enumerator的對(duì)象。???
  • ????private?<T>?Enumeration<T>?getEnumeration(int?type)?{????
  • ????if?(count?==?0)?{????
  • ????????return?(Enumeration<T>)emptyEnumerator;????
  • ????}?else?{????
  • ????????return?new?Enumerator<T>(type,?false);????
  • ????}????
  • ????}????
  • ???
  • ????//?獲取Hashtable的迭代器????
  • ????//?若Hashtable的實(shí)際大小為0,則返回“空迭代器”對(duì)象;????
  • ????//?否則,返回正常的Enumerator的對(duì)象。(Enumerator實(shí)現(xiàn)了迭代器和枚舉兩個(gè)接口)????
  • ????private?<T>?Iterator<T>?getIterator(int?type)?{????
  • ????????if?(count?==?0)?{????
  • ????????????return?(Iterator<T>)?emptyIterator;????
  • ????????}?else?{????
  • ????????????return?new?Enumerator<T>(type,?true);????
  • ????????}????
  • ????}????
  • ???
  • ????//?Hashtable的“key的集合”。它是一個(gè)Set,沒(méi)有重復(fù)元素????
  • ????private?transient?volatile?Set<K>?keySet?=?null;????
  • ????//?Hashtable的“key-value的集合”。它是一個(gè)Set,沒(méi)有重復(fù)元素????
  • ????private?transient?volatile?Set<Map.Entry<K,V>>?entrySet?=?null;????
  • ????//?Hashtable的“key-value的集合”。它是一個(gè)Collection,可以有重復(fù)元素????
  • ????private?transient?volatile?Collection<V>?values?=?null;????
  • ???
  • ????//?返回一個(gè)被synchronizedSet封裝后的KeySet對(duì)象????
  • ????//?synchronizedSet封裝的目的是對(duì)KeySet的所有方法都添加synchronized,實(shí)現(xiàn)多線程同步????
  • ????public?Set<K>?keySet()?{????
  • ????????if?(keySet?==?null)????
  • ????????????keySet?=?Collections.synchronizedSet(new?KeySet(),?this);????
  • ????????return?keySet;????
  • ????}????
  • ???
  • ????//?Hashtable的Key的Set集合。????
  • ????//?KeySet繼承于AbstractSet,所以,KeySet中的元素沒(méi)有重復(fù)的。????
  • ????private?class?KeySet?extends?AbstractSet<K>?{????
  • ????????public?Iterator<K>?iterator()?{????
  • ????????????return?getIterator(KEYS);????
  • ????????}????
  • ????????public?int?size()?{????
  • ????????????return?count;????
  • ????????}????
  • ????????public?boolean?contains(Object?o)?{????
  • ????????????return?containsKey(o);????
  • ????????}????
  • ????????public?boolean?remove(Object?o)?{????
  • ????????????return?Hashtable.this.remove(o)?!=?null;????
  • ????????}????
  • ????????public?void?clear()?{????
  • ????????????Hashtable.this.clear();????
  • ????????}????
  • ????}????
  • ???
  • ????//?返回一個(gè)被synchronizedSet封裝后的EntrySet對(duì)象????
  • ????//?synchronizedSet封裝的目的是對(duì)EntrySet的所有方法都添加synchronized,實(shí)現(xiàn)多線程同步????
  • ????public?Set<Map.Entry<K,V>>?entrySet()?{????
  • ????????if?(entrySet==null)????
  • ????????????entrySet?=?Collections.synchronizedSet(new?EntrySet(),?this);????
  • ????????return?entrySet;????
  • ????}????
  • ???
  • ????//?Hashtable的Entry的Set集合。????
  • ????//?EntrySet繼承于AbstractSet,所以,EntrySet中的元素沒(méi)有重復(fù)的。????
  • ????private?class?EntrySet?extends?AbstractSet<Map.Entry<K,V>>?{????
  • ????????public?Iterator<Map.Entry<K,V>>?iterator()?{????
  • ????????????return?getIterator(ENTRIES);????
  • ????????}????
  • ???
  • ????????public?boolean?add(Map.Entry<K,V>?o)?{????
  • ????????????return?super.add(o);????
  • ????????}????
  • ???
  • ????????//?查找EntrySet中是否包含Object(0)????
  • ????????//?首先,在table中找到o對(duì)應(yīng)的Entry鏈表????
  • ????????//?然后,查找Entry鏈表中是否存在Object????
  • ????????public?boolean?contains(Object?o)?{????
  • ????????????if?(!(o?instanceof?Map.Entry))????
  • ????????????????return?false;????
  • ????????????Map.Entry?entry?=?(Map.Entry)o;????
  • ????????????Object?key?=?entry.getKey();????
  • ????????????Entry[]?tab?=?table;????
  • ????????????int?hash?=?key.hashCode();????
  • ????????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ???
  • ????????????for?(Entry?e?=?tab[index];?e?!=?null;?e?=?e.next)????
  • ????????????????if?(e.hash==hash?&&?e.equals(entry))????
  • ????????????????????return?true;????
  • ????????????return?false;????
  • ????????}????
  • ???
  • ????????//?刪除元素Object(0)????
  • ????????//?首先,在table中找到o對(duì)應(yīng)的Entry鏈表??
  • ????????//?然后,刪除鏈表中的元素Object????
  • ????????public?boolean?remove(Object?o)?{????
  • ????????????if?(!(o?instanceof?Map.Entry))????
  • ????????????????return?false;????
  • ????????????Map.Entry<K,V>?entry?=?(Map.Entry<K,V>)?o;????
  • ????????????K?key?=?entry.getKey();????
  • ????????????Entry[]?tab?=?table;????
  • ????????????int?hash?=?key.hashCode();????
  • ????????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ???
  • ????????????for?(Entry<K,V>?e?=?tab[index],?prev?=?null;?e?!=?null;????
  • ?????????????????prev?=?e,?e?=?e.next)?{????
  • ????????????????if?(e.hash==hash?&&?e.equals(entry))?{????
  • ????????????????????modCount++;????
  • ????????????????????if?(prev?!=?null)????
  • ????????????????????????prev.next?=?e.next;????
  • ????????????????????else???
  • ????????????????????????tab[index]?=?e.next;????
  • ???
  • ????????????????????count--;????
  • ????????????????????e.value?=?null;????
  • ????????????????????return?true;????
  • ????????????????}????
  • ????????????}????
  • ????????????return?false;????
  • ????????}????
  • ???
  • ????????public?int?size()?{????
  • ????????????return?count;????
  • ????????}????
  • ???
  • ????????public?void?clear()?{????
  • ????????????Hashtable.this.clear();????
  • ????????}????
  • ????}????
  • ???
  • ????//?返回一個(gè)被synchronizedCollection封裝后的ValueCollection對(duì)象????
  • ????//?synchronizedCollection封裝的目的是對(duì)ValueCollection的所有方法都添加synchronized,實(shí)現(xiàn)多線程同步????
  • ????public?Collection<V>?values()?{????
  • ????if?(values==null)????
  • ????????values?=?Collections.synchronizedCollection(new?ValueCollection(),????
  • ????????????????????????????????????????????????????????this);????
  • ????????return?values;????
  • ????}????
  • ???
  • ????//?Hashtable的value的Collection集合。????
  • ????//?ValueCollection繼承于AbstractCollection,所以,ValueCollection中的元素可以重復(fù)的。????
  • ????private?class?ValueCollection?extends?AbstractCollection<V>?{????
  • ????????public?Iterator<V>?iterator()?{????
  • ????????return?getIterator(VALUES);????
  • ????????}????
  • ????????public?int?size()?{????
  • ????????????return?count;????
  • ????????}????
  • ????????public?boolean?contains(Object?o)?{????
  • ????????????return?containsValue(o);????
  • ????????}????
  • ????????public?void?clear()?{????
  • ????????????Hashtable.this.clear();????
  • ????????}????
  • ????}????
  • ???
  • ????//?重新equals()函數(shù)????
  • ????//?若兩個(gè)Hashtable的所有key-value鍵值對(duì)都相等,則判斷它們兩個(gè)相等????
  • ????public?synchronized?boolean?equals(Object?o)?{????
  • ????????if?(o?==?this)????
  • ????????????return?true;????
  • ???
  • ????????if?(!(o?instanceof?Map))????
  • ????????????return?false;????
  • ????????Map<K,V>?t?=?(Map<K,V>)?o;????
  • ????????if?(t.size()?!=?size())????
  • ????????????return?false;????
  • ???
  • ????????try?{????
  • ????????????//?通過(guò)迭代器依次取出當(dāng)前Hashtable的key-value鍵值對(duì)????
  • ????????????//?并判斷該鍵值對(duì),存在于Hashtable中。????
  • ????????????//?若不存在,則立即返回false;否則,遍歷完“當(dāng)前Hashtable”并返回true。????
  • ????????????Iterator<Map.Entry<K,V>>?i?=?entrySet().iterator();????
  • ????????????while?(i.hasNext())?{????
  • ????????????????Map.Entry<K,V>?e?=?i.next();????
  • ????????????????K?key?=?e.getKey();????
  • ????????????????V?value?=?e.getValue();????
  • ????????????????if?(value?==?null)?{????
  • ????????????????????if?(!(t.get(key)==null?&&?t.containsKey(key)))????
  • ????????????????????????return?false;????
  • ????????????????}?else?{????
  • ????????????????????if?(!value.equals(t.get(key)))????
  • ????????????????????????return?false;????
  • ????????????????}????
  • ????????????}????
  • ????????}?catch?(ClassCastException?unused)???{????
  • ????????????return?false;????
  • ????????}?catch?(NullPointerException?unused)?{????
  • ????????????return?false;????
  • ????????}????
  • ???
  • ????????return?true;????
  • ????}????
  • ???
  • ????//?計(jì)算Entry的hashCode????
  • ????//?若?Hashtable的實(shí)際大小為0?或者?加載因子<0,則返回0。????
  • ????//?否則,返回“Hashtable中的每個(gè)Entry的key和value的異或值?的總和”。????
  • ????public?synchronized?int?hashCode()?{????
  • ????????int?h?=?0;????
  • ????????if?(count?==?0?||?loadFactor?<?0)????
  • ????????????return?h;??//?Returns?zero????
  • ???
  • ????????loadFactor?=?-loadFactor;??//?Mark?hashCode?computation?in?progress????
  • ????????Entry[]?tab?=?table;????
  • ????????for?(int?i?=?0;?i?<?tab.length;?i++)????
  • ????????????for?(Entry?e?=?tab[i];?e?!=?null;?e?=?e.next)????
  • ????????????????h?+=?e.key.hashCode()?^?e.value.hashCode();????
  • ????????loadFactor?=?-loadFactor;??//?Mark?hashCode?computation?complete????
  • ???
  • ????????return?h;????
  • ????}????
  • ???
  • ????//?java.io.Serializable的寫(xiě)入函數(shù)????
  • ????//?將Hashtable的“總的容量,實(shí)際容量,所有的Entry”都寫(xiě)入到輸出流中????
  • ????private?synchronized?void?writeObject(java.io.ObjectOutputStream?s)????
  • ????????throws?IOException????
  • ????{????
  • ????????//?Write?out?the?length,?threshold,?loadfactor????
  • ????????s.defaultWriteObject();????
  • ???
  • ????????//?Write?out?length,?count?of?elements?and?then?the?key/value?objects????
  • ????????s.writeInt(table.length);????
  • ????????s.writeInt(count);????
  • ????????for?(int?index?=?table.length-1;?index?>=?0;?index--)?{????
  • ????????????Entry?entry?=?table[index];????
  • ???
  • ????????????while?(entry?!=?null)?{????
  • ????????????s.writeObject(entry.key);????
  • ????????????s.writeObject(entry.value);????
  • ????????????entry?=?entry.next;????
  • ????????????}????
  • ????????}????
  • ????}????
  • ???
  • ????//?java.io.Serializable的讀取函數(shù):根據(jù)寫(xiě)入方式讀出????
  • ????//?將Hashtable的“總的容量,實(shí)際容量,所有的Entry”依次讀出????
  • ????private?void?readObject(java.io.ObjectInputStream?s)????
  • ?????????throws?IOException,?ClassNotFoundException????
  • ????{????
  • ????????//?Read?in?the?length,?threshold,?and?loadfactor????
  • ????????s.defaultReadObject();????
  • ???
  • ????????//?Read?the?original?length?of?the?array?and?number?of?elements????
  • ????????int?origlength?=?s.readInt();????
  • ????????int?elements?=?s.readInt();????
  • ???
  • ????????//?Compute?new?size?with?a?bit?of?room?5%?to?grow?but????
  • ????????//?no?larger?than?the?original?size.??Make?the?length????
  • ????????//?odd?if?it's?large?enough,?this?helps?distribute?the?entries.????
  • ????????//?Guard?against?the?length?ending?up?zero,?that's?not?valid.????
  • ????????int?length?=?(int)(elements?*?loadFactor)?+?(elements?/?20)?+?3;????
  • ????????if?(length?>?elements?&&?(length?&?1)?==?0)????
  • ????????????length--;????
  • ????????if?(origlength?>?0?&&?length?>?origlength)????
  • ????????????length?=?origlength;????
  • ???
  • ????????Entry[]?table?=?new?Entry[length];????
  • ????????count?=?0;????
  • ???
  • ????????//?Read?the?number?of?elements?and?then?all?the?key/value?objects????
  • ????????for?(;?elements?>?0;?elements--)?{????
  • ????????????K?key?=?(K)s.readObject();????
  • ????????????V?value?=?(V)s.readObject();????
  • ????????????????//?synch?could?be?eliminated?for?performance????
  • ????????????????reconstitutionPut(table,?key,?value);????
  • ????????}????
  • ????????this.table?=?table;????
  • ????}????
  • ???
  • ????private?void?reconstitutionPut(Entry[]?tab,?K?key,?V?value)????
  • ????????throws?StreamCorruptedException????
  • ????{????
  • ????????if?(value?==?null)?{????
  • ????????????throw?new?java.io.StreamCorruptedException();????
  • ????????}????
  • ????????//?Makes?sure?the?key?is?not?already?in?the?hashtable.????
  • ????????//?This?should?not?happen?in?deserialized?version.????
  • ????????int?hash?=?key.hashCode();????
  • ????????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ????????for?(Entry<K,V>?e?=?tab[index]?;?e?!=?null?;?e?=?e.next)?{????
  • ????????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ????????????????throw?new?java.io.StreamCorruptedException();????
  • ????????????}????
  • ????????}????
  • ????????//?Creates?the?new?entry.????
  • ????????Entry<K,V>?e?=?tab[index];????
  • ????????tab[index]?=?new?Entry<K,V>(hash,?key,?value,?e);????
  • ????????count++;????
  • ????}????
  • ???
  • ????//?Hashtable的Entry節(jié)點(diǎn),它本質(zhì)上是一個(gè)單向鏈表。????
  • ????//?也因此,我們才能推斷出Hashtable是由拉鏈法實(shí)現(xiàn)的散列表????
  • ????private?static?class?Entry<K,V>?implements?Map.Entry<K,V>?{????
  • ????????//?哈希值????
  • ????????int?hash;????
  • ????????K?key;????
  • ????????V?value;????
  • ????????//?指向的下一個(gè)Entry,即鏈表的下一個(gè)節(jié)點(diǎn)????
  • ????????Entry<K,V>?next;????
  • ???
  • ????????//?構(gòu)造函數(shù)????
  • ????????protected?Entry(int?hash,?K?key,?V?value,?Entry<K,V>?next)?{????
  • ????????????this.hash?=?hash;????
  • ????????????this.key?=?key;????
  • ????????????this.value?=?value;????
  • ????????????this.next?=?next;????
  • ????????}????
  • ???
  • ????????protected?Object?clone()?{????
  • ????????????return?new?Entry<K,V>(hash,?key,?value,????
  • ??????????????????(next==null???null?:?(Entry<K,V>)?next.clone()));????
  • ????????}????
  • ???
  • ????????public?K?getKey()?{????
  • ????????????return?key;????
  • ????????}????
  • ???
  • ????????public?V?getValue()?{????
  • ????????????return?value;????
  • ????????}????
  • ???
  • ????????//?設(shè)置value。若value是null,則拋出異常。????
  • ????????public?V?setValue(V?value)?{????
  • ????????????if?(value?==?null)????
  • ????????????????throw?new?NullPointerException();????
  • ???
  • ????????????V?oldValue?=?this.value;????
  • ????????????this.value?=?value;????
  • ????????????return?oldValue;????
  • ????????}????
  • ???
  • ????????//?覆蓋equals()方法,判斷兩個(gè)Entry是否相等。????
  • ????????//?若兩個(gè)Entry的key和value都相等,則認(rèn)為它們相等。????
  • ????????public?boolean?equals(Object?o)?{????
  • ????????????if?(!(o?instanceof?Map.Entry))????
  • ????????????????return?false;????
  • ????????????Map.Entry?e?=?(Map.Entry)o;????
  • ???
  • ????????????return?(key==null???e.getKey()==null?:?key.equals(e.getKey()))?&&????
  • ???????????????(value==null???e.getValue()==null?:?value.equals(e.getValue()));????
  • ????????}????
  • ???
  • ????????public?int?hashCode()?{????
  • ????????????return?hash?^?(value==null???0?:?value.hashCode());????
  • ????????}????
  • ???
  • ????????public?String?toString()?{????
  • ????????????return?key.toString()+"="+value.toString();????
  • ????????}????
  • ????}????
  • ???
  • ????private?static?final?int?KEYS?=?0;????
  • ????private?static?final?int?VALUES?=?1;????
  • ????private?static?final?int?ENTRIES?=?2;????
  • ???
  • ????//?Enumerator的作用是提供了“通過(guò)elements()遍歷Hashtable的接口”?和?“通過(guò)entrySet()遍歷Hashtable的接口”。????
  • ????private?class?Enumerator<T>?implements?Enumeration<T>,?Iterator<T>?{????
  • ????????//?指向Hashtable的table????
  • ????????Entry[]?table?=?Hashtable.this.table;????
  • ????????//?Hashtable的總的大小????
  • ????????int?index?=?table.length;????
  • ????????Entry<K,V>?entry?=?null;????
  • ????????Entry<K,V>?lastReturned?=?null;????
  • ????????int?type;????
  • ???
  • ????????//?Enumerator是?“迭代器(Iterator)”?還是?“枚舉類(lèi)(Enumeration)”的標(biāo)志????
  • ????????//?iterator為true,表示它是迭代器;否則,是枚舉類(lèi)。????
  • ????????boolean?iterator;????
  • ???
  • ????????//?在將Enumerator當(dāng)作迭代器使用時(shí)會(huì)用到,用來(lái)實(shí)現(xiàn)fail-fast機(jī)制。????
  • ????????protected?int?expectedModCount?=?modCount;????
  • ???
  • ????????Enumerator(int?type,?boolean?iterator)?{????
  • ????????????this.type?=?type;????
  • ????????????this.iterator?=?iterator;????
  • ????????}????
  • ???
  • ????????//?從遍歷table的數(shù)組的末尾向前查找,直到找到不為null的Entry。????
  • ????????public?boolean?hasMoreElements()?{????
  • ????????????Entry<K,V>?e?=?entry;????
  • ????????????int?i?=?index;????
  • ????????????Entry[]?t?=?table;????
  • ????????????/*?Use?locals?for?faster?loop?iteration?*/???
  • ????????????while?(e?==?null?&&?i?>?0)?{????
  • ????????????????e?=?t[--i];????
  • ????????????}????
  • ????????????entry?=?e;????
  • ????????????index?=?i;????
  • ????????????return?e?!=?null;????
  • ????????}????
  • ???
  • ????????//?獲取下一個(gè)元素????
  • ????????//?注意:從hasMoreElements()?和nextElement()?可以看出“Hashtable的elements()遍歷方式”????
  • ????????//?首先,從后向前的遍歷table數(shù)組。table數(shù)組的每個(gè)節(jié)點(diǎn)都是一個(gè)單向鏈表(Entry)。????
  • ????????//?然后,依次向后遍歷單向鏈表Entry。????
  • ????????public?T?nextElement()?{????
  • ????????????Entry<K,V>?et?=?entry;????
  • ????????????int?i?=?index;????
  • ????????????Entry[]?t?=?table;????
  • ????????????/*?Use?locals?for?faster?loop?iteration?*/???
  • ????????????while?(et?==?null?&&?i?>?0)?{????
  • ????????????????et?=?t[--i];????
  • ????????????}????
  • ????????????entry?=?et;????
  • ????????????index?=?i;????
  • ????????????if?(et?!=?null)?{????
  • ????????????????Entry<K,V>?e?=?lastReturned?=?entry;????
  • ????????????????entry?=?e.next;????
  • ????????????????return?type?==?KEYS???(T)e.key?:?(type?==?VALUES???(T)e.value?:?(T)e);????
  • ????????????}????
  • ????????????throw?new?NoSuchElementException("Hashtable?Enumerator");????
  • ????????}????
  • ???
  • ????????//?迭代器Iterator的判斷是否存在下一個(gè)元素????
  • ????????//?實(shí)際上,它是調(diào)用的hasMoreElements()????
  • ????????public?boolean?hasNext()?{????
  • ????????????return?hasMoreElements();????
  • ????????}????
  • ???
  • ????????//?迭代器獲取下一個(gè)元素????
  • ????????//?實(shí)際上,它是調(diào)用的nextElement()????
  • ????????public?T?next()?{????
  • ????????????if?(modCount?!=?expectedModCount)????
  • ????????????????throw?new?ConcurrentModificationException();????
  • ????????????return?nextElement();????
  • ????????}????
  • ???
  • ????????//?迭代器的remove()接口。????
  • ????????//?首先,它在table數(shù)組中找出要?jiǎng)h除元素所在的Entry,????
  • ????????//?然后,刪除單向鏈表Entry中的元素。????
  • ????????public?void?remove()?{????
  • ????????????if?(!iterator)????
  • ????????????????throw?new?UnsupportedOperationException();????
  • ????????????if?(lastReturned?==?null)????
  • ????????????????throw?new?IllegalStateException("Hashtable?Enumerator");????
  • ????????????if?(modCount?!=?expectedModCount)????
  • ????????????????throw?new?ConcurrentModificationException();????
  • ???
  • ????????????synchronized(Hashtable.this)?{????
  • ????????????????Entry[]?tab?=?Hashtable.this.table;????
  • ????????????????int?index?=?(lastReturned.hash?&?0x7FFFFFFF)?%?tab.length;????
  • ???
  • ????????????????for?(Entry<K,V>?e?=?tab[index],?prev?=?null;?e?!=?null;????
  • ?????????????????????prev?=?e,?e?=?e.next)?{????
  • ????????????????????if?(e?==?lastReturned)?{????
  • ????????????????????????modCount++;????
  • ????????????????????????expectedModCount++;????
  • ????????????????????????if?(prev?==?null)????
  • ????????????????????????????tab[index]?=?e.next;????
  • ????????????????????????else???
  • ????????????????????????????prev.next?=?e.next;????
  • ????????????????????????count--;????
  • ????????????????????????lastReturned?=?null;????
  • ????????????????????????return;????
  • ????????????????????}????
  • ????????????????}????
  • ????????????????throw?new?ConcurrentModificationException();????
  • ????????????}????
  • ????????}????
  • ????}????
  • ???
  • ???
  • ????private?static?Enumeration?emptyEnumerator?=?new?EmptyEnumerator();????
  • ????private?static?Iterator?emptyIterator?=?new?EmptyIterator();????
  • ???
  • ????//?空枚舉類(lèi)????
  • ????//?當(dāng)Hashtable的實(shí)際大小為0;此時(shí),又要通過(guò)Enumeration遍歷Hashtable時(shí),返回的是“空枚舉類(lèi)”的對(duì)象。????
  • ????private?static?class?EmptyEnumerator?implements?Enumeration<Object>?{????
  • ???
  • ????????EmptyEnumerator()?{????
  • ????????}????
  • ???
  • ????????//?空枚舉類(lèi)的hasMoreElements()?始終返回false????
  • ????????public?boolean?hasMoreElements()?{????
  • ????????????return?false;????
  • ????????}????
  • ???
  • ????????//?空枚舉類(lèi)的nextElement()?拋出異常????
  • ????????public?Object?nextElement()?{????
  • ????????????throw?new?NoSuchElementException("Hashtable?Enumerator");????
  • ????????}????
  • ????}????
  • ???
  • ???
  • ????//?空迭代器????
  • ????//?當(dāng)Hashtable的實(shí)際大小為0;此時(shí),又要通過(guò)迭代器遍歷Hashtable時(shí),返回的是“空迭代器”的對(duì)象。????
  • ????private?static?class?EmptyIterator?implements?Iterator<Object>?{????
  • ???
  • ????????EmptyIterator()?{????
  • ????????}????
  • ???
  • ????????public?boolean?hasNext()?{????
  • ????????????return?false;????
  • ????????}????
  • ???
  • ????????public?Object?next()?{????
  • ????????????throw?new?NoSuchElementException("Hashtable?Iterator");????
  • ????????}????
  • ???
  • ????????public?void?remove()?{????
  • ????????????throw?new?IllegalStateException("Hashtable?Iterator");????
  • ????????}????
  • ???
  • ????}????
  • }???
  • 幾點(diǎn)總結(jié)

    ? ? 針對(duì)Hashtable,我們同樣給出幾點(diǎn)比較重要的總結(jié),但要結(jié)合與HashMap的比較來(lái)總結(jié)。

    ? ? 1、二者的存儲(chǔ)結(jié)構(gòu)和解決沖突的方法都是相同的。

    ? ? 2、HashTable在不指定容量的情況下的默認(rèn)容量為11,而HashMap為16,Hashtable不要求底層數(shù)組的容量一定要為2的整數(shù)次冪,而HashMap則要求一定為2的整數(shù)次冪。

    ? ? 3、Hashtable中key和value都不允許為null,而HashMap中key和value都允許為null(key只能有一個(gè)為null,而value則可以有多個(gè)為null)。但是如果在Hashtable中有類(lèi)似put(null,null)的操作,編譯同樣可以通過(guò),因?yàn)閗ey和value都是Object類(lèi)型,但運(yùn)行時(shí)會(huì)拋出NullPointerException異常,這是JDK的規(guī)范規(guī)定的。我們來(lái)看下ContainsKey方法和ContainsValue的源碼:

    ?

    [java]?view plaincopy
  • //?判斷Hashtable是否包含“值(value)”????
  • ?public?synchronized?boolean?contains(Object?value)?{????
  • ?????//注意,Hashtable中的value不能是null,????
  • ?????//?若是null的話,拋出異常!????
  • ?????if?(value?==?null)?{????
  • ?????????throw?new?NullPointerException();????
  • ?????}????
  • ??
  • ?????//?從后向前遍歷table數(shù)組中的元素(Entry)????
  • ?????//?對(duì)于每個(gè)Entry(單向鏈表),逐個(gè)遍歷,判斷節(jié)點(diǎn)的值是否等于value????
  • ?????Entry?tab[]?=?table;????
  • ?????for?(int?i?=?tab.length?;?i--?>?0?;)?{????
  • ?????????for?(Entry<K,V>?e?=?tab[i]?;?e?!=?null?;?e?=?e.next)?{????
  • ?????????????if?(e.value.equals(value))?{????
  • ?????????????????return?true;????
  • ?????????????}????
  • ?????????}????
  • ?????}????
  • ?????return?false;????
  • ?}????
  • ??
  • ?public?boolean?containsValue(Object?value)?{????
  • ?????return?contains(value);????
  • ?}????
  • ??
  • ?//?判斷Hashtable是否包含key????
  • ?public?synchronized?boolean?containsKey(Object?key)?{????
  • ?????Entry?tab[]?=?table;????
  • /計(jì)算hash值,直接用key的hashCode代替??
  • ?????int?hash?=?key.hashCode();??????
  • ?????//?計(jì)算在數(shù)組中的索引值???
  • ?????int?index?=?(hash?&?0x7FFFFFFF)?%?tab.length;????
  • ?????//?找到“key對(duì)應(yīng)的Entry(鏈表)”,然后在鏈表中找出“哈希值”和“鍵值”與key都相等的元素????
  • ?????for?(Entry<K,V>?e?=?tab[index]?;?e?!=?null?;?e?=?e.next)?{????
  • ?????????if?((e.hash?==?hash)?&&?e.key.equals(key))?{????
  • ?????????????return?true;????
  • ?????????}????
  • ?????}????
  • ?????return?false;????
  • ?}????
  • ? ? 很明顯,如果value為null,會(huì)直接拋出NullPointerException異常,但源碼中并沒(méi)有對(duì)key是否為null判斷,有點(diǎn)小不解!不過(guò)NullPointerException屬于RuntimeException異常,是可以由JVM自動(dòng)拋出的,也許對(duì)key的值在JVM中有所限制吧。

    ? ? 4、Hashtable擴(kuò)容時(shí),將容量變?yōu)樵瓉?lái)的2倍加1,而HashMap擴(kuò)容時(shí),將容量變?yōu)樵瓉?lái)的2倍。
    ? ? 5、Hashtable計(jì)算hash值,直接用key的hashCode(),而HashMap重新計(jì)算了key的hash值,Hashtable在求hash值對(duì)應(yīng)的位置索引時(shí),用取模運(yùn)算,而HashMap在求位置索引時(shí),則用與運(yùn)算,且這里一般先用hash&0x7FFFFFFF后,再對(duì)length取模,&0x7FFFFFFF的目的是為了將負(fù)的hash值轉(zhuǎn)化為正值,因?yàn)閔ash值有可能為負(fù)數(shù),而&0x7FFFFFFF后,只有符號(hào)外改變,而后面的位都不變。

    轉(zhuǎn)載于:https://www.cnblogs.com/NullPointException/p/5069517.html

    總結(jié)

    以上是生活随笔為你收集整理的【Java集合源码剖析】Hashtable源码剖析的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

    如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

    国产综合婷婷 | 国产精品色婷婷视频 | 人人爱爱人人 | 在线免费观看av网站 | 久一久久 | 99产精品成人啪免费网站 | 毛片网站免费在线观看 | 亚洲精品www久久久 www国产精品com | 欧美激情xxxx | 一二三久久久 | 在线午夜| 欧美另类人妖 | 天天爽综合网 | 九九亚洲精品 | 日韩欧美精品在线观看视频 | 中文字幕在线观看一区 | 九九视频在线播放 | 国产中文字幕视频在线 | 视频福利在线观看 | 国产一二三区在线观看 | 久久成人一区二区 | 亚洲精品在线观看不卡 | 韩国av一区二区三区在线观看 | 在线国产一区 | 免费看精品久久片 | 91在线看视频免费 | 在线高清一区 | www视频在线免费观看 | 三级黄色在线 | 韩国一区二区三区视频 | 91视频国产高清 | 人人狠狠综合久久亚洲婷 | www黄色av| 中文字幕有码在线 | 在线观看日韩中文字幕 | 激情网婷婷| 成人黄色大片网站 | 毛片美女网站 | 激情综合五月婷婷 | 日韩视| 久久久久久片 | 欧美日韩色婷婷 | 日韩天天干 | 欧美久久久一区二区三区 | 在线观看国产一区二区 | 中文字幕2021 | 中文字幕中文字幕在线中文字幕三区 | 日韩在线大片 | ww亚洲ww亚在线观看 | 五月开心综合 | 波多野结衣电影一区二区 | 安徽妇搡bbbb搡bbbb | 日本精a在线观看 | 丰满少妇一级 | 国产精品免费视频观看 | 特级毛片网| 免费高清在线一区 | 亚洲a色 | 久草在线免 | 波多野结衣在线观看视频 | 日韩在线二区 | 在线国产日本 | 日韩成人免费在线电影 | 色婷婷激情电影 | 91免费版在线观看 | 国产一级在线播放 | 在线视频精品播放 | 91中文字幕视频 | 四虎伊人 | 久久一线 | 日本久久成人中文字幕电影 | 狠狠操91| 狠狠亚洲 | 国产又粗又猛又爽又黄的视频免费 | 国产精品密入口果冻 | 嫩草伊人久久精品少妇av | 啪啪动态视频 | 国产精品18久久久久久不卡孕妇 | 亚洲区二区 | av天天干| 日韩欧美一区二区在线 | 91日韩在线专区 | 亚洲人视频在线 | 国产精品不卡 | 亚洲国产中文字幕在线观看 | 91精品国产91久久久久福利 | 香蕉在线视频观看 | 狠狠插狠狠干 | 天天操夜夜操夜夜操 | 99热精品国产| 国产高清不卡一区二区三区 | 久久99精品一区二区三区三区 | 免费看片成年人 | ww视频在线观看 | 五月天久久婷婷 | 日韩二区三区在线 | 婷婷去俺也去六月色 | av蜜桃在线 | www.亚洲激情.com | 天天综合网久久综合网 | 99色在线观看 | 中文字幕免费在线看 | 久久久久久蜜桃一区二区 | 公开超碰在线 | av一级片网站 | 久久婷婷丁香 | 天天操·夜夜操 | 亚洲精品黄色 | 粉嫩一二三区 | 开心激情网五月天 | 亚洲 欧美日韩 国产 中文 | 在线免费观看黄色大片 | 亚洲乱码久久久 | 免费 在线 中文 日本 | 欧美一级性生活视频 | 精品国产aⅴ一区二区三区 在线直播av | 一级黄色片在线观看 | 99久久影院 | 日韩极品在线 | 久久婷婷视频 | 97在线公开视频 | 欧美做受69 | 亚洲精品美女在线观看播放 | 精品国产免费一区二区三区五区 | 三级免费黄色 | 91精品啪在线观看国产线免费 | 免费高清在线观看电视网站 | 国产码电影 | 免费在线观看不卡av | 久久久久久久久影视 | 日韩在线一区二区免费 | 欧美精品网站 | 999久久久国产精品 高清av免费观看 | 亚洲精品久久久久www | 久久久久久久久久久影院 | 精品视频网站 | 五月婷婷激情五月 | 奇米网8888 | 欧美成人a在线 | www.狠狠色.com | 美女久久网站 | 亚洲国产剧情 | 精品少妇一区二区三区在线 | 免费中文字幕在线观看 | 国产精品99蜜臀久久不卡二区 | 久久久国产精华液 | 国产精品毛片久久 | 日韩动漫免费观看高清完整版在线观看 | a√资源在线 | 亚洲精品一区二区在线观看 | 色综合久久久久综合体桃花网 | 久草视频99| 色资源在线观看 | 在线观看精品国产 | 国产91影院| 国产一级电影免费观看 | 国产精品黄网站在线观看 | 亚州免费视频 | 九九av| 中文字幕免费高清在线 | 在线v片免费观看视频 | 久草在线视频国产 | h视频日本 | 91av官网 | 欧美日韩一级在线 | 久久精品免费播放 | 91久久精品日日躁夜夜躁国产 | 黄色网www | 特级aaa毛片 | 九九免费在线观看 | av中文字幕亚洲 | 天天操天天干天天玩 | 国产成人一区二区三区在线观看 | 2019中文字幕网站 | 午夜美女福利 | 99精品视频免费在线观看 | 综合久久久久久 | 美女视频一区二区 | 爱爱一区 | 免费一级黄色 | 日本精品va在线观看 | 国产色综合天天综合网 | 久久神马影院 | 久99久在线视频 | 日本久久综合网 | 久久99电影 | 亚洲免费国产视频 | 探花视频在线观看免费版 | 国产清纯在线 | 欧美精品久久人人躁人人爽 | 日韩欧美大片免费观看 | 国产精品毛片一区视频 | 久久综合精品一区 | 欧美精品日韩 | 麻花传媒mv免费观看 | 国产福利91精品一区二区三区 | 三级a毛片 | 成人黄色片在线播放 | 蜜臀一区二区三区精品免费视频 | 91成熟丰满女人少妇 | 日本中文字幕免费观看 | 精品一区二区av | 国产精品久久久久久久婷婷 | av一级免费 | 一级黄色片在线 | 又黄又刺激视频 | 久久电影国产免费久久电影 | 欧美另类交在线观看 | 亚洲欧美成人 | 天天摸日日摸人人看 | 久久久久免费电影 | 日本女人在线观看 | 久久精品视频5 | 国产午夜精品福利视频 | 欧美日韩高清 | 国产伦理剧 | 一本—道久久a久久精品蜜桃 | 一级黄色片在线免费观看 | 欧美日韩在线观看一区二区三区 | 亚洲一区二区视频在线 | 韩日av一区二区 | 91九色国产视频 | 视频在线99| 免费日韩av电影 | 欧美一级视频在线观看 | www免费在线观看 | www.久久久.cum | 日韩精品久久久久久久电影竹菊 | 91资源在线播放 | 久草视频中文 | 一级黄色片在线免费观看 | 国产精品18久久久久vr手机版特色 | 日韩免费播放 | 日本午夜在线亚洲.国产 | 丁香花在线观看视频在线 | 久久国产影视 | 久久久久欠精品国产毛片国产毛生 | 成人三级网站在线观看 | 天天草天天色 | 一区二区三区日韩视频在线观看 | 黄色成人影视 | 国产手机在线播放 | 久久综合久久综合久久综合 | 国产福利免费看 | 国内精品视频在线播放 | 国产五月婷| 色www精品视频在线观看 | 国产视频 久久久 | 亚洲视频资源在线 | 美女视频是黄的免费观看 | 日韩资源在线观看 | 国内亚洲精品 | 精品久久一级片 | 欧美成人久久 | 精品一区二区三区电影 | 黄色小说在线免费观看 | 成人av免费播放 | 激情视频国产 | 天天干,天天操 | 97人人添人澡人人爽超碰动图 | 国产精品久久久久久一区二区三区 | 麻豆视频免费网站 | 亚洲精品国精品久久99热 | 综合网色 | 在线观看91精品视频 | 在线免费观看成人 | 亚洲综合在线五月天 | 亚洲无吗av | 成片免费观看视频大全 | 在线观看免费一区 | 久久久久欠精品国产毛片国产毛生 | 看片一区二区三区 | 亚洲国产精品一区二区久久hs | 精品国模一区二区 | 天天操人人干 | 91在线精品播放 | 久久久久亚洲精品 | 中文字幕在线有码 | 亚洲精品免费在线观看视频 | 青青草在久久免费久久免费 | 精品黄色在线观看 | 精品国产精品一区二区夜夜嗨 | 免费日韩视频 | 最新中文字幕在线观看视频 | 久久狠狠干 | 亚洲成人精品久久 | 国产精品mv | 99久热在线精品 | 麻豆综合网 | 国产精品九九九九九九 | 91免费网| 久久不射影院 | 最近中文字幕在线播放 | 日韩黄在线观看 | 免费在线激情电影 | 少妇bbb搡bbbb搡bbbb | 99这里只有精品99 | www.99热精品 | 国产一级免费片 | 国产高清久久久久 | 麻豆你懂的 | 粉嫩av一区二区三区四区五区 | 国产精品成人一区二区 | 中文字幕日韩免费视频 | 91麻豆精品国产91久久久更新时间 | 看全黄大色黄大片 | 久久毛片网站 | 国产二区免费视频 | 国内少妇自拍视频一区 | 国产99久久久国产精品成人免费 | 日日操操操 | 欧美亚洲一级片 | 欧美一级小视频 | 91在线文字幕 | 国产麻豆精品久久 | 西西4444www大胆视频 | 97精品视频在线 | 国产在线观看中文字幕 | 精品一区二区综合 | 狠狠色综合网站久久久久久久 | 久久久久二区 | 啪啪激情网 | 人操人| 亚洲精品一区二区精华 | 一级片黄色片网站 | 国产精品 国产精品 | 亚洲免费观看视频 | 精品国产乱码久久久久久三级人 | www.久久久| 久久久久激情电影 | 中文字幕资源网 | 91亚洲精 | 九九久久影院 | 五月综合色 | 在线91播放 | 国产又粗又硬又长又爽的视频 | 久久福利综合 | 国产精品久久久久久久久久久久午 | 特级a老妇做爰全过程 | 狠狠做深爱婷婷综合一区 | 国产日韩精品视频 | 97伊人网| 日日射av| 特级毛片在线免费观看 | 久久官网| 国产精品白浆视频 | 免费能看的黄色片 | 国产色就色| 亚洲精品88欧美一区二区 | 亚洲专区欧美 | 日韩高清av| 国内精品视频在线 | 久久99精品国产 | 久久免费观看少妇a级毛片 久久久久成人免费 | 一本到视频在线观看 | 婷婷色av| 激情综合网天天干 | 在线播放一区二区三区 | 亚洲美女精品区人人人人 | 韩日精品中文字幕 | 3d黄动漫免费看 | 亚洲精品日韩在线观看 | 日韩久久一区二区 | 欧美日韩视频在线 | 国内精品久久久久影院优 | 日日爽| 九九视频在线播放 | 欧美日韩视频在线一区 | 午夜影院一级 | 美女搞黄国产视频网站 | 六月丁香在线观看 | 国产精品1区 | 亚洲最新av网站 | 人人爽人人干 | 在线观看精品国产 | 国产视频97 | 亚洲永久精品国产 | 日韩资源在线观看 | 91tv国产成人福利 | www.天天成人国产电影 | 日本不卡一区二区三区在线观看 | 国产一区二区综合 | 99精品视频中文字幕 | 韩日精品在线 | 激情久久一区二区三区 | 欧美日韩在线免费观看视频 | 免费开视频 | 国产黄色免费 | 久久另类小说 | 午夜精品久久久 | 亚洲资源一区 | 人人干在线观看 | 超碰97免费观看 | 国产精品久久久久久久免费 | 激情网五月天 | 在线观看免费成人av | 国产裸体永久免费视频网站 | 国产91精品高清一区二区三区 | 在线成人免费av | 碰超在线| 成人在线你懂得 | 一区二区av | 97视频在线免费播放 | 国产精品视频在线观看 | 国产麻豆精品95视频 | 99久久精品免费看国产一区二区三区 | 久久久久久久久毛片精品 | 亚洲自拍偷拍色图 | av电影一区二区三区 | 国产精品欧美一区二区三区不卡 | 99视频 | 国偷自产视频一区二区久 | 丁香激情综合国产 | 国产一区在线不卡 | 99久久精品国产一区二区成人 | 久久看片网| 欧美色888| 91在线播放综合 | 久艹视频在线免费观看 | 在线观看av国产 | 玖玖精品在线 | 亚洲一区久久久 | 亚洲视频资源在线 | 亚洲一区免费在线 | 精品综合久久久 | 色婷婷福利| 国产精品18久久久 | 色姑娘综合网 | 又黄又网站 | 久久久久网站 | 国产最新在线观看 | 亚洲成人资源在线 | 午夜 免费 | 国产xxxxx在线观看 | 99久久精品国产亚洲 | 国产精品美女久久 | 在线国产精品视频 | 97香蕉久久国产在线观看 | 日韩电影一区二区三区 | 国产在线 一区二区三区 | 日韩在线观看视频中文字幕 | www.com操| 成人av在线观 | 欧美精品久久久久久久久久白贞 | 成人久久久久久久久久 | 97成人资源站 | 国产美女免费视频 | 中文字幕二区 | 一区二区 久久 | 国产片免费在线观看视频 | 久久这里只有精品9 | 免费看三片 | 日本性高潮视频 | 国产精品白浆 | 亚洲最大成人网4388xx | 激情五月av | 欧美日韩中文在线 | 五月婷婷在线视频观看 | 天天色天天艹 | 在线黄色观看 | 国产精品一区二区三区电影 | 人人草网站 | 狠狠做深爱婷婷综合一区 | 97视频在线免费 | 国产精品久久久久久久久婷婷 | 高清精品在线 | 久久a热6 | 日韩黄色中文字幕 | 免费观看全黄做爰大片国产 | 日日夜夜91| 韩日电影在线免费看 | 免费男女网站 | 国产香蕉在线 | 国产美女视频黄a视频免费 久久综合九色欧美综合狠狠 | 欧美日本国产在线观看 | 区一区二区三区中文字幕 | 狠狠狠色丁香婷婷综合久久五月 | 久久色视频 | 碰超在线观看 | 久久久久国 | 成年人在线电影 | 欧美激情另类 | 99视频在线免费播放 | 激情网五月天 | 麻豆视频免费入口 | 国产精品不卡在线观看 | 黄色小说视频在线 | 日本超碰在线 | 久久亚洲精品电影 | 91精品福利在线 | 91在线你懂的 | 特级西西444www大胆高清无视频 | 97国产情侣爱久久免费观看 | 国产免费作爱视频 | 美女视频黄是免费的 | 69精品久久久 | 91在线视频观看 | 99在线精品观看 | 久青草视频在线观看 | www在线免费观看 | 天天操综合网站 | 免费福利片2019潦草影视午夜 | 亚洲理论视频 | 狠狠色网| 国产精品一区二区三区在线免费观看 | 亚洲精品五月天 | 国产手机在线播放 | 黄色免费观看网址 | 亚州国产精品 | 亚洲精品午夜久久久久久久 | 丝袜制服天堂 | 国产1区在线 | 久久精品国产精品亚洲 | 久久久伦理 | 欧美黄色免费 | 天堂在线一区 | 中文字幕精品www乱入免费视频 | 六月丁香婷婷久久 | 国产亚洲精品久久久久5区 成人h电影在线观看 | 日本三级久久久 | 最新av观看| 天天色天天| 日韩一区二区三区不卡 | 欧美国产在线看 | 狠狠狠色丁香婷婷综合久久五月 | 成年人在线免费看 | 欧美一级激情 | 少妇bbbb揉bbbb日本 | 九色视频网址 | 久久成人国产 | 国产精品九九热 | 亚洲精品免费播放 | 精品亚洲视频在线观看 | 久久只精品99品免费久23小说 | 国产欧美日韩精品一区二区免费 | 国产精品18久久久久久久久久久久 | 婷婷六月色 | 国产高清无线码2021 | 香蕉蜜桃视频 | a黄在线观看 | 激情综合站 | 午夜av大片 | 久草在线久草在线2 | 日韩毛片精品 | 国产精品一区二区三区观看 | 中文字幕亚洲在线观看 | 97在线精品国自产拍中文 | 国内亚洲精品 | 久久精品亚洲一区二区三区观看模式 | 久久超碰在线 | 婷婷综合成人 | 91香蕉视频污在线 | 久久人人爽视频 | www国产亚洲精品久久网站 | 精品自拍av| 免费观看性生活大片 | 中文字幕在线免费 | 国产精品av在线 | 国产精品久久久久久久久久久久午夜 | 免费看久久 | 深爱激情开心 | 91精品一区二区三区蜜臀 | 日韩黄色中文字幕 | 国内精品亚洲 | 黄色大片日本 | 日韩欧美在线一区 | 超碰在线9 | 免费日韩电影 | 2021国产视频| 97在线免费视频观看 | 国产在线精品区 | 18国产精品白浆在线观看免费 | 在线看av网址 | 国产精品黑丝在线观看 | 久久精彩 | 91精品麻豆 | av成人免费在线观看 | 日韩久久精品一区二区三区 | 久久不射电影院 | 91中文字幕永久在线 | 国产一级视频在线免费观看 | 精品人人人人 | 69精品久久久 | 久亚洲精品| 国产精品久久久久久久久久99 | 91色国产在线 | 久久av影视| 91色影院| 成人av动漫在线 | 九九综合久久 | 91精品久久久久久综合五月天 | 久久久久久久久久免费视频 | 夜夜躁狠狠燥 | 夜色在线资源 | 国产精品免费久久久久影院仙踪林 | 黄色软件视频网站 | 久久国产成人午夜av影院宅 | 欧美日韩性 | 97超碰资源总站 | 国产精品欧美激情在线观看 | 在线免费高清 | 欧美精品久久久 | 六月久久婷婷 | 日日干夜夜干 | 欧美日韩伦理在线 | 在线精品在线 | 欧美性猛片, | 日韩影视大全 | 亚洲精品在线观 | 91网址在线看 | 亚洲精品乱码白浆高清久久久久久 | 国产精品第2页 | 色综合天天色综合 | 日韩中字在线观看 | 日本精品视频一区二区 | 91麻豆精品久久久久久 | 少妇性色午夜淫片aaaze | 黄色毛片网站在线观看 | 色的网站在线观看 | 中文字幕一区二区三区四区在线视频 | 久久精品国产99国产 | 国产一区精品在线观看 | 国产黄色片一级 | 香蕉久草在线 | 香蕉精品视频在线观看 | 国产在线观看你懂得 | 婷婷六月丁| 香蕉视频在线免费 | 波多在线视频 | 精品一区二区电影 | 日日噜噜噜噜夜夜爽亚洲精品 | 成人一级片免费看 | 欧美一级性生活视频 | 久久久久国产视频 | 蜜臀精品久久久久久蜜臀 | 婷婷色五 | 亚洲综合激情 | 美女视频一区 | 国产高清精 | 国产美女久久久 | www.国产在线视频 | 日韩免费在线视频观看 | 久久毛片高清国产 | 久久久久久电影 | 97国产情侣爱久久免费观看 | 在线午夜电影神马影院 | 91污在线观看 | 激情综合色播五月 | 日日夜夜人人精品 | 亚洲老妇xxxxxx | av免费片 | 麻豆视频免费在线播放 | 国产精品久久久久久久久大全 | 日本夜夜草视频网站 | 欧美日韩中文在线视频 | 9797在线看片亚洲精品 | 亚洲高清精品在线 | 日韩成人精品一区二区 | 久久免费黄色大片 | 亚洲精品黄| 国产又粗又猛又爽又黄的视频先 | 91免费版在线 | 天天操操操操操操 | 久久精品直播 | 草樱av | 久久久网站 | 黄色a视频 | av日韩精品 | 国产精品视频99 | 亚洲 成人 一区 | 亚洲日本三级 | 中文字幕一区二区三区乱码不卡 | 午夜av在线 | 久久国产精品一区二区三区四区 | 久久开心激情 | 97超碰在线资源 | 美女久久久 | 欧美日韩性 | 黄免费在线观看 | 日本字幕网 | 伊人五月天.com | 国产一级二级三级在线观看 | 色婷婷激情四射 | 日韩中文字幕第一页 | 色午夜 | 五月婷婷在线视频观看 | 国产自在线 | 成人免费在线视频观看 | 在线视频18在线视频4k | 人人干人人超 | 一区二区三区四区五区在线视频 | av在线电影免费观看 | 91欧美国产 | 国产亚洲成人网 | 久久国产手机看片 | 国产91在线观 | 久久精品久久精品久久39 | 精品99在线视频 | 91精品天码美女少妇 | 99热在线网站 | 最近中文字幕国语免费高清6 | 免费精品国产 | 玖玖999 | 美女久久久久久久久久久 | 免费人成在线观看网站 | 玖玖视频国产 | 日韩欧美视频一区二区三区 | 欧美色图亚洲图片 | 在线天堂v | 久久久久久福利 | 美女网站色 | 久久婷婷五月综合色丁香 | 国产不卡精品 | www久久久久 | 91精品999| 日韩系列在线 | 日韩中文字幕电影 | 日韩中字在线 | 一区二区三区在线观看 | 欧美专区日韩专区 | 精品国内自产拍在线观看视频 | 日韩中文字幕免费视频 | 午夜精品一区二区三区在线视频 | 久久久久亚洲精品成人网小说 | 欧美日韩国产精品一区二区三区 | 久久久久黄 | 国产精品福利在线播放 | 日韩av网站在线播放 | 免费看精品久久片 | 国产在线更新 | 九九免费精品 | 欧美日韩一区二区在线 | 在线视频亚洲 | 一区精品在线 | 免费三及片 | 亚州欧美视频 | 精品a在线 | 狂野欧美激情性xxxx | 国产丝袜 | 色偷偷网站视频 | www.久久色| 91爱爱电影 | 高清国产在线一区 | 国产 在线 高清 精品 | 麻豆视频免费在线观看 | 国产精品一区久久久久 | 91精品无人成人www | 国产精品一区二区中文字幕 | 久久亚洲综合国产精品99麻豆的功能介绍 | 精品免费观看 | 成人三级网站在线观看 | 亚洲成人精品久久久 | 日韩亚洲欧美中文字幕 | 97福利| 精品国产99| 成人久久精品 | 亚洲精品男女 | 天天射天天操天天 | 在线观看日韩一区 | 日韩欧美网站 | 久久精品免费电影 | 九九免费精品 | 欧美另类交在线观看 | 亚洲精品美女免费 | 婷婷在线色| 在线不卡视频 | 91在线观看视频网站 | 欧美日韩一级久久久久久免费看 | 视频一区视频二区在线观看 | 国精产品999国精产品视频 | 91精品一区二区在线观看 | 久久久九色精品国产一区二区三区 | 天天操天天操天天 | 视频一区亚洲 | 色wwww| 色多多视频在线 | 国产黄色播放 | 久久人人艹 | 色婷婷国产精品一区在线观看 | 精选久久 | 婷婷av网站 | 99一级片 | 人人爽人人av | 中文字幕在线观看的网站 | 欧美污网站 | 黄色片网站大全 | 狠狠的日| 欧美精品中文 | 亚洲综合成人婷婷小说 | 日韩在线观看视频在线 | 日韩中文字幕国产精品 | 91精品久久香蕉国产线看观看 | 国产一区二区三区高清播放 | 久久国产美女视频 | 久久久久免费精品 | 欧洲av在线 | 粉嫩av一区二区三区免费 | 五月婷婷视频在线 | 丝袜+亚洲+另类+欧美+变态 | 97成人在线观看 | 欧美日韩二区三区 | 欧美性免费| 亚洲午夜久久久久久久久久久 | 亚洲电影自拍 | 久久草草热国产精品直播 | 国产精品人人做人人爽人人添 | 国产精品一区二区美女视频免费看 | 免费看三级黄色片 | 国产资源网站 | 精品一区二区在线免费观看 | 国产一区免费观看 | 成人精品国产 | 一级黄色在线视频 | 欧美成人手机版 | 亚洲清纯国产 | 人人射人人射 | 91色偷偷 | 高清av免费一区中文字幕 | 丁香花五月 | 久久露脸国产精品 | 国产香蕉在线 | 亚洲一区二区三区四区精品 | 91av电影在线观看 | 欧美成年人在线观看 | 91亚洲国产成人久久精品网站 | 亚洲免费av网站 | 黄色影院在线观看 | 超级av在线 | 日韩在线免费视频 | 在线视频第一页 | 日韩三级久久 | 欧美一区中文字幕 | 日日夜日日干 | 日韩免费一区二区在线观看 | 久久一二区 | 久久精品国产成人 | 国产精品a久久久久 | 欧美俄罗斯性视频 | 久久视频网 | 精品91久久久久 | 久久久久女教师免费一区 | 麻豆激情电影 | 91精品国产91久久久久福利 | 狠狠综合久久 | 伊人手机在线 | 国产一区二区久久久 | 亚洲va韩国va欧美va精四季 | 中文字幕首页 | 中文字幕av在线电影 | 国产在线观看91 | 亚洲另类视频在线 | 黄色福利网 | 欧美精品久久久久 | 久久99影院| 9999在线观看 | 久久8| 成人h视频在线播放 | 中文字幕在线字幕中文 | 日韩欧美精品一区二区三区经典 | 欧洲亚洲国产视频 | 91免费高清在线观看 | 中文乱码视频在线观看 | 天天狠狠| 久久久久女教师免费一区 | 中文字幕在线播放一区 | 欧美日韩国产在线精品 | 在线中文字幕播放 | 国产美女精彩久久 | 天天操天天射天天爽 | 成人av.com | 久久99精品国产99久久 | 国产精品毛片一区视频播 | 亚洲黄色免费在线看 | 日韩欧美aaa | 激情av资源网| 丰满少妇对白在线偷拍 | 天天综合婷婷 | 国产一区二区在线观看视频 | 久久九九影视网 | 国产精品一区二区 91 | 99国产情侣在线播放 | 色综合久久综合 | 精品伊人久久久 | 亚洲综合在线观看视频 | 免费久久网站 | 亚洲精品国产拍在线 | 蜜臀久久99精品久久久无需会员 | 亚洲视频每日更新 | 久久黄色美女 | 婷婷5月激情5月 | 国产理伦在线 | 最新av免费 | 三级av在线免费观看 | 丁香六月婷婷开心 | 精品在线一区二区 | 日韩av在线影视 | 亚洲网站在线 | 夜夜操天天 | 久久视频免费在线 | 国产成人黄色网址 | 精品久久一区二区 | 丁香久久久| 超碰av在线| 国产91精品一区二区麻豆网站 | 欧美在线观看视频免费 | 91人人视频在线观看 | 国产91精品一区二区绿帽 | 男女视频久久久 | 成人av免费在线播放 | 婷婷综合亚洲 | 中文字幕在线日本 | 久久一区二区三区超碰国产精品 | 亚洲成人av在线电影 | 天天av在线播放 | 国产 中文 日韩 欧美 | 91色网址 | 久久久免费高清视频 | 日韩av进入 | 91精品黄色 | 成人91av| 久久国产精品视频 | 黄网站免费大全入口 | 91精品国产三级a在线观看 | 韩国在线视频一区 | 久久久久五月 | 人人插人人澡 | 成在线播放| 97精品久久 | 亚洲成人黄色在线观看 | 国产精品国产三级国产aⅴ入口 | 久视频在线播放 | 人人干人人模 | 亚洲精品mv在线观看 | 日韩av一区二区在线 | 成人黄色毛片 | 91视频一8mav | 久久在线精品视频 | 久久久久一区二区三区四区 | 婷婷网五月天 | 亚洲欧美在线视频免费 | 97超在线视频 | 国产高清不卡一区二区三区 | av超碰在线观看 | 国产亚洲在 | 亚洲视频一级 | 午夜在线免费视频 | 久久99深爱久久99精品 | www中文在线 | 99色在线 | 国产高清第一页 | 视频三区 | 伊人久久电影网 | 精品一区二区免费视频 | 久久精品国产免费看久久精品 | 黄色大片日本免费大片 | 91麻豆精品国产91久久久无限制版 | 日韩av中文字幕在线 | 正在播放一区二区 | 成年人免费av网站 | 久久精品牌麻豆国产大山 | av黄免费看| 在线观看视频99 | 处女av在线 | 天天操狠狠操夜夜操 | 亚洲综合小说 | 国产视频 亚洲视频 | 国产色网站 | 久草久热| 欧美欧美| 久久久99精品免费观看 | 狠狠操天天射 | 精品日韩中文字幕 | 国产成人av免费在线观看 | 成年人精品 | 国产精品麻豆一区二区三区 | 九九久久久久99精品 | 97视频在线观看播放 | 久热色超碰 | 中文字幕 91| 成人免费视频免费观看 | 五月天丁香亚洲 | 国产精品手机在线观看 | 久久香蕉一区 | 国产中文在线视频 | 国产精品成人aaaaa网站 | av高清不卡 | 狠狠色丁婷婷日日 | 久久免费视频99 | 黄色片软件网站 | 国产高清精 | 国产黄色片免费看 | 成年人在线观看 | 久久免费视频播放 | 人人搞人人爽 | 激情丁香月 | www.黄色小说.com | 成人中文字幕av | 国产一级免费av |