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

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

生活随笔

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

java

Java 集合系列10: HashMap深入解析(2)

發(fā)布時(shí)間:2025/3/20 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java 集合系列10: HashMap深入解析(2) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

戳上面的藍(lán)字關(guān)注我們哦!

?精彩內(nèi)容?


?

精選java等全套視頻教程

精選java電子圖書

大數(shù)據(jù)視頻教程精選

java項(xiàng)目練習(xí)精選

QQ群:766946816

概述

這接著上一篇的文章的內(nèi)容。

第3.1部分 HashMap的“拉鏈法”相關(guān)內(nèi)容

3.1.1 HashMap數(shù)據(jù)存儲(chǔ)數(shù)組

transient Entry[] table;

HashMap中的key-value都是存儲(chǔ)在Entry數(shù)組中的。

3.1.2 數(shù)據(jù)節(jié)點(diǎn)Entry的數(shù)據(jù)結(jié)構(gòu)

static class Entry<K,V> implements Map.Entry<K,V> {final K key;V value;// 指向下一個(gè)節(jié)點(diǎn)Entry<K,V> next;final int hash;// 構(gòu)造函數(shù)。// 輸入?yún)?shù)包括"哈希值(h)", "鍵(k)", "值(v)", "下一節(jié)點(diǎn)(n)"Entry(int h, K k, V v, Entry<K,V> n) {value = v;next = n;key = k;hash = h;}public final K getKey() {return key;}public final V getValue() {return value;}public final V setValue(V newValue) {V oldValue = value;value = newValue;return oldValue;}// 判斷兩個(gè)Entry是否相等// 若兩個(gè)Entry的“key”和“value”都相等,則返回true。// 否則,返回falsepublic final boolean equals(Object o) {if (!(o instanceof Map.Entry))return false;Map.Entry e = (Map.Entry)o;Object k1 = getKey();Object k2 = e.getKey();if (k1 == k2 || (k1 != null && k1.equals(k2))) {Object v1 = getValue();Object v2 = e.getValue();if (v1 == v2 || (v1 != null && v1.equals(v2)))return true;}return false;}// 實(shí)現(xiàn)hashCode()public final int hashCode() {return (key==null ? ? 0 : key.hashCode()) ^(value==null ? 0 : value.hashCode());}public final String toString() {return getKey() + "=" + getValue();}// 當(dāng)向HashMap中添加元素時(shí),繪調(diào)用recordAccess()。// 這里不做任何處理void recordAccess(HashMap<K,V> m) {}// 當(dāng)從HashMap中刪除元素時(shí),繪調(diào)用recordRemoval()。// 這里不做任何處理void recordRemoval(HashMap<K,V> m) {} }

從中,我們可以看出 Entry 實(shí)際上就是一個(gè)單向鏈表。這也是為什么我們說(shuō)HashMap是通過(guò)拉鏈法解決哈希沖突的。
Entry 實(shí)現(xiàn)了Map.Entry 接口,即實(shí)現(xiàn)getKey(), getValue(), setValue(V value), equals(Object o), hashCode()這些函數(shù)。這些都是基本的讀取/修改key、value值的函數(shù)。

第3.2部分 HashMap的構(gòu)造函數(shù)

HashMap共包括4個(gè)構(gòu)造函數(shù)

// 默認(rèn)構(gòu)造函數(shù)。 public HashMap() {// 設(shè)置“加載因子”this.loadFactor = DEFAULT_LOAD_FACTOR;// 設(shè)置“HashMap閾值”,當(dāng)HashMap中存儲(chǔ)數(shù)據(jù)的數(shù)量達(dá)到threshold時(shí),就需要將HashMap的容量加倍。threshold = (int)(DEFAULT_INITIAL_CAPACITY * DEFAULT_LOAD_FACTOR);// 創(chuàng)建Entry數(shù)組,用來(lái)保存數(shù)據(jù)table = new Entry[DEFAULT_INITIAL_CAPACITY];init(); } // 指定“容量大小”和“加載因子”的構(gòu)造函數(shù) public HashMap(int initialCapacity, float loadFactor) {if (initialCapacity < 0)throw new IllegalArgumentException("Illegal initial capacity: " +initialCapacity);// HashMap的最大容量只能是MAXIMUM_CAPACITYif (initialCapacity > MAXIMUM_CAPACITY)initialCapacity = MAXIMUM_CAPACITY;if (loadFactor <= 0 || Float.isNaN(loadFactor))throw new IllegalArgumentException("Illegal load factor: " +loadFactor);// Find a power of 2 >= initialCapacityint capacity = 1;while (capacity < initialCapacity)capacity <<= 1;// 設(shè)置“加載因子”this.loadFactor = loadFactor;// 設(shè)置“HashMap閾值”,當(dāng)HashMap中存儲(chǔ)數(shù)據(jù)的數(shù)量達(dá)到threshold時(shí),就需要將HashMap的容量加倍。threshold = (int)(capacity * loadFactor);// 創(chuàng)建Entry數(shù)組,用來(lái)保存數(shù)據(jù)table = new Entry[capacity];init(); } // 指定“容量大小”的構(gòu)造函數(shù) public HashMap(int initialCapacity) {this(initialCapacity, DEFAULT_LOAD_FACTOR); } // 包含“子Map”的構(gòu)造函數(shù) public HashMap(Map<? extends K, ? extends V> m) {this(Math.max((int) (m.size() / DEFAULT_LOAD_FACTOR) + 1,DEFAULT_INITIAL_CAPACITY), DEFAULT_LOAD_FACTOR);// 將m中的全部元素逐個(gè)添加到HashMap中putAllForCreate(m); }

第3.3部分 HashMap的主要對(duì)外接口

3.3.1 clear()

clear() 的作用是清空HashMap。它是通過(guò)將所有的元素設(shè)為null來(lái)實(shí)現(xiàn)的。

public void clear() {modCount++;Entry[] tab = table;for (int i = 0; i < tab.length; i++)tab[i] = null;size = 0; }

3.3.2 containsKey()

containsKey() 的作用是判斷HashMap是否包含key。

public boolean containsKey(Object key) {return getEntry(key) != null; }

containsKey() 首先通過(guò)getEntry(key)獲取key對(duì)應(yīng)的Entry,然后判斷該Entry是否為null。
getEntry()的源碼如下:

final Entry<K,V> getEntry(Object key) {// 獲取哈希值// HashMap將“key為null”的元素存儲(chǔ)在table[0]位置,“key不為null”的則調(diào)用hash()計(jì)算哈希值int hash = (key == null) ? 0 : hash(key.hashCode());// 在“該hash值對(duì)應(yīng)的鏈表”上查找“鍵值等于key”的元素for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {Object k;if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k))))return e;}return null; }

getEntry() 的作用就是返回“鍵為key”的鍵值對(duì),它的實(shí)現(xiàn)源碼中已經(jīng)進(jìn)行了說(shuō)明。
這里需要強(qiáng)調(diào)的是:HashMap將“key為null”的元素都放在table的位置0處,即table[0]中;“key不為null”的放在table的其余位置!

3.3.3 containsValue()

containsValue() 的作用是判斷HashMap是否包含“值為value”的元素。

public boolean containsValue(Object value) {// 若“value為null”,則調(diào)用containsNullValue()查找if (value == null)return containsNullValue();// 若“value不為null”,則查找HashMap中是否有值為value的節(jié)點(diǎn)。Entry[] tab = table;for (int i = 0; i < tab.length ; i++)for (Entry e = tab[i] ; e != null ; e = e.next)if (value.equals(e.value))return true;return false; }

從中,我們可以看出containsNullValue()分為兩步進(jìn)行處理:第一,若“value為null”,則調(diào)用containsNullValue()。第二,若“value不為null”,則查找HashMap中是否有值為value的節(jié)點(diǎn)。

containsNullValue() 的作用判斷HashMap中是否包含“值為null”的元素。

private boolean containsNullValue() {Entry[] tab = table;for (int i = 0; i < tab.length ; i++)for (Entry e = tab[i] ; e != null ; e = e.next)if (e.value == null)return true;return false; }

3.3.4 entrySet()、values()、keySet()

它們3個(gè)的原理類似,這里以entrySet()為例來(lái)說(shuō)明。
entrySet()的作用是返回“HashMap中所有Entry的集合”,它是一個(gè)集合。實(shí)現(xiàn)代碼如下:

// 返回“HashMap的Entry集合” public Set<Map.Entry<K,V>> entrySet() {return entrySet0(); } // 返回“HashMap的Entry集合”,它實(shí)際是返回一個(gè)EntrySet對(duì)象 private Set<Map.Entry<K,V>> entrySet0() {Set<Map.Entry<K,V>> es = entrySet;return es != null ? es : (entrySet = new EntrySet()); } // EntrySet對(duì)應(yīng)的集合 // EntrySet繼承于AbstractSet,說(shuō)明該集合中沒(méi)有重復(fù)的EntrySet。 private final class EntrySet extends AbstractSet<Map.Entry<K,V>> {public Iterator<Map.Entry<K,V>> iterator() {return newEntryIterator();}public boolean contains(Object o) {if (!(o instanceof Map.Entry))return false;Map.Entry<K,V> e = (Map.Entry<K,V>) o;Entry<K,V> candidate = getEntry(e.getKey());return candidate != null && candidate.equals(e);}public boolean remove(Object o) {return removeMapping(o) != null;}public int size() {return size;}public void clear() {HashMap.this.clear();} }

HashMap是通過(guò)拉鏈法實(shí)現(xiàn)的散列表。表現(xiàn)在HashMap包括許多的Entry,而每一個(gè)Entry本質(zhì)上又是一個(gè)單向鏈表。那么HashMap遍歷key-value鍵值對(duì)的時(shí)候,是如何逐個(gè)去遍歷的呢?

下面我們就看看HashMap是如何通過(guò)entrySet()遍歷的。
entrySet()實(shí)際上是通過(guò)newEntryIterator()實(shí)現(xiàn)的。 下面我們看看它的代碼:

// 返回一個(gè)“entry迭代器” Iterator<Map.Entry<K,V>> newEntryIterator() ? {return new EntryIterator(); } // Entry的迭代器 private final class EntryIterator extends HashIterator<Map.Entry<K,V>> {public Map.Entry<K,V> next() {return nextEntry();} } // HashIterator是HashMap迭代器的抽象出來(lái)的父類,實(shí)現(xiàn)了公共了函數(shù)。 // 它包含“key迭代器(KeyIterator)”、“Value迭代器(ValueIterator)”和“Entry迭代器(EntryIterator)”3個(gè)子類。 private abstract class HashIterator<E> implements Iterator<E> {// 下一個(gè)元素Entry<K,V> next;// expectedModCount用于實(shí)現(xiàn)fast-fail機(jī)制。int expectedModCount;// 當(dāng)前索引int index;// 當(dāng)前元素Entry<K,V> current;HashIterator() {expectedModCount = modCount;if (size > 0) { // advance to first entryEntry[] t = table;// 將next指向table中第一個(gè)不為null的元素。// 這里利用了index的初始值為0,從0開始依次向后遍歷,直到找到不為null的元素就退出循環(huán)。while (index < t.length && (next = t[index++]) == null);}}public final boolean hasNext() {return next != null;}// 獲取下一個(gè)元素final Entry<K,V> nextEntry() {if (modCount != expectedModCount)throw new ConcurrentModificationException();Entry<K,V> e = next;if (e == null)throw new NoSuchElementException();// 注意!!!// 一個(gè)Entry就是一個(gè)單向鏈表// 若該Entry的下一個(gè)節(jié)點(diǎn)不為空,就將next指向下一個(gè)節(jié)點(diǎn);// 否則,將next指向下一個(gè)鏈表(也是下一個(gè)Entry)的不為null的節(jié)點(diǎn)。if ((next = e.next) == null) {Entry[] t = table;while (index < t.length && (next = t[index++]) == null);}current = e;return e;}// 刪除當(dāng)前元素public void remove() {if (current == null)throw new IllegalStateException();if (modCount != expectedModCount)throw new ConcurrentModificationException();Object k = current.key;current = null;HashMap.this.removeEntryForKey(k);expectedModCount = modCount;} }

當(dāng)我們通過(guò)entrySet()獲取到的Iterator的next()方法去遍歷HashMap時(shí),實(shí)際上調(diào)用的是 nextEntry() 。而nextEntry()的實(shí)現(xiàn)方式,先遍歷Entry(根據(jù)Entry在table中的序號(hào),從小到大的遍歷);然后對(duì)每個(gè)Entry(即每個(gè)單向鏈表),逐個(gè)遍歷。

3.3.5 get()

get() 的作用是獲取key對(duì)應(yīng)的value,它的實(shí)現(xiàn)代碼如下:

public V get(Object key) {if (key == null)return getForNullKey();// 獲取key的hash值int hash = hash(key.hashCode());// 在“該hash值對(duì)應(yīng)的鏈表”上查找“鍵值等于key”的元素for (Entry<K,V> e = table[indexFor(hash, table.length)];e != null;e = e.next) {Object k;if (e.hash == hash && ((k = e.key) == key || key.equals(k)))return e.value;}return null; }

3.3.6 put()

put() 的作用是對(duì)外提供接口,讓HashMap對(duì)象可以通過(guò)put()將“key-value”添加到HashMap中。

public V put(K key, V value) {// 若“key為null”,則將該鍵值對(duì)添加到table[0]中。if (key == null)return putForNullKey(value);// 若“key不為null”,則計(jì)算該key的哈希值,然后將其添加到該哈希值對(duì)應(yīng)的鏈表中。int hash = hash(key.hashCode());int i = indexFor(hash, table.length);for (Entry<K,V> e = table[i]; e != null; e = e.next) {Object k;// 若“該key”對(duì)應(yīng)的鍵值對(duì)已經(jīng)存在,則用新的value取代舊的value。然后退出!if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {V oldValue = e.value;e.value = value;e.recordAccess(this);return oldValue;}}// 若“該key”對(duì)應(yīng)的鍵值對(duì)不存在,則將“key-value”添加到table中modCount++;addEntry(hash, key, value, i);return null; }

若要添加到HashMap中的鍵值對(duì)對(duì)應(yīng)的key已經(jīng)存在HashMap中,則找到該鍵值對(duì);然后新的value取代舊的value,并退出!
若要添加到HashMap中的鍵值對(duì)對(duì)應(yīng)的key不在HashMap中,則將其添加到該哈希值對(duì)應(yīng)的鏈表中,并調(diào)用addEntry()。
下面看看addEntry()的代碼:

void addEntry(int hash, K key, V value, int bucketIndex) {// 保存“bucketIndex”位置的值到“e”中Entry<K,V> e = table[bucketIndex];// 設(shè)置“bucketIndex”位置的元素為“新Entry”,// 設(shè)置“e”為“新Entry的下一個(gè)節(jié)點(diǎn)”table[bucketIndex] = new Entry<K,V>(hash, key, value, e);// 若HashMap的實(shí)際大小 不小于 “閾值”,則調(diào)整HashMap的大小if (size++ >= threshold)resize(2 * table.length); }

addEntry() 的作用是新增Entry。將“key-value”插入指定位置,bucketIndex是位置索引。

說(shuō)到addEntry(),就不得不說(shuō)另一個(gè)函數(shù)createEntry()。createEntry()的代碼如下:

void createEntry(int hash, K key, V value, int bucketIndex) {// 保存“bucketIndex”位置的值到“e”中Entry<K,V> e = table[bucketIndex];// 設(shè)置“bucketIndex”位置的元素為“新Entry”,// 設(shè)置“e”為“新Entry的下一個(gè)節(jié)點(diǎn)”table[bucketIndex] = new Entry<K,V>(hash, key, value, e);size++; }

它們的作用都是將key、value添加到HashMap中。而且,比較addEntry()和createEntry()的代碼,我們發(fā)現(xiàn)addEntry()多了兩句:

if (size++ >= threshold)resize(2 * table.length);

那它們的區(qū)別到底是什么呢?
閱讀代碼,我們可以發(fā)現(xiàn),它們的使用情景不同。
(01) addEntry()一般用在 新增Entry可能導(dǎo)致“HashMap的實(shí)際容量”超過(guò)“閾值”的情況下。
? ? ? 例如,我們新建一個(gè)HashMap,然后不斷通過(guò)put()向HashMap中添加元素;put()是通過(guò)addEntry()新增Entry的。
? ? ? 在這種情況下,我們不知道何時(shí)“HashMap的實(shí)際容量”會(huì)超過(guò)“閾值”;
? ? ? 因此,需要調(diào)用addEntry()
(02) createEntry() 一般用在 新增Entry不會(huì)導(dǎo)致“HashMap的實(shí)際容量”超過(guò)“閾值”的情況下。
? ? ? ?例如,我們調(diào)用HashMap“帶有Map”的構(gòu)造函數(shù),它繪將Map的全部元素添加到HashMap中;
? ? ? 但在添加之前,我們已經(jīng)計(jì)算好“HashMap的容量和閾值”。也就是,可以確定“即使將Map中的全部元素添加到HashMap中,都不會(huì)超過(guò)HashMap的閾值”。
? ? ? 此時(shí),調(diào)用createEntry()即可。

3.3.7 putAll()

putAll() 的作用是將"m"的全部元素都添加到HashMap中,它的代碼如下:

public void putAll(Map<? extends K, ? extends V> m) {// 有效性判斷int numKeysToBeAdded = m.size();if (numKeysToBeAdded == 0)return;// 計(jì)算容量是否足夠,// 若“當(dāng)前實(shí)際容量 < 需要的容量”,則將容量x2。if (numKeysToBeAdded > threshold) {int targetCapacity = (int)(numKeysToBeAdded / loadFactor + 1);if (targetCapacity > MAXIMUM_CAPACITY)targetCapacity = MAXIMUM_CAPACITY;int newCapacity = table.length;while (newCapacity < targetCapacity)newCapacity <<= 1;if (newCapacity > table.length)resize(newCapacity);}// 通過(guò)迭代器,將“m”中的元素逐個(gè)添加到HashMap中。for (Iterator<? extends Map.Entry<? extends K, ? extends V>> i = m.entrySet().iterator(); i.hasNext(); ) {Map.Entry<? extends K, ? extends V> e = i.next();put(e.getKey(), e.getValue());} }

3.3.8 remove()

remove() 的作用是刪除“鍵為key”元素

public V remove(Object key) {Entry<K,V> e = removeEntryForKey(key);return (e == null ? null : e.value); } // 刪除“鍵為key”的元素 final Entry<K,V> removeEntryForKey(Object key) {// 獲取哈希值。若key為null,則哈希值為0;否則調(diào)用hash()進(jìn)行計(jì)算int hash = (key == null) ? 0 : hash(key.hashCode());int i = indexFor(hash, table.length);Entry<K,V> prev = table[i];Entry<K,V> e = prev;// 刪除鏈表中“鍵為key”的元素// 本質(zhì)是“刪除單向鏈表中的節(jié)點(diǎn)”while (e != null) {Entry<K,V> next = e.next;Object k;if (e.hash == hash &&((k = e.key) == key || (key != null && key.equals(k)))) {modCount++;size--;if (prev == e)table[i] = next;elseprev.next = next;e.recordRemoval(this);return e;}prev = e;e = next;}return e; }

第3.4部分 HashMap實(shí)現(xiàn)的Cloneable接口

HashMap實(shí)現(xiàn)了Cloneable接口,即實(shí)現(xiàn)了clone()方法。
clone()方法的作用很簡(jiǎn)單,就是克隆一個(gè)HashMap對(duì)象并返回。

// 克隆一個(gè)HashMap,并返回Object對(duì)象 public Object clone() {HashMap<K,V> result = null;try {result = (HashMap<K,V>)super.clone();} catch (CloneNotSupportedException e) {// assert false;}result.table = new Entry[table.length];result.entrySet = null;result.modCount = 0;result.size = 0;result.init();// 調(diào)用putAllForCreate()將全部元素添加到HashMap中result.putAllForCreate(this);return result; }

第3.5部分 HashMap實(shí)現(xiàn)的Serializable接口

HashMap實(shí)現(xiàn)java.io.Serializable,分別實(shí)現(xiàn)了串行讀取、寫入功能。
串行寫入函數(shù)是writeObject(),它的作用是將HashMap的“總的容量,實(shí)際容量,所有的Entry”都寫入到輸出流中。
而串行讀取函數(shù)是readObject(),它的作用是將HashMap的“總的容量,實(shí)際容量,所有的Entry”依次讀出

// java.io.Serializable的寫入函數(shù) // 將HashMap的“總的容量,實(shí)際容量,所有的Entry”都寫入到輸出流中 private void writeObject(java.io.ObjectOutputStream s)throws IOException {Iterator<Map.Entry<K,V>> i =(size > 0) ? entrySet0().iterator() : null;// Write out the threshold, loadfactor, and any hidden stuffs.defaultWriteObject();// Write out number of bucketss.writeInt(table.length);// Write out size (number of Mappings)s.writeInt(size);// Write out keys and values (alternating)if (i != null) {while (i.hasNext()) {Map.Entry<K,V> e = i.next();s.writeObject(e.getKey());s.writeObject(e.getValue());}} } // java.io.Serializable的讀取函數(shù):根據(jù)寫入方式讀出 // 將HashMap的“總的容量,實(shí)際容量,所有的Entry”依次讀出 private void readObject(java.io.ObjectInputStream s)throws IOException, ClassNotFoundException {// Read in the threshold, loadfactor, and any hidden stuffs.defaultReadObject();// Read in number of buckets and allocate the bucket array;int numBuckets = s.readInt();table = new Entry[numBuckets];init(); ?// Give subclass a chance to do its thing.// Read in size (number of Mappings)int size = s.readInt();// Read the keys and values, and put the mappings in the HashMapfor (int i=0; i<size; i++) {K key = (K) s.readObject();V value = (V) s.readObject();putForCreate(key, value);} }

第4部分 HashMap遍歷方式

4.1 遍歷HashMap的鍵值對(duì)

第一步:根據(jù)entrySet()獲取HashMap的“鍵值對(duì)”的Set集合。
第二步:通過(guò)Iterator迭代器遍歷“第一步”得到的集合。

// 假設(shè)map是HashMap對(duì)象 // map中的key是String類型,value是Integer類型 Integer integ = null; Iterator iter = map.entrySet().iterator(); while(iter.hasNext()) {Map.Entry entry = (Map.Entry)iter.next();// 獲取keykey = (String)entry.getKey();// 獲取valueinteg = (Integer)entry.getValue(); }

4.2 遍歷HashMap的鍵

第一步:根據(jù)keySet()獲取HashMap的“鍵”的Set集合。
第二步:通過(guò)Iterator迭代器遍歷“第一步”得到的集合。

// 假設(shè)map是HashMap對(duì)象 // map中的key是String類型,value是Integer類型 String key = null; Integer integ = null; Iterator iter = map.keySet().iterator(); while (iter.hasNext()) {// 獲取keykey = (String)iter.next();// 根據(jù)key,獲取valueinteg = (Integer)map.get(key); }

4.3 遍歷HashMap的值

第一步:根據(jù)value()獲取HashMap的“值”的集合。
第二步:通過(guò)Iterator迭代器遍歷“第一步”得到的集合。

// 假設(shè)map是HashMap對(duì)象 // map中的key是String類型,value是Integer類型 Integer value = null; Collection c = map.values(); Iterator iter= c.iterator(); while (iter.hasNext()) {value = (Integer)iter.next(); }

遍歷測(cè)試程序如下:

import java.util.Map; import java.util.Random; import java.util.Iterator; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; import java.util.Collection; /** @desc 遍歷HashMap的測(cè)試程序。* ? (01) 通過(guò)entrySet()去遍歷key、value,參考實(shí)現(xiàn)函數(shù):* ? ? ? ?iteratorHashMapByEntryset()* ? (02) 通過(guò)keySet()去遍歷key、value,參考實(shí)現(xiàn)函數(shù):* ? ? ? ?iteratorHashMapByKeyset()* ? (03) 通過(guò)values()去遍歷value,參考實(shí)現(xiàn)函數(shù):* ? ? ? ?iteratorHashMapJustValues()** @author skywang*/ public class HashMapIteratorTest {public static void main(String[] args) {int val = 0;String key = null;Integer value = null;Random r = new Random();HashMap map = new HashMap();for (int i=0; i<12; i++) {// 隨機(jī)獲取一個(gè)[0,100)之間的數(shù)字val = r.nextInt(100);key = String.valueOf(val);value = r.nextInt(5);// 添加到HashMap中map.put(key, value);System.out.println(" key:"+key+" value:"+value);}// 通過(guò)entrySet()遍歷HashMap的key-valueiteratorHashMapByEntryset(map) ;// 通過(guò)keySet()遍歷HashMap的key-valueiteratorHashMapByKeyset(map) ;// 單單遍歷HashMap的valueiteratorHashMapJustValues(map); ? ? ? ?}/** 通過(guò)entry set遍歷HashMap* 效率高!*/private static void iteratorHashMapByEntryset(HashMap map) {if (map == null)return ;System.out.println("\niterator HashMap By entryset");String key = null;Integer integ = null;Iterator iter = map.entrySet().iterator();while(iter.hasNext()) {Map.Entry entry = (Map.Entry)iter.next();key = (String)entry.getKey();integ = (Integer)entry.getValue();System.out.println(key+" -- "+integ.intValue());}}/** 通過(guò)keyset來(lái)遍歷HashMap* 效率低!*/private static void iteratorHashMapByKeyset(HashMap map) {if (map == null)return ;System.out.println("\niterator HashMap By keyset");String key = null;Integer integ = null;Iterator iter = map.keySet().iterator();while (iter.hasNext()) {key = (String)iter.next();integ = (Integer)map.get(key);System.out.println(key+" -- "+integ.intValue());}}/** 遍歷HashMap的values*/private static void iteratorHashMapJustValues(HashMap map) {if (map == null)return ;Collection c = map.values();Iterator iter= c.iterator();while (iter.hasNext()) {System.out.println(iter.next());}} }

第5部分 HashMap示例

下面通過(guò)一個(gè)實(shí)例學(xué)習(xí)如何使用HashMap

import java.util.Map; import java.util.Random; import java.util.Iterator; import java.util.HashMap; import java.util.HashSet; import java.util.Map.Entry; import java.util.Collection; /** @desc HashMap測(cè)試程序* ? ? ? ?* @author skywang*/ public class HashMapTest {public static void main(String[] args) {testHashMapAPIs();}private static void testHashMapAPIs() {// 初始化隨機(jī)種子Random r = new Random();// 新建HashMapHashMap map = new HashMap();// 添加操作map.put("one", r.nextInt(10));map.put("two", r.nextInt(10));map.put("three", r.nextInt(10));// 打印出mapSystem.out.println("map:"+map );// 通過(guò)Iterator遍歷key-valueIterator iter = map.entrySet().iterator();while(iter.hasNext()) {Map.Entry entry = (Map.Entry)iter.next();System.out.println("next : "+ entry.getKey() +" - "+entry.getValue());}// HashMap的鍵值對(duì)個(gè)數(shù) ? ? ? ?System.out.println("size:"+map.size());// containsKey(Object key) :是否包含鍵keySystem.out.println("contains key two : "+map.containsKey("two"));System.out.println("contains key five : "+map.containsKey("five"));// containsValue(Object value) :是否包含值valueSystem.out.println("contains value 0 : "+map.containsValue(new Integer(0)));// remove(Object key) : 刪除鍵key對(duì)應(yīng)的鍵值對(duì)map.remove("three");System.out.println("map:"+map );// clear() : 清空HashMapmap.clear();// isEmpty() : HashMap是否為空System.out.println((map.isEmpty()?"map is empty":"map is not empty") );} }

(某一次)運(yùn)行結(jié)果:

map:{two=7, one=9, three=6} next : two - 7 next : one - 9 next : three - 6 size:3 contains key two : true contains key five : false contains value 0 : false map:{two=7, one=9} map is empty

出處:http://www.cnblogs.com/skywang12345/p/3310835.html

回復(fù)以下關(guān)鍵字獲取更多學(xué)習(xí)資源

java基礎(chǔ)|html5|css|js|jquery|angularJs|ajax|node.js|javaEE基礎(chǔ)| |struts2|hibernate|spring|svn|maven|springmvc|mybatis|linux|oracle| |luncene|solr|redis|springboot|架構(gòu)師資源|dubbo|php|webservice|c++基礎(chǔ)|nginx|mysql|sqlserver|asp.net|大數(shù)據(jù)|java項(xiàng)目

更多學(xué)習(xí)資源逐步更新,請(qǐng)置頂公眾號(hào)不要錯(cuò)過(guò)更新

好好學(xué)java

每日推送java優(yōu)質(zhì)文章、視頻教程、熱點(diǎn)資訊

微信ID:sihailoveyan

長(zhǎng)按左側(cè)二維碼關(guān)注


總結(jié)

以上是生活随笔為你收集整理的Java 集合系列10: HashMap深入解析(2)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

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

亚洲精品三级 | 91九色性视频| 成人在线观看你懂的 | 欧美性色xo影院 | 国产区免费在线 | 九色免费视频 | 91亚洲精品国偷拍 | 成人在线免费av | 欧美在线你懂的 | 色多多视频在线 | 亚洲视屏在线播放 | 一级全黄毛片 | 香蕉看片| 日韩天天干 | 亚洲www天堂com| 天堂av高清 | 亚洲欧美视频一区二区三区 | 久草视频看看 | 日韩成人免费在线观看 | 中文国产字幕在线观看 | 成人免费xxx在线观看 | 激情五月网站 | 99在线精品免费视频九九视 | 色综合天天色 | 日韩久久在线 | 免费色视频网址 | 波多野结衣小视频 | 伊人成人激情 | 九九热1 | 天天操天天操天天操天天操天天操天天操 | 在线 视频 亚洲 | 九九一级片 | 狠狠色狠狠色终合网 | 日韩精品久久久久久中文字幕8 | 免费网站黄色 | 99r在线精品 | 片黄色毛片黄色毛片 | 97天堂 | 色婷五月 | 午夜精品久久久久久 | 欧美人体xx | 色视频在线免费 | 免费人成网| 九九视频在线播放 | 日韩精品一区二区久久 | 国产精品地址 | 亚洲午夜在线视频 | 久久6精品 | 久久久久久麻豆 | 久久久精品国产一区二区电影四季 | 黄网站色欧美视频 | 五月婷婷综合久久 | 国产精品久久久久永久免费观看 | 国产精品高清在线观看 | 久草视频在线观 | 中文字幕一区二区三区视频 | 国产黄大片 | 国产中文字幕视频在线观看 | 国产成人亚洲精品自产在线 | 91成人网在线观看 | 日日夜夜狠狠操 | 黄色三级免费片 | 亚洲国产福利视频 | 日韩综合精品 | www.久久91 | 丰满少妇高潮在线观看 | 国产一级91 | 天天干天天怕 | 丁香婷婷综合色啪 | 久操视频在线观看 | 激情五月色播五月 | 伊人伊成久久人综合网站 | 97超碰色偷偷 | 91人人揉日日捏人人看 | 国产手机在线视频 | 欧美精品久久久久久久久久久 | 激情久久一区二区三区 | 国产一级在线播放 | 在线观看国产日韩 | 国产精品嫩草影院9 | 免费在线观看国产黄 | 三级av在线播放 | 综合久久婷婷 | 免费av在线网站 | 久久人人做 | 91精品国产网站 | 不卡av在线 | 亚洲午夜精品在线观看 | 国内丰满少妇猛烈精品播放 | 久久免费试看 | 免费网站观看www在线观看 | 中日韩在线视频 | 精品美女久久久久久免费 | 996久久国产精品线观看 | 视频一区二区在线 | 日本久久久久久久久久 | 激情影音先锋 | 国产视频一区在线播放 | 中文字幕视频在线播放 | 在线视频一区观看 | 91桃色视频 | 亚洲精品在线一区二区三区 | 国产午夜精品理论片在线 | 日韩高清毛片 | 国产美女精品视频 | 国内成人综合 | 中文字幕在线看片 | 五月激情av | 国产一区二区在线播放视频 | 青草草在线视频 | 免费a级观看 | 中文字幕第| 97日日| 久久国产一二区 | 美女视频黄是免费的 | 色吊丝在线永久观看最新版本 | 免费av免费观看 | 亚洲国产剧情 | 99精品久久久久久久久久综合 | 亚洲精品网址在线观看 | 91亚洲永久精品 | 精品一区精品二区 | 婷婷婷国产在线视频 | 人人模人人爽 | 成人91在线观看 | 日韩伦理片一区二区三区 | 久久草网站 | 人人超碰人人 | 在线看一级片 | 免费a v在线 | 日日麻批40分钟视频免费观看 | 国产精品不卡一区 | 色婷婷国产精品一区在线观看 | 久久免费视频这里只有精品 | 一本色道久久精品 | 亚洲激情免费 | 91成人免费看 | 精品99免费 | 午夜免费电影院 | 在线免费91 | 黄av免费在线观看 | 亚洲视频高清 | 精品久久久免费视频 | 伊人成人久久 | 日韩在线国产精品 | 奇米网网址 | 色94色欧美| 成年性视频 | 婷婷伊人综合 | 黄色在线观看污 | 天天天射| 五月天久久狠狠 | 日韩免费在线观看网站 | 日韩av电影网站在线观看 | 日本激情视频中文字幕 | 久久视频免费 | 在线视频 国产 日韩 | 国产在线观看免费av | 国产成人精品一区二区三区免费 | 久草在线视频中文 | 日韩中文字幕免费视频 | 99热精品国产一区二区在线观看 | 国产在线观看二区 | 国产 日韩 在线 亚洲 字幕 中文 | 亚洲黄色在线观看 | 国产精品毛片一区二区 | 成人黄色大片在线免费观看 | 91私密保健 | 久久精品久久久精品美女 | 国产一区二区在线免费播放 | 日韩动漫免费观看高清完整版在线观看 | 国产理论在线 | 欧美久久综合 | 国产成人香蕉 | 国产成人精品av久久 | 中日韩男男gay无套 日韩精品一区二区三区高清免费 | 欧美片网站yy | 日韩电影一区二区在线 | 九九精品视频在线 | 国产精品久久久久久久午夜片 | 婷婷激情综合五月天 | 麻豆影视在线免费观看 | 97视频在线免费观看 | 中文字幕在线看视频国产中文版 | 精品久久久久久久久久岛国gif | 日本久久久久久久久久久 | av大片免费看 | 黄色软件视频网站 | 欧美精品乱码久久久久久按摩 | 精品国产乱码久久久久久1区2匹 | 欧美另类网站 | 精品国产一区二区三区四区在线观看 | 色视频国产直接看 | 91精品视频在线 | 国产亚洲激情视频在线 | 成人app在线播放 | 六月丁香六月婷婷 | 日韩精品一区二区三区第95 | 在线看欧美| 深爱激情开心 | 亚洲综合狠狠干 | 午夜少妇 | 777久久久| 99爱精品视频 | 国产美女免费 | 亚洲综合涩 | 麻豆视频免费观看 | 国产无吗一区二区三区在线欢 | 日韩精品在线看 | 久久久久国产a免费观看rela | 国产老熟| 午夜久久久影院 | 久久激情婷婷 | 最新高清无码专区 | 国产精品成人一区二区三区 | 日本电影久久 | 色一级片| 午夜精品久久久久久 | 国产69精品久久99不卡的观看体验 | 国内精品久久久久影院日本资源 | 日本久久久久久久久久 | 狠狠狠狠狠狠狠狠 | 成年人免费av | 欧美日韩激情视频8区 | 色网站免费在线看 | 亚洲高清在线观看视频 | 一级片免费在线 | 性色大片在线观看 | 亚洲国产黄色片 | 又污又黄网站 | 日韩精品视频一二三 | 美女久久精品 | 精品欧美在线视频 | 国语自产偷拍精品视频偷 | 粉嫩高清一区二区三区 | 日本精品小视频 | 国产九九热视频 | 国产色资源 | 欧美色综合天天久久综合精品 | 又黄又爽的视频在线观看网站 | 国产视频亚洲 | 久久99亚洲精品久久 | 国产日产欧美在线观看 | 黄色网址中文字幕 | 国产精品美女网站 | 欧美一区二区三区四区夜夜大片 | 国产乱码精品一区二区三区介绍 | 9色在线视频 | 五月天激情综合 | 午夜在线日韩 | 18女毛片| 国产精品免费观看久久 | 国产精品区一区 | 亚洲国产999| .国产精品成人自产拍在线观看6 | 色综合久久五月天 | 人人插超碰 | 中文字幕资源网 国产 | a√天堂中文在线 | 久久激情视频 | 欧美在线1 | 精品999久久久 | 天天干,天天草 | 日韩精品无码一区二区三区 | 97视频总站 | 黄色在线免费观看网址 | 日韩理论影院 | 五月天综合激情 | 国产精品乱码一区二区视频 | 一区二区精品在线视频 | 色先锋av资源中文字幕 | 久久99操| 日韩免费视频 | 97精品国产 | 高清一区二区三区 | 狠狠色综合网站久久久久久久 | 91日韩精品| 成人久久久久久久久 | 一区二区三区在线免费观看 | 日韩av视屏在线观看 | 天天爽综合网 | 日韩免费看的电影 | 免费看wwwwwwwwwww的视频 久久久久久99精品 91中文字幕视频 | 色狠狠干 | a色视频 | 五月天婷婷视频 | av网站手机在线观看 | 久久国产精品网站 | 精品久久五月天 | 国产精品久久久久久久久久久久午夜片 | 国产精品乱码一区二三区 | 一区二区电影网 | 欧美,日韩 | 久草在线观看资源 | 久久免费在线 | 最近高清中文字幕在线国语5 | 久久午夜电影院 | 久久视频在线免费观看 | 黄色特级片 | 久久夜夜操 | 亚洲精品一区二区三区新线路 | 日韩免费电影一区二区三区 | 国产精品毛片一区 | 欧美一区中文字幕 | 外国av网| 99久久精品网 | 狠狠干天天 | av资源免费看 | 日韩欧美在线免费观看 | 国产美女被啪进深处喷白浆视频 | 在线看成人av | 西西444www大胆高清图片 | 欧美久久久久久久久久 | av国产在线观看 | 日韩欧美一区二区三区在线 | 中文字幕资源网在线观看 | 成年人免费在线观看 | 亚洲手机av| 欧美在线你懂的 | 午夜狠狠干 | av在线播放免费 | 在线观看亚洲专区 | 久久精品电影网 | 亚洲最快最全在线视频 | 99亚洲精品视频 | 97超碰影视 | 日韩在线精品 | 九九精品毛片 | 黄色网www| 国产小视频在线观看 | 五月天婷婷在线观看视频 | 久久伦理视频 | av免费网页 | 狠狠操夜夜 | 四川妇女搡bbbb搡bbbb搡 | 精品一区 在线 | 蜜臀一区二区三区精品免费视频 | 69热国产视频 | 午夜婷婷在线播放 | 国产91精品久久久久久 | 久久婷婷色综合 | 亚一亚二国产专区 | 国产精品成人aaaaa网站 | 久草在线免费看视频 | 日本夜夜草视频网站 | 狠狠色丁香婷婷综合久小说久 | 九九热在线免费观看 | 欧美精品久 | 免费高清看电视网站 | 国产第一页在线观看 | 91在线免费公开视频 | 日韩网站在线观看 | 免费视频你懂得 | 成人在线黄色 | 中文字幕欲求不满 | 黄色av一级片 | av成人动漫在线观看 | 久久中文字幕导航 | 国产精品密入口果冻 | 久久www免费视频 | 日韩精品一区二区三区第95 | www91在线观看 | 操久在线 | 欧美性精品 | 精品视频免费久久久看 | 国产一区在线视频播放 | 国产精品亚洲成人 | 99精品一区二区 | 91在线最新 | 69av免费视频| 亚洲一级黄色av | 99这里只有久久精品视频 | 免费看搞黄视频网站 | 在线播放你懂 | 黄色a视频免费 | 99免费看片 | 国产做a爱一级久久 | 久久久久女人精品毛片 | 五月婷婷丁香 | av黄色大片 | 丰满少妇麻豆av | 国产一区二区视频在线播放 | 天天操天天操天天操天天操 | 五月婷婷黄色网 | 成人免费在线观看av | av免费网站观看 | 亚洲成人av一区二区 | 成人在线中文字幕 | 一色av | 日韩二区三区在线 | 中文字幕一区二区三区在线播放 | 夜夜夜草 | 人人干狠狠操 | 波多野结衣视频一区 | 99久久日韩精品视频免费在线观看 | 国色天香av | 96av在线| 免费在线观看亚洲视频 | 成年人网站免费观看 | 97在线视频免费播放 | 国产99久久99热这里精品5 | 不卡av在线 | 在线观看蜜桃视频 | 亚洲国产精品久久久久 | 在线你懂 | 亚洲最大成人网4388xx | 在线观看黄色的网站 | 中国一区二区视频 | 久久婷婷网| 天天射天天射 | 久久久久亚洲最大xxxx | 免费观看的黄色 | 中文字幕中文字幕在线中文字幕三区 | 国产美腿白丝袜足在线av | 亚洲三级在线播放 | 久久久精品欧美 | 人人爽人人爽人人爽人人爽 | 日韩在线视频线视频免费网站 | 激情视频国产 | 天天爱av导航| 黄色大全免费观看 | 日本激情视频中文字幕 | 久久www免费视频 | 日韩成人在线免费观看 | 人人爽人人av | 久久精品国产亚洲a | 国产一区二区精品在线 | 在线精品亚洲一区二区 | 中文字幕在线视频国产 | 亚洲国产精品免费 | 亚洲精品在线资源 | 在线观看成人福利 | 久久天天躁夜夜躁狠狠85麻豆 | 久久老司机精品视频 | 欧美日韩国产二区三区 | 久久天天躁夜夜躁狠狠85麻豆 | 999热视频| 国产色网 | 免费看一级特黄a大片 | 天天操天天干天天操天天干 | 欧美a性| 在线看91| 色婷婷狠狠五月综合天色拍 | 一级黄色片在线播放 | 亚洲 欧美 另类人妖 | 国产亚洲成av片在线观看 | 亚洲精品tv | 日韩成人精品在线观看 | 久热免费在线 | 婷婷五天天在线视频 | 久久久久久黄 | 一区二区三区电影大全 | 一区二区三区高清 | 欧美一级性生活片 | av韩国在线 | 国产裸体bbb视频 | 激情导航 | 一区二区不卡视频在线观看 | 亚洲91在线| 韩国一区二区在线观看 | 在线观看免费视频 | 亚洲在线黄色 | 久久久久久久网 | 国产精品久久99综合免费观看尤物 | 精品视频资源站 | 国产色秀视频 | 久久夜色精品亚洲噜噜国4 午夜视频在线观看欧美 | 人人爽人人射 | 操久在线 | 久久精品牌麻豆国产大山 | 久草在线费播放视频 | 成人福利在线 | 成人中文字幕+乱码+中文字幕 | 91日韩国产| 国产色视频 | 青青草在久久免费久久免费 | 国产人成在线视频 | 欧美极品少妇xxxxⅹ欧美极品少妇xxxx亚洲精品 | 国产91大片 | 国产成人黄色片 | 五月香婷 | 欧美精品三级在线观看 | 欧美日韩后 | 人人插人人费 | 国产精品女同一区二区三区久久夜 | 婷婷福利影院 | 国产九色视频在线观看 | 色欲综合视频天天天 | 亚洲影院天堂 | 久久视频6 | 九九导航 | 狠狠操狠狠干天天操 | 国产手机视频精品 | 亚洲小视频在线 | 亚洲午夜电影网 | 国产美女在线精品免费观看 | 精品国产一区二区三区四区在线观看 | 久久精品视频中文字幕 | 九九热在线视频 | 亚洲精品456在线播放 | 激情偷乱人伦小说视频在线观看 | 精品欧美一区二区三区久久久 | 日本精品一区二区三区在线播放视频 | 亚洲国产精品电影在线观看 | 亚洲成人免费在线 | 日韩在线精品视频 | av在线免费不卡 | 97超碰国产在线 | 一本色道久久精品 | 亚洲精品视频在线免费播放 | 免费毛片一区二区三区久久久 | 国产精品久99 | 亚洲午夜不卡 | 91爱爱中文字幕 | 欧美在线视频免费 | 深夜国产在线 | 国产精品久久久久久久久久了 | 91精品视频免费看 | 日韩美视频| 久久精品这里都是精品 | 久久99精品久久久久久秒播蜜臀 | 人人爽人人爽av | 欧美精品三级 | 久久艹国产 | www.888av| 国产资源在线免费观看 | 日日碰夜夜爽 | 成人免费一区二区三区在线观看 | 国产精品你懂的在线观看 | 成人免费一区二区三区在线观看 | 日韩在线视频观看 | 久综合网 | 国产手机精品视频 | 免费a视频在线 | 亚洲 综合 国产 精品 | 在线观看网站av | 国产视频久久久 | 丁香花在线观看视频在线 | 国产成人不卡 | 国产精品99久久久久久武松影视 | 99热在线免费观看 | 丁香免费视频 | 在线观看v片 | 亚洲欧洲成人精品av97 | 激情伊人五月天久久综合 | 最新日韩在线观看视频 | 中文字幕xxxx| 国产999在线 | 久久久网站| 国产精品午夜久久 | 成人久久网| 视频在线观看亚洲 | 69精品视频在线观看 | 青草视频网 | 国产成人精品电影久久久 | 国产精品美女www爽爽爽视频 | 欧美日本不卡视频 | 精品国产片 | 国产高清成人在线 | 一区二区三区播放 | 四虎成人精品永久免费av九九 | 99精品黄色片免费大全 | 18做爰免费视频网站 | 在线观看激情av | 久久亚洲在线 | 91网页版在线观看 | 日韩网站在线免费观看 | 亚洲国产成人精品在线 | 日韩视频免费观看高清完整版在线 | 久久久国产精品一区二区中文 | 啪嗒啪嗒免费观看完整版 | 亚洲成人一二三 | 亚洲成av人片在线观看无 | 国产韩国日本高清视频 | 亚洲一级免费观看 | 色是在线视频 | 日韩一级电影网站 | 欧美成人性战久久 | 成人av免费在线播放 | 色狠狠婷婷 | 中国黄色一级大片 | 欧美性色综合网站 | 久久99热精品这里久久精品 | 97人人射| 亚洲精品乱码久久久久久 | 日韩av看片 | 久久综合成人 | 精品国产免费看 | 日日久视频 | jizzjizzjizz亚洲| 久久乐九色婷婷综合色狠狠182 | 久久 在线| 免费看91的网站 | 国产小视频在线观看 | 亚洲日本黄色 | 国产精品视频永久免费播放 | 成人午夜电影免费在线观看 | 日本精品二区 | 国产一线二线三线在线观看 | 91精品91| 一级国产视频 | 一级片免费观看视频 | 欧美成人一二区 | 黄色资源在线观看 | av不卡免费看 | 久草在线视频免费资源观看 | 天天爱天天操天天爽 | 日韩久久电影 | 国产一级二级三级在线观看 | 成人免费一区二区三区在线观看 | 一级黄色片毛片 | 六月婷操 | 久草在线在线视频 | 97精品国产91久久久久久久 | 免费看污片 | 国产亚洲精品久久19p | 99中文视频在线 | 五月天综合在线 | 国产黄色精品在线 | 丁香花在线观看免费完整版视频 | 国产99久久99热这里精品5 | 黄色免费国产 | 天天操狠狠操网站 | 中文字幕乱偷在线 | 狠狠色丁香婷婷综合最新地址 | 亚洲欧洲av | 国产在线高清视频 | 黄色一区三区 | 色狠狠操 | 亚洲精品国内 | 91大神精品视频在线观看 | 探花视频在线版播放免费观看 | 国产另类av | 国产精品久久久久久久久久免费 | 丁香视频免费观看 | 久草在线视频国产 | 国产一区黄色 | 国产精品激情在线观看 | 日韩在线观看一区二区三区 | 国产人成看黄久久久久久久久 | 精品日韩在线一区 | 亚洲一级特黄 | 九九热在线视频 | 色多视频在线观看 | 99视频在线观看一区三区 | 97超碰网| 日韩欧美国产激情在线播放 | 18国产精品福利片久久婷 | 久久精品国产第一区二区三区 | 伊人成人久久 | 亚洲最大免费成人网 | 亚洲欧美日韩不卡 | 天天操天天摸天天爽 | 欧洲黄色片| 久久久久久久国产精品 | 久久黄色网页 | 免费在线观看午夜视频 | 狠狠色噜噜狠狠 | 精品久久久久久国产 | 92国产精品久久久久首页 | av一二三区| 国产一级视频 | 亚洲闷骚少妇在线观看网站 | 日本爱爱片 | 视频国产精品 | 国产午夜一区 | 97超碰网| 香蕉视频一级 | 五月天中文在线 | 久草资源在线观看 | 久久久人人人 | 这里有精品在线视频 | 天天操天天操天天操天天操 | 色偷偷97| 久久久五月婷婷 | 久草精品视频 | 日韩美女高潮 | 日日干天天操 | 国产精品一区二区果冻传媒 | 国产亚洲成av片在线观看 | 91av视频网站| 五月开心色 | 在线视频观看亚洲 | 99久久99久久精品国产片 | 成人免费视频a | 亚洲狠狠婷婷综合久久久 | 国产一区二区三区免费观看视频 | 天天操天天是 | 玖玖999 | 国产精品免费视频一区二区 | 欧美日韩xxxxx | 婷婷在线视频观看 | 久久99久久99精品 | 狠狠色丁香九九婷婷综合五月 | 激情综合站 | 亚洲国产日韩av | 日韩av成人在线 | 中文字幕在线中文 | 欧美成人中文字幕 | 免费亚洲片 | 国产黄a三级三级 | 麻豆影视在线免费观看 | 天天天色综合a | 国产一区二区三区久久久 | 亚洲最新av在线网址 | 免费看在线看www777 | 91麻豆福利| 国产一区二区免费在线观看 | 成人午夜黄色 | 美女精品在线观看 | 在线之家免费在线观看电影 | 在线亚洲小视频 | 久久久黄视频 | 国产精品自产拍在线观看 | 一级久久精品 | 欧美黑吊大战白妞欧美 | 中文字幕在线视频一区二区三区 | 99热精品在线 | 亚洲视频在线免费观看 | 免费a网址 | 狠狠色伊人亚洲综合网站野外 | 欧美日韩国产xxx | 久热电影 | 蜜臀av网站| 日本中文字幕在线视频 | 婷婷激情五月 | 久草在线视频国产 | 国产成人一区二区啪在线观看 | 久久刺激视频 | 国产日韩欧美中文 | 色婷婷久久久综合中文字幕 | 97视频免费播放 | 成人午夜精品久久久久久久3d | 午夜三级理论 | 九九天堂| 日韩精品视频在线观看免费 | 91视频91自拍 | 日韩视频一区二区 | 免费视频成人 | bbw av| 成人在线视频免费看 | 五月天婷婷视频 | 国产999免费视频 | 一区二区免费不卡在线 | 美女黄频网站 | 丁香花在线观看视频在线 | 四虎在线观看精品视频 | 麻豆国产在线播放 | 午夜精品电影 | 免费视频99| 亚洲精品国产综合99久久夜夜嗨 | 亚洲va天堂va欧美ⅴa在线 | 国产精品自在欧美一区 | 成人在线视频观看 | 草 免费视频| 最新极品jizzhd欧美 | 东方av免费在线观看 | 中文字幕电影高清在线观看 | 国产午夜小视频 | 欧美精品久久久久 | 二区在线播放 | 国产在线 一区二区三区 | 亚洲免费高清视频 | 中文字幕有码在线观看 | 久久成人高清视频 | 久热色超碰 | bbbbb女女女女女bbbbb国产 | 99免费看片 | 视频三区| 久久五月天色综合 | 国产成人一区二区精品非洲 | 午夜精品一区二区三区视频免费看 | 久久免费视频6 | 色婷婷av一区 | 丁香在线观看完整电影视频 | 精品伦理一区二区三区 | 亚洲免费在线播放视频 | 久草网视频 | 国产成人一二片 | 美女网站色免费 | 又黄又爽又刺激视频 | 亚洲国产伊人 | 欧美性生活免费看 | 国产精品第二页 | 久久蜜臀一区二区三区av | 欧美午夜理伦三级在线观看 | 色午夜影院 | 亚洲成 人精品 | 2023天天干| 欧美精品久久久久久久久老牛影院 | 欧美一级免费黄色片 | 久久精品九色 | 亚洲天堂香蕉 | www.色婷婷| 国产手机精品视频 | 国产精品自产拍在线观看网站 | www.久久久.cum | www.干| 国产成人在线观看 | 91精品在线看 | 国产成人精品亚洲精品 | 黄色软件大全网站 | 99视频国产精品免费观看 | 9999在线 | 在线不卡a | 波多野结衣在线观看一区二区三区 | 欧洲黄色片 | 超碰在线91 | 97在线观看视频免费 | a黄色 | 久久久久久久久久久黄色 | 色综合久久88色综合天天免费 | 黄色.com | 亚洲高清色综合 | 亚洲日本va在线观看 | av在线播放快速免费阴 | 日韩精品在线免费观看 | 人人舔人人舔 | 天天天综合 | 国产精品久久久久久吹潮天美传媒 | 91av中文| 日日夜夜狠狠操 | 五月色婷| av片一区二区 | 日韩av一卡二卡三卡 | 99视频在线精品 | 亚洲专区在线 | 日日日操操| 国产一级片免费视频 | 国产黄色片免费看 | 国内精品久久久久久久久久 | 韩国视频一区二区三区 | av短片在线| av大片免费 | 国产偷v国产偷∨精品视频 在线草 | 日韩高清在线一区二区 | 亚洲美女免费精品视频在线观看 | 中文字幕人成人 | 中文字幕黄色网址 | 91九色蝌蚪在线 | 日本一区二区三区免费看 | 中文字幕 影院 | 精品国产区 | 午夜精品一区二区三区可下载 | 日本在线中文在线 | 在线精品视频免费播放 | 夜夜爽夜夜操 | 国产精品一区二区免费在线观看 | 久久久久久久久久久久av | 欧美成人日韩 | 成人羞羞免费 | 天天躁天天躁天天躁婷 | 激情小说网站亚洲综合网 | 在线观看成人一级片 | 人人澡视频 | 天天做日日爱夜夜爽 | 国产黄色高清 | 久久天天躁狠狠躁亚洲综合公司 | 98久9在线 | 免费 | 91精品资源 | 亚洲精品视频久久 | av在线网站免费观看 | 久久成人午夜视频 | 中文在线www | 欧美精品第一 | 狠狠干夜夜操 | 亚洲免费av电影 | 成人av免费网站 | 人人玩人人添人人澡97 | 欧美一区二区在线刺激视频 | 国产日本三级 | 亚洲国产成人精品在线观看 | 日本在线观看一区二区三区 | 黄色免费大全 | 97人人精品 | 国产中文字幕网 | 日日操操| 欧美一级免费片 | 久久九九精品 | 不卡av在线| 中文字幕国产精品 | 午夜影院先 | 99久久精品免费看国产麻豆 | 久久久男人的天堂 | 黄色电影小说 | 久久精品在线视频 | 男女全黄一级一级高潮免费看 | 国产成视频在线观看 | 伊人婷婷 | 一级淫片在线观看 | 91一区啪爱嗯打偷拍欧美 | 亚洲精品美女视频 | 久草视频中文 | 色综合天天狠狠 | 伊人成人精品 | 能在线观看的日韩av | 日韩精品欧美专区 | 久久成人欧美 | 在线中文视频 | 在线观看91精品视频 | 色网站黄 | 国产精品九九视频 | 日韩一区精品 | 中文字幕乱在线伦视频中文字幕乱码在线 | 国产精品久久久久久高潮 | 日日干日日 | 国偷自产中文字幕亚洲手机在线 | 中文欧美字幕免费 | 色综合天天 | 成人午夜剧场在线观看 | 国产精品久久片 | 天天天插 | 91一区一区三区 | 国产麻豆果冻传媒在线观看 | 日韩电影中文,亚洲精品乱码 | 天天爱天天插 | 天天艹天天 | 狠狠躁夜夜躁人人爽视频 | 在线观看精品黄av片免费 | 国产在线国偷精品产拍 | 国产精品少妇 | 怡红院av久久久久久久 | 狠狠的操狠狠的干 | 成人黄色免费在线观看 | 日本精品一区二区在线观看 | 最近2019中文免费高清视频观看www99 | 天天操一操| 日韩电影一区二区三区在线观看 | 亚洲经典视频 | 久精品视频 | 免费日韩电影 | 综合婷婷丁香 | 天天干,天天射,天天操,天天摸 | 韩国av电影网 | 一区二区三区久久 | 亚洲一级黄色大片 | 亚洲黄色影院 | 成人中文字幕+乱码+中文字幕 | 色综合久久久 | 久久97久久 | 国产999精品久久久影片官网 | av色综合网| 久久久久国产成人精品亚洲午夜 | 久草在线电影网 | 黄色aaa级片 | 久久成人国产 | 亚洲精品一区二区三区高潮 | 日韩中文字幕视频在线观看 | 中文字幕专区高清在线观看 | av片中文字幕| a在线观看国产 | 最近av在线 | 超碰在线人人爱 | 日韩亚洲在线视频 | 欧美一级免费在线 | 韩日三级在线 | 不卡视频在线 | 欧美a视频在线观看 | 激情久久婷婷 | 中文字幕亚洲字幕 | av官网在线 | 91精品国产电影 | 久久国产精品视频免费看 | 久久精品综合网 | 国产成年人av | 999久久久久久久久久久 | 亚洲精品免费视频 | 亚洲理论影院 | av解说在线| 激情六月婷婷久久 | 在线电影av | 99热这里| 色婷婷视频网 | 99久久一区 | 色天天综合久久久久综合片 | 日本三级中文字幕在线观看 | 久久中文精品视频 | av青草| 日韩在线电影一区 | 日日操夜 | 日本婷婷色 | 欧美一区二区三区激情视频 | 欧美日韩一区二区免费在线观看 | 亚洲精品一区二区三区在线观看 | 在线成人av | 婷婷黄色片 | 久久一区国产 | 精品亚洲男同gayvideo网站 | 免费精品视频在线 | 久久情侣偷拍 | 国内一级片在线观看 | 欧美国产三区 | 久久综合影视 | 日韩成人免费在线 | 色人久久 | 亚洲视频久久久久 | 亚洲天堂网站视频 | 99 精品 在线 |