久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁技術文章
文章詳情頁

Java之 TreeSet的詳細使用說明

瀏覽:3日期:2022-08-16 11:46:13
第1部分 TreeSet介紹TreeSet簡介

TreeSet 是一個有序的集合,它的作用是提供有序的Set集合。它繼承于AbstractSet抽象類,實現了NavigableSet<E>, Cloneable, java.io.Serializable接口。

TreeSet 繼承于AbstractSet,所以它是一個Set集合,具有Set的屬性和方法。

TreeSet 實現了NavigableSet接口,意味著它支持一系列的導航方法。比如查找與指定目標最匹配項。

TreeSet 實現了Cloneable接口,意味著它能被克隆。

TreeSet 實現了java.io.Serializable接口,意味著它支持序列化。

TreeSet是基于TreeMap實現的。TreeSet中的元素支持2種排序方式:自然排序 或者 根據創建TreeSet 時提供的 Comparator 進行排序。這取決于使用的構造方法。

TreeSet為基本操作(add、remove 和 contains)提供受保證的 log(n) 時間開銷。

另外,TreeSet是非同步的。 它的iterator 方法返回的迭代器是fail-fast的。

TreeSet的構造函數

// 默認構造函數。使用該構造函數,TreeSet中的元素按照自然排序進行排列。TreeSet()// 創建的TreeSet包含collectionTreeSet(Collection<? extends E> collection)// 指定TreeSet的比較器TreeSet(Comparator<? super E> comparator)// 創建的TreeSet包含setTreeSet(SortedSet<E> set)TreeSet的APIboolean add(E object)boolean addAll(Collection<? extends E> collection)void clear()Object clone()boolean contains(Object object)E first()boolean isEmpty()E last()E pollFirst()E pollLast()E lower(E e)E floor(E e)E ceiling(E e)E higher(E e)boolean remove(Object object)int size()Comparator<? super E> comparator()Iterator<E> iterator()Iterator<E> descendingIterator()SortedSet<E> headSet(E end)NavigableSet<E> descendingSet()NavigableSet<E> headSet(E end, boolean endInclusive)SortedSet<E> subSet(E start, E end)NavigableSet<E> subSet(E start, boolean startInclusive, E end, boolean endInclusive)NavigableSet<E> tailSet(E start, boolean startInclusive)SortedSet<E> tailSet(E start)

說明:

(01) TreeSet是有序的Set集合,因此支持add、remove、get等方法。

(02) 和NavigableSet一樣,TreeSet的導航方法大致可以區分為兩類,一類時提供元素項的導航方法,返回某個元素;另一類時提供集合的導航方法,返回某個集合。

lower、floor、ceiling 和 higher 分別返回小于、小于等于、大于等于、大于給定元素的元素,如果不存在這樣的元素,則返回 null。

第2部分 TreeSet數據結構TreeSet的繼承關系

java.lang.Object ↳ java.util.AbstractCollection<E> ↳ java.util.AbstractSet<E> ↳ java.util.TreeSet<E>public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable{}

TreeSet與Collection關系如下圖:

Java之 TreeSet的詳細使用說明

從圖中可以看出:

(01) TreeSet繼承于AbstractSet,并且實現了NavigableSet接口。

(02) TreeSet的本質是一個'有序的,并且沒有重復元素'的集合,它是通過TreeMap實現的。TreeSet中含有一個'NavigableMap類型的成員變量'm,而m實際上是'TreeMap的實例'。

第3部分 TreeSet源碼解析(基于JDK1.6.0_45)

為了更了解TreeSet的原理,下面對TreeSet源碼代碼作出分析。

package java.util; public class TreeSet<E> extends AbstractSet<E> implements NavigableSet<E>, Cloneable, java.io.Serializable { // NavigableMap對象 private transient NavigableMap<E,Object> m; // TreeSet是通過TreeMap實現的, // PRESENT是鍵-值對中的值。 private static final Object PRESENT = new Object(); // 不帶參數的構造函數。創建一個空的TreeMap public TreeSet() { this(new TreeMap<E,Object>()); } // 將TreeMap賦值給 'NavigableMap對象m' TreeSet(NavigableMap<E,Object> m) { this.m = m; } // 帶比較器的構造函數。 public TreeSet(Comparator<? super E> comparator) { this(new TreeMap<E,Object>(comparator)); } // 創建TreeSet,并將集合c中的全部元素都添加到TreeSet中 public TreeSet(Collection<? extends E> c) { this(); // 將集合c中的元素全部添加到TreeSet中 addAll(c); } // 創建TreeSet,并將s中的全部元素都添加到TreeSet中 public TreeSet(SortedSet<E> s) { this(s.comparator()); addAll(s); } // 返回TreeSet的順序排列的迭代器。 // 因為TreeSet時TreeMap實現的,所以這里實際上時返回TreeMap的“鍵集”對應的迭代器 public Iterator<E> iterator() { return m.navigableKeySet().iterator(); } // 返回TreeSet的逆序排列的迭代器。 // 因為TreeSet時TreeMap實現的,所以這里實際上時返回TreeMap的“鍵集”對應的迭代器 public Iterator<E> descendingIterator() { return m.descendingKeySet().iterator(); } // 返回TreeSet的大小 public int size() { return m.size(); } // 返回TreeSet是否為空 public boolean isEmpty() { return m.isEmpty(); } // 返回TreeSet是否包含對象(o) public boolean contains(Object o) { return m.containsKey(o); } // 添加e到TreeSet中 public boolean add(E e) { return m.put(e, PRESENT)==null; } // 刪除TreeSet中的對象o public boolean remove(Object o) { return m.remove(o)==PRESENT; } // 清空TreeSet public void clear() { m.clear(); } // 將集合c中的全部元素添加到TreeSet中 public boolean addAll(Collection<? extends E> c) { // Use linear-time version if applicable if (m.size()==0 && c.size() > 0 && c instanceof SortedSet && m instanceof TreeMap) { SortedSet<? extends E> set = (SortedSet<? extends E>) c; TreeMap<E,Object> map = (TreeMap<E, Object>) m; Comparator<? super E> cc = (Comparator<? super E>) set.comparator(); Comparator<? super E> mc = map.comparator(); if (cc==mc || (cc != null && cc.equals(mc))) { map.addAllForTreeSet(set, PRESENT); return true; } } return super.addAll(c); } // 返回子Set,實際上是通過TreeMap的subMap()實現的。 public NavigableSet<E> subSet(E fromElement, boolean fromInclusive, E toElement, boolean toInclusive) { return new TreeSet<E>(m.subMap(fromElement, fromInclusive, toElement, toInclusive)); } // 返回Set的頭部,范圍是:從頭部到toElement。 // inclusive是是否包含toElement的標志 public NavigableSet<E> headSet(E toElement, boolean inclusive) { return new TreeSet<E>(m.headMap(toElement, inclusive)); } // 返回Set的尾部,范圍是:從fromElement到結尾。 // inclusive是是否包含fromElement的標志 public NavigableSet<E> tailSet(E fromElement, boolean inclusive) { return new TreeSet<E>(m.tailMap(fromElement, inclusive)); } // 返回子Set。范圍是:從fromElement(包括)到toElement(不包括)。 public SortedSet<E> subSet(E fromElement, E toElement) { return subSet(fromElement, true, toElement, false); } // 返回Set的頭部,范圍是:從頭部到toElement(不包括)。 public SortedSet<E> headSet(E toElement) { return headSet(toElement, false); } // 返回Set的尾部,范圍是:從fromElement到結尾(不包括)。 public SortedSet<E> tailSet(E fromElement) { return tailSet(fromElement, true); } // 返回Set的比較器 public Comparator<? super E> comparator() { return m.comparator(); } // 返回Set的第一個元素 public E first() { return m.firstKey(); } // 返回Set的最后一個元素 public E first() { public E last() { return m.lastKey(); } // 返回Set中小于e的最大元素 public E lower(E e) { return m.lowerKey(e); } // 返回Set中小于/等于e的最大元素 public E floor(E e) { return m.floorKey(e); } // 返回Set中大于/等于e的最小元素 public E ceiling(E e) { return m.ceilingKey(e); } // 返回Set中大于e的最小元素 public E higher(E e) { return m.higherKey(e); } // 獲取第一個元素,并將該元素從TreeMap中刪除。 public E pollFirst() { Map.Entry<E,?> e = m.pollFirstEntry(); return (e == null)? null : e.getKey(); } // 獲取最后一個元素,并將該元素從TreeMap中刪除。 public E pollLast() { Map.Entry<E,?> e = m.pollLastEntry(); return (e == null)? null : e.getKey(); } // 克隆一個TreeSet,并返回Object對象 public Object clone() { TreeSet<E> clone = null; try { clone = (TreeSet<E>) super.clone(); } catch (CloneNotSupportedException e) { throw new InternalError(); } clone.m = new TreeMap<E,Object>(m); return clone; } // java.io.Serializable的寫入函數 // 將TreeSet的“比較器、容量,所有的元素值”都寫入到輸出流中 private void writeObject(java.io.ObjectOutputStream s) throws java.io.IOException { s.defaultWriteObject(); // 寫入比較器 s.writeObject(m.comparator()); // 寫入容量 s.writeInt(m.size()); // 寫入“TreeSet中的每一個元素” for (Iterator i=m.keySet().iterator(); i.hasNext(); ) s.writeObject(i.next()); } // java.io.Serializable的讀取函數:根據寫入方式讀出 // 先將TreeSet的“比較器、容量、所有的元素值”依次讀出 private void readObject(java.io.ObjectInputStream s) throws java.io.IOException, ClassNotFoundException { // Read in any hidden stuff s.defaultReadObject(); // 從輸入流中讀取TreeSet的“比較器” Comparator<? super E> c = (Comparator<? super E>) s.readObject(); TreeMap<E,Object> tm; if (c==null) tm = new TreeMap<E,Object>(); else tm = new TreeMap<E,Object>(c); m = tm; // 從輸入流中讀取TreeSet的“容量” int size = s.readInt(); // 從輸入流中讀取TreeSet的“全部元素” tm.readTreeSet(size, s, PRESENT); } // TreeSet的序列版本號 private static final long serialVersionUID = -2479143000061671589L; }

總結:

(01) TreeSet實際上是TreeMap實現的。當我們構造TreeSet時;若使用不帶參數的構造函數,則TreeSet的使用自然比較器;若用戶需要使用自定義的比較器,則需要使用帶比較器的參數。

(02) TreeSet是非線程安全的。

(03) TreeSet實現java.io.Serializable的方式。當寫入到輸出流時,依次寫入“比較器、容量、全部元素”;當讀出輸入流時,再依次讀取。

第4部分 TreeSet遍歷方式4.1 Iterator順序遍歷

for(Iterator iter = set.iterator(); iter.hasNext(); ) { iter.next();} 4.2 Iterator順序遍歷

// 假設set是TreeSet對象for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) { iter.next();}4.3 for-each遍歷HashSet

// 假設set是TreeSet對象,并且set中元素是String類型String[] arr = (String[])set.toArray(new String[0]);for (String str:arr) System.out.printf('for each : %sn', str);

TreeSet不支持快速隨機遍歷,只能通過迭代器進行遍歷!

TreeSet遍歷測試程序如下:

import java.util.*; /** * @desc TreeSet的遍歷程序 * * @author skywang * @email kuiwu-wang@163.com */ public class TreeSetIteratorTest { public static void main(String[] args) { TreeSet set = new TreeSet(); set.add('aaa'); set.add('aaa'); set.add('bbb'); set.add('eee'); set.add('ddd'); set.add('ccc'); // 順序遍歷TreeSet ascIteratorThroughIterator(set) ; // 逆序遍歷TreeSet descIteratorThroughIterator(set); // 通過for-each遍歷TreeSet。不推薦!此方法需要先將Set轉換為數組 foreachTreeSet(set); } // 順序遍歷TreeSet public static void ascIteratorThroughIterator(TreeSet set) { System.out.print('n ---- Ascend Iterator ----n'); for(Iterator iter = set.iterator(); iter.hasNext(); ) { System.out.printf('asc : %sn', iter.next()); } } // 逆序遍歷TreeSet public static void descIteratorThroughIterator(TreeSet set) { System.out.printf('n ---- Descend Iterator ----n'); for(Iterator iter = set.descendingIterator(); iter.hasNext(); ) System.out.printf('desc : %sn', (String)iter.next()); } // 通過for-each遍歷TreeSet。不推薦!此方法需要先將Set轉換為數組 private static void foreachTreeSet(TreeSet set) { System.out.printf('n ---- For-each ----n'); String[] arr = (String[])set.toArray(new String[0]); for (String str:arr) System.out.printf('for each : %sn', str); } }

運行結果:

---- Ascend Iterator ----asc : aaaasc : bbbasc : cccasc : dddasc : eee---- Descend Iterator ----desc : eeedesc : ddddesc : cccdesc : bbbdesc : aaa---- For-each ----for each : aaafor each : bbbfor each : cccfor each : dddfor each : eee第5部分 TreeSet示例

下面通過實例學習如何使用TreeSet

import java.util.*;/** * @desc TreeSet的API測試 * * @author skywang * @email kuiwu-wang@163.com */public class TreeSetTest { public static void main(String[] args) { testTreeSetAPIs(); } // 測試TreeSet的api public static void testTreeSetAPIs() { String val; // 新建TreeSet TreeSet tSet = new TreeSet(); // 將元素添加到TreeSet中 tSet.add('aaa'); // Set中不允許重復元素,所以只會保存一個“aaa” tSet.add('aaa'); tSet.add('bbb'); tSet.add('eee'); tSet.add('ddd'); tSet.add('ccc'); System.out.println('TreeSet:'+tSet); // 打印TreeSet的實際大小 System.out.printf('size : %dn', tSet.size()); // 導航方法 // floor(小于、等于) System.out.printf('floor bbb: %sn', tSet.floor('bbb')); // lower(小于) System.out.printf('lower bbb: %sn', tSet.lower('bbb')); // ceiling(大于、等于) System.out.printf('ceiling bbb: %sn', tSet.ceiling('bbb')); System.out.printf('ceiling eee: %sn', tSet.ceiling('eee')); // ceiling(大于) System.out.printf('higher bbb: %sn', tSet.higher('bbb')); // subSet() System.out.printf('subSet(aaa, true, ccc, true): %sn', tSet.subSet('aaa', true, 'ccc', true)); System.out.printf('subSet(aaa, true, ccc, false): %sn', tSet.subSet('aaa', true, 'ccc', false)); System.out.printf('subSet(aaa, false, ccc, true): %sn', tSet.subSet('aaa', false, 'ccc', true)); System.out.printf('subSet(aaa, false, ccc, false): %sn', tSet.subSet('aaa', false, 'ccc', false)); // headSet() System.out.printf('headSet(ccc, true): %sn', tSet.headSet('ccc', true)); System.out.printf('headSet(ccc, false): %sn', tSet.headSet('ccc', false)); // tailSet() System.out.printf('tailSet(ccc, true): %sn', tSet.tailSet('ccc', true)); System.out.printf('tailSet(ccc, false): %sn', tSet.tailSet('ccc', false)); // 刪除“ccc” tSet.remove('ccc'); // 將Set轉換為數組 String[] arr = (String[])tSet.toArray(new String[0]); for (String str:arr) System.out.printf('for each : %sn', str); // 打印TreeSet System.out.printf('TreeSet:%sn', tSet); // 遍歷TreeSet for(Iterator iter = tSet.iterator(); iter.hasNext(); ) { System.out.printf('iter : %sn', iter.next()); } // 刪除并返回第一個元素 val = (String)tSet.pollFirst(); System.out.printf('pollFirst=%s, set=%sn', val, tSet); // 刪除并返回最后一個元素 val = (String)tSet.pollLast(); System.out.printf('pollLast=%s, set=%sn', val, tSet); // 清空HashSet tSet.clear(); // 輸出HashSet是否為空 System.out.printf('%sn', tSet.isEmpty()?'set is empty':'set is not empty'); }}

運行結果:

TreeSet:[aaa, bbb, ccc, ddd, eee]size : 5floor bbb: bbblower bbb: aaaceiling bbb: bbbceiling eee: eeehigher bbb: cccsubSet(aaa, true, ccc, true): [aaa, bbb, ccc]subSet(aaa, true, ccc, false): [aaa, bbb]subSet(aaa, false, ccc, true): [bbb, ccc]subSet(aaa, false, ccc, false): [bbb]headSet(ccc, true): [aaa, bbb, ccc]headSet(ccc, false): [aaa, bbb]tailSet(ccc, true): [ccc, ddd, eee]tailSet(ccc, false): [ddd, eee]for each : aaafor each : bbbfor each : dddfor each : eeeTreeSet:[aaa, bbb, ddd, eee]iter : aaaiter : bbbiter : ddditer : eeepollFirst=aaa, set=[bbb, ddd, eee]pollLast=eee, set=[bbb, ddd]set is empty

補充:Java中關于使用TreeSet存儲數據的自然排序和定制排序

一、題目

創建類的 5 個對象,并把這些對象放入 TreeSet 集合中(TreeSet 需使用泛型和不用泛型分別來定義)

分別按以下兩種方式對集合中的元素進行排序,并遍歷輸出:

1、使 Employee 實現 Comparable 接口,并按 name 排序

2、創建 TreeSet 時傳入 Comparator 對象,按生日日期的先后排序。

二、定義一個 Employee 類

/** * 該類包含:private 成員變量 name,age,birthday,其中 birthday 為 * MyDate 類的對象; * 并為每一個屬性定義 getter, setter 方法; * 并重寫 toString 方法輸出 name, age, birthday * @author * @create 2021-01-22-15:00 */public class Employee implements Comparable<Employee> { private String name; private int age; private MyDate birthday; public Employee() { } public Employee(String name, int age, MyDate birthday) { this.name = name; this.age = age; this.birthday = birthday; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public MyDate getBirthday() { return birthday; } public void setBirthday(MyDate birthday) { this.birthday = birthday; } @Override public String toString() { return 'Employee{' + 'name=’' + name + ’’’ + ', age=' + age + ', birthday=' + birthday + ’}’; } //不用泛型// @Override// public int compareTo(Object o) {// if(o instanceof Employee){// Employee employee = (Employee) o;// return this.name.compareTo(employee.name);// }// throw new RuntimeException('輸入的數據類型不一致');// } //使用泛型 @Override public int compareTo(Employee o) { return this.name.compareTo(o.name); }}三、MyDate 類

/** * MyDate 類包含: * private 成員變量 year,month,day;并為每一個屬性定義 getter, setter * 方法; * @author * @create 2021-01-22-15:00 */public class MyDate implements Comparable<MyDate> { private int year; private int month; private int day; public MyDate() { } public MyDate(int year, int month, int day) { this.year = year; this.month = month; this.day = day; } @Override public String toString() { return 'MyDate{' + 'year=' + year + ', month=' + month + ', day=' + day + ’}’; } public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } @Override public int compareTo(MyDate o) { int minusYear= this.year-o.year; if (minusYear !=0){ return minusYear; } int minusMonth= this.month-o.month; if (minusMonth !=0){ return minusMonth; } return this.day-o.day; }}四、單元測試

(一)

@Test public void test1(){ TreeSet<Employee> set = new TreeSet<>(); set.add(new Employee('hh',23,new MyDate(1992,4,12))); set.add(new Employee('ff',43,new MyDate(1956,5,4))); set.add(new Employee('aa',27,new MyDate(1936,8,6))); set.add(new Employee('gg',38,new MyDate(1992,4,4))); Iterator<Employee> iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } }

結果如下:

Java之 TreeSet的詳細使用說明

(二)

@Test public void test2(){ TreeSet<Employee> set = new TreeSet<>(new Comparator<Employee>() { @Override public int compare(Employee e1, Employee e2) { //加上泛型 MyDate b1 = e1.getBirthday(); MyDate b2 = e2.getBirthday(); return b1.compareTo(b2); //不加泛型// if (o1 instanceof Employee && o2 instanceof Employee){// Employee m1 = (Employee) o1;// Employee m2 = (Employee) o2;// MyDate m1Birthday = m1.getBirthday();// MyDate m2Birthday = m2.getBirthday();//// int minusYear = m1Birthday.getYear()- m2Birthday.getYear();// if (minusYear!=0){// return minusYear;// }// int minusMonth = m1Birthday.getMonth()- m2Birthday.getMonth();// if (minusMonth!=0){// return minusMonth;// }// int minusDay = m1Birthday.getDay()- m2Birthday.getDay();// return minusDay;//// }// throw new RuntimeException('傳入的數據類型不一致'); } }); set.add(new Employee('hh',23,new MyDate(1944,12,4))); set.add(new Employee('ff',43,new MyDate(1957,5,4))); set.add(new Employee('aa',27,new MyDate(1906,12,6))); set.add(new Employee('gg',38,new MyDate(1906,4,4))); Iterator<Employee> iterator = set.iterator(); while (iterator.hasNext()){ System.out.println(iterator.next()); } }

結果如下:

Java之 TreeSet的詳細使用說明

以上為個人經驗,希望能給大家一個參考,也希望大家多多支持好吧啦網。如有錯誤或未考慮完全的地方,望不吝賜教。

標簽: Java
相關文章:
主站蜘蛛池模板: 亚洲免费视频网 | 精品国产乱码久久久久久密桃99 | 国产国拍亚洲精品av | 精品久久久久久久久久久久 | 国产精品久久久久国产a级 99精品欧美一区二区三区综合在线 | 美女久久 | 福利电影在线 | 久久久国产精品入口麻豆 | 久久免费视频观看 | 日本一区二区成人 | 国产成人在线免费观看视频 | 免费爱爱视频 | 久久99热精品免费观看牛牛 | 伊人啪啪| 亚洲精品国品乱码久久久久 | 天天拍天天干天天操 | 蜜桃αv | 看黄色.com| 欧美一卡二卡在线观看 | 日本福利视频网 | 日韩精品久久 | 91久久艹| 中文字幕a视频 | 韩日一区 | www.亚洲成人网 | 不卡日韩在线 | 日韩av在线中文字幕 | 自拍视频在线观看免费 | 中文字幕在线观看精品视频 | 欧美日韩精品一区二区 | 国产大毛片 | 成人精品鲁一区一区二区 | 国产精品午夜电影 | 91在线免费视频 | 亚洲成人三级 | 欧美成a| 欧美一a一片一级一片 | 亚洲精品久久久久久一区二区 | 久久99国产一区二区三区 | www国产xxx | 久久综合久久综合久久 | 50人群体交乱视频 | 亚洲电影在线观看 | 久久久美女 | 在线播放国产视频 | 成人午夜毛片 | 国产在线视频一区二区 | 日韩综合 | 蜜桃精品久久久久久久免费影院 | 国产视频一视频二 | 欧美一区二区三区免费观看视频 | 国产一区二区三区视频 | 一级片免费视频 | 国产中文字幕在线观看 | 性处破╳╳╳高清欧美 | 日韩久久午夜一级啪啪 | 亚洲精品国产9999久久久久 | 亚洲毛片网站 | 久久国产一区二区 | 日韩欧美视频 | 国产成人99久久亚洲综合精品 | 超碰人人99 | 国产黄色大片 | 成人午夜精品久久久久久久3d | 超碰在线人 | 日韩中文字幕在线 | 日韩免费视频中文字幕 | 色玖玖综合 | 操操网站 | 欧美日韩在线精品 | 色综合天天天天做夜夜夜夜做 | 国产精品99久久久久久久vr | 一区二区在线看 | 天堂免费在线 | av中文字幕在线观看 | 欧美日本精品 | 色综合成人| 欧美色欧美亚洲另类七区 | 亚洲精品视频大全 | 精品国产综合 | 久久国产一区二区三区 | 精品国产一区二区三区四 | 国产欧美一区二区精品性色 | 国产成人午夜视频 | 国产精品99久久久久久动医院 | 日本小视频网站 | 国产三区在线成人av | 日韩在线观看一区 | 日韩欧美中文字幕在线视频 | 国产网站视频 | 欧美一级黄色大片 | 久久a国产 | 成人精品一区二区三区 | 亚洲免费视频一区二区 | 午夜免费片 | 久久综合伊人77777 | 91精品国产色综合久久 | 成全视频免费观看在线看黑人 | 久久爱综合 | 欧美综合一区 | 久久亚洲二区 | 国产欧美精品一区二区色综合朱莉 | 亚洲精品乱码久久久久久蜜桃图片 | 成人久久久精品国产乱码一区二区 | 国产成人欧美一区二区三区的 | 久久久国产一区二区 | 蜜桃av在线播放 | 奇米成人影视 | 亚洲精品一区国语对白 | 超碰在线99 | 午夜妇女aaaa区片 | 日韩精品一区二区三区在线观看 | 欧美精品网站 | 成人午夜视频在线 | 成人激情免费视频 | 一区不卡| 免费黄色录像视频 | 国产一区国产二区在线观看 | 一区二区日韩精品 | 97超碰在线播放 | 99成人| 久久精品免费看 | 日本在线观看视频一区 | 人人干美女 | 中文字幕99 | 犬夜叉在线观看 | 亚洲美女视频一区二区三区 | 国产亚洲精品久久久久久豆腐 | 可以在线观看的av网站 | 一级在线播放 | 国产成人午夜高潮毛片 | 欧美国产日韩一区 | 日韩超级大片免费看国产国产播放器 | 在线看av的网址 | 国产xxx护士爽免费看 | 亚洲激情在线 | 99国产精品久久久久久久 | 亚洲成a| 日韩一区二区影视 | 男人视频网站 | 男女视频在线观看 | 国产精品极品美女在线观看免费 | 亚洲一区二区中文字幕 | 福利二区| 天天干狠狠操 | 久久精品国产99国产精2020新增功能 | 亚洲精品久久久久久久久久久久久 | 黑人一级片视频 | 亚洲一区二区三区高清 | 亚洲福利电影网 | 97色在线视频 | 亚洲视频在线播放 | 精品99久久| 中文字幕一区二区三区四区 | 91精品中文字幕一区二区三区 | 亚洲免费在线看 | 日韩一区二区三区在线视频 | 91免费版在线看 | 欧美一级毛片久久99精品蜜桃 | 日韩一区二区成人 | 国产欧美精品一区二区三区四区 | 成人中文字幕在线 | av超碰| 欧美成人精品在线视频 | 天天操夜夜拍 | 国产91久久精品一区二区 | 91精品福利 | 毛片一区二区 | 婷婷午夜激情 | 亚洲欧美一级久久精品 | 免费看h| 亚洲精品女人久久 | 国产高潮失禁喷水爽网站 | 国产精品一区二区三区在线 | 欧美精品第一页 | 国产精品久久久久国产a级 91福利网站在线观看 | 成人av免费看 | 成人欧美日韩一区二区三区 | 国产一级视频 | 色综合一区二区三区 | 羞羞羞网站 | 国产精品1区2区 | 一区二区在线 | 黄瓜av| 久久国产欧美日韩精品 | 久久综合九色综合欧美狠狠 | 久久久久久久国产精品 | 国产h视频在线观看 | 日韩成人在线看 | 精品一区二区三区在线观看视频 | 久久99一区| 日本综合视频 | 午夜精品久久久久久久白皮肤 | 亚洲成人一区二区 | 日本久久精品 | 久久久99久久久国产自输拍 | 视频精品一区 | av片在线免费观看 | 日日夜夜精品网站 | 精品一区二区久久久久久久网站 | 超碰97中文| 91精品国产一区二区三区免费 | 精品欧美乱码久久久久久1区2区 | 欧美午夜在线观看 | 中国av在线| 欧美一级成人欧美性视频播放 | 免费黄色录像视频 | 欧美一级在线视频 | 日韩国产欧美视频 | 国产高清一二三区 | 亚洲精品免费在线观看 | 亚洲小视频 | 欧美日韩高清不卡 | 国产乱码久久久久久一区二区 | 久久精品国产99久久久 | 国产91在线观看 | 成人片免费看 | 一级片欧美| 成人在线视频播放 | 天天综合欧美 | 综合色婷婷一区二区亚洲欧美国产 | 日韩欧美在线一区 | 精品欧美一区二区三区久久久小说 | 华丽的挑战在线观看 | 日韩中文字幕一区 | 精品国产成人 | 高清国产一区二区三区四区五区 | 国内精品久久久久国产 | 亚洲精品一区久久久久久 | 亚洲一区二区三区四区五区中文 | 天天操狠狠操 | 久久99精品久久久 | 95香蕉视频 | 欧美一级特黄aaaaaaa色戒 | 日韩综合视频在线观看 | 国产精品久久久久久久一区探花 | 欧美日韩视频一区二区 | 1000部精品久久久久久久久 | 在线观看的av | 午夜专区 | 久久亚洲一区 | aaa级片 | 欧美一区二区在线播放 | 国产一二三四在线 | 免费日本视频 | 日韩精品免费在线视频 | 99免费观看 | 久久成人免费视频 | 成人免费在线电影 | 欧美精品在线观看 | 影音先锋成人资源网 | 中文日韩av| 成人免费视频视频在线观看 免费 | 91久久国产精品 | 在线视频91 | 久久这里只有精品首页 | 亚洲精品视频导航 | 1204国产成人精品视频 | 中文av字幕 | 亚洲一区二区视频在线观看 | 色5月婷婷丁香六月 | 日韩成人影视 | 精品一区在线视频 | 超级乱淫片国语对白免费视频 | 午夜视| 午夜电影网址 | 久久国| 在线一区观看 | 情趣视频在线免费观看 | 久久99精品一区二区三区三区 | 午夜精品久久久久 | 亚洲精品国产剧情久久9191 | 国产乱码一区二区三区 | 亚洲一区 中文字幕 | 美国一级黄色片 | 一区二区三区国产免费 | 天堂免费在线 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美日韩一区二区三区不卡视频 | 国产乱xxxxx97国语对白 | 欧美free性 | 久久91av | 欧美日韩精品一区 | 国内在线一区 | 极品女神高潮呻吟av久久 | 日韩不卡 | 天天操综合网 | 欧美精品三区 | 欧美综合一区二区 | 91hd精品少妇 | 91精品国产综合久久久蜜臀粉嫩 | 欧美亚洲性视频 | 99这里只有精品视频 | 欧美一卡二卡在线观看 | 国内精品视频一区二区三区 | 人人草人人干 | 国产传媒在线视频 | 精品久久久久av | 情趣视频在线免费观看 | 成人av福利 | av成人在线观看 | 高清在线一区二区 | 亚洲网站在线免费观看 | 日韩综合网 | 怡红院成人影院 | 国产亚洲精品美女久久久久久久久久 | 日韩在线视频资源 | 久久999免费视频 | 中文字幕免费在线观看 | 99精品在线观看 | 国产精品不卡视频 | 欧洲一区二区三区 | 激情综合网五月婷婷 | 欧洲一区二区在线观看 | 国产成人在线电影 | 97成人在线免费视频 | 色综合久久天天综合网 | 久久久美女 | 午夜欧美 | 精品久久久久久久久久久久久久 | 国内外成人在线视频 | 国产一级视频免费播放 | 日韩城人免费 | 日韩欧美一级在线 | 日本黄色一级电影 | 精品无码久久久久久国产 | 中文字幕日韩一区二区不卡 | 欧美午夜精品久久久久久浪潮 | 不卡一二区 | www.成人久久 | 九草av| 中文字幕精品一区二区三区精品 | 久久成人18免费网站 | 亚洲一区精品在线 | 国产精品美女久久久久久久久久久 | 亚洲久草视频 | 青青久久久 | 中文字幕视频二区 | 一级黄色大片 | 欧美激情一区二区三级高清视频 | 六月丁香av | 冷水浴在线观看 | 正在播放国产一区 | 日本精品久久 | 精品久| 免费中文字幕 | 视频在线一区二区 | 成人av免费在线 | 日韩在线欧美 | 亚洲人成在线播放 | 色.com| 国产99久久精品一区二区永久免费 | 国产高清美女一级a毛片久久 | 少妇一级淫片免费放 | 精品一区二区三区在线观看 | 在线观看亚洲专区 | a级在线免费观看 | 午夜精品视频 | 亚洲三区在线观看 | 男女午夜| 日韩在线欧美 | 久久精选视频 | 精品视频二区 | 午夜视频在线观看网站 | 久久人人爽人人爽人人片av不 | 99亚洲精品 | 五月婷婷丁香在线 | 国产精品美女久久久久久久久久久 | 伊人久久精品久久亚洲一区 | 国产精品视频一二三区 | www.国产.com | 久久国产精品亚洲 | 亚洲视频二区 | 色吧欧美 | 国产乱码一区二区三区在线观看 | 亚洲精品一区中文字幕乱码 | 亚洲欧美日韩系列 | 久久久久久毛片免费播放 | 综合激情久久 | 亚洲国产视频一区 | 天天天操操操 | 四虎影视网址 | 欧美78videosex性欧美 | 91亚洲国产成人久久精品网站 | 欧美自拍视频 | 色爽女人免费 | 国产超碰人人爽人人做人人爱 | 色天天综合久久久久综合片 | 亚洲综合视频一区 | 欧美一区二区免费 | 国产第一区二区三区 | 久久久久久1 | 亚洲日韩欧美一区二区在线 | 久久免费视频3 | 亚洲精品9999| 亚洲激情综合 | 岛国av免费 | 国产免费亚洲 | 欧美一区 | 国厂毛片 | 亚洲成年人网站在线观看 | 国产最新一区 | 亚洲h视频| 日韩一区二区黄色片 | 亚州成人| 资源av | 国产精品一区二区在线观看 | 久久久久久久久久久九 | 中文字幕乱码亚洲精品一区 | 一区免费视频 | 亚洲成av人片在线观看无码 | 一级电影免费看 | 欧美xxxⅹ性欧美大片 | 国产精品极品美女在线观看免费 | 欧美一区二区三区视频 | 91电影院| 亚洲欧洲综合 | 成人在线免费 | 犬夜叉在线观看 | 欧美一区二区三区 | 自拍一区视频 | 久草高清在线 | 三区在线观看 | 国产午夜精品一区二区三区 | 97色在线视频 | 96久久久| 欧美一区二区三区视频 | 精品国产91久久久久久久 | 羞羞视频免费观看 | 国产色在线 | 欧美久久久久 | 欧美日韩免费一区二区三区 | 欧美成人一区二区 | 日本二区视频 | 最新国产在线 | 国产一在线 | 亚洲天堂一区 | 另类五月 | 天天天插| 久久丁香| 毛片毛片毛片毛片毛片毛片 | 免费福利视频一区 | 超碰精品在线观看 | www.99re| 99精品99| 成人毛片在线视频 | 欧产日产国产精品一二 | 91综合网 | 中文字幕观看 | 黄a在线观看 | 亚洲人人 | 日韩欧美一区二区视频 | 久久精品亚洲精品国产欧美kt∨ | 在线a视频 | 成人激情视频在线播放 | 欧美成人精品一区二区男人看 | 中文字幕一区二区三区乱码在线 | 国产在线看片 | 99热婷婷| 日韩精品一二三 | 日韩在线亚洲 | 精品视频一区二区 | 亚洲一区 中文字幕 | 国产一级免费视频 | 男女深夜网站 | 亚洲网站久久 | 久久99深爱久久99精品 | 午夜免费福利影院 | 免费的av网站 | 欧美日韩一区二区三区在线观看 | 日韩成人免费电影 | 资源av| 男人av网 | 欧美九九九 | 日本高清视频网站www | 日韩在线观看 | 国产精品1区二区 | 日本一区二区三区免费观看 | 伊人久操| 欧美高清成人 | 国产精品欧美日韩 | 99久久免费看视频 | 99在线看| 亚洲国产精品久久 | 狠狠躁夜夜躁人人爽天天高潮 | 国产传媒毛片精品视频第一次 | 日本一区二区三区四区 | 欧美精品自拍 | 久久久久久免费毛片精品 | 91国产精品| 国产一区二区欧美 | 欧美黑人巨大xxx极品 | 在线观看免费av网 | 成人精品在线视频 | 激情欧美一区二区三区中文字幕 | 色一色视频 | 欧美日韩免费一区二区三区 | 欧美性猛交xxxx黑人猛交 | 亚洲精品一区二区三区精华液 | 草草网| 超碰国产一区 | 亚洲一区二区福利 | 久久69| 免费国产视频 | 一级欧美日韩 | 噜噜噜天天躁狠狠躁夜夜精品 | 日韩和的一区二区 | 夜夜操导航 | 国产91精品在线 | 国产成人精品高清久久 | 视频一区二区三区在线播放 | 五月婷综合 | 成人免费在线观看视频 | 日韩av手机在线免费观看 | 黄色精品视频 | 密室大逃脱第六季大神版在线观看 | 国产成人av电影 | 亚州国产 | 九色一区 | 精品久久久久久久 | 亚洲 欧美日韩 国产 中文 | 99视频免费在线观看 | 精品一二区 | 国产一级大片 | 激情小说综合网 | 日韩一二三区在线观看 | 日韩视频精品在线 | 黄色免费网| 精品视频在线视频 | 91 在线观看 | 一区二区三区国产好 | 日本二区在线观看 | 日本中文在线 | 国产精品久久久久久久久 | 国产大片久久久 | 欧美日韩精品综合 | 亚洲 欧美 另类 综合 偷拍 | 黄色网页大全 | 久久久久久亚洲 | 色吊丝在线 | 精品无人乱码区1区2区3区 | 成人深夜小视频 | 麻豆免费短视频 | 久草在线高清 | 国产精品视频免费 | 久久人人av| 在线免费观看激情视频 | 操操操av| 久草免费在线 | 日韩综合一区 | 日韩成人在线影院 | 一区二区三区在线视频播放 | 中文字幕在线观看一区二区三区 | 91福利网站在线观看 | 国产精品久久久久久久久久99 | 久久久久久久久久久久久久av | 国产精品久久久久无码av | 国产激情视频在线观看 | 欧美精品片 | 在线看免费观看日本 | 久久综合久久久 | 新91在线| www.亚洲精品 | 一区二区三区在线观看视频 | 国产女人爽到高潮免费视频 | 久久久亚洲一区 | 日韩av在线免费电影 | 中文字幕国产 | 日韩精品免费在线视频 | 成人在线观看中文字幕 | 成人久久久 | 国产成人av在线播放 | 精品久久久久久久久久久久 | 精品国产黄a∨片高清在线 激情网站免费 | 精品网站www| 久久精品一区二区三区四区 | 久久久久无码国产精品一区 | 精品91在线视频 | 香蕉久久一区二区不卡无毒影院 | 亚洲综合一区二区三区 | 日本免费www | 亚洲毛片在线观看 | 九色视频网站 | 这里有精品在线视频 | 午夜久久视频 | 亚洲欧美在线观看 | 黄色在线免费观看 | 国产黄色在线免费看 | 日韩在线观看中文字幕 | 亚洲精品久久久一区二区三区 | 亚洲免费在线看 | 亚洲成人免费 | 人妖一区| 国产欧美一二三区在线粉嫩 | 日本在线免费电影 | 久久99深爱久久99精品 | 欧美午夜一区二区三区免费大片 | 羞羞色影院 | 黄色短视频在线观看 | 成人观看免费视频 | 亚洲精品一区二区网址 | 久热官网 | 午夜精品一区二区三区在线观看 | 最新天堂中文在线 | 免费国产一区 | 久久国产精品电影 | 欧美日韩二区三区 | 欧美一区在线观看视频 | 精品视频一区二区 | 久久免费精品视频 | 草久久av| 91精品国产综合久久久久久丝袜 | 看毛片网站 | 97超碰在线播放 | 国产欧美在线观看 |