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

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

JAVA基礎學習day14--集合一

2019-11-14 15:34:46
字體:
來源:轉載
供稿:網友

一、集合的出現

1.1、集合簡述

面向對象語言對事物的體現都是以對象形式,為了方便對多個對象的操作,就對象對象進行存儲,集合就是存儀儲對象最常用的一種試

1.2、數組和集合都是容器

數組也存對象,存儲同一種類型,但數組是固定長度的,集合長度是可變。

數組中可以存儲基本數據類型,集合只能存儲對象

1.3、集合特點

集合只用于存儲對象,集合長度是可變的,集合可以存儲不同類型的對象。

1.4、結構

 

二、集合共性方法

2.1、Collection接口頂級

Collection 層次結構 中的根接口。Collection 表示一組對象,這些對象也稱為 collection 的元素。一些 collection 允許有重復的元素,而另一些則不允許。一些 collection 是有序的,而另一些則是無序的。JDK 不提供此接口的任何直接 實現:它提供更具體的子接口(如 SetList)實現。此接口通常用來傳遞 collection,并在需要最大普遍性的地方操作這些 collection。

2.2、共性方法

 

方法摘要
booleanadd(E e)
確保此 collection 包含指定的元素(可選操作)。
booleanaddAll(Collection<? extends E> c)
將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。
voidclear()
移除此 collection 中的所有元素(可選操作)。
booleancontains(Object o)
如果此 collection 包含指定的元素,則返回 true
booleancontainsAll(Collection<?> c)
如果此 collection 包含指定 collection 中的所有元素,則返回 true。
booleanequals(Object o)
比較此 collection 與指定對象是否相等。
inthashCode()
返回此 collection 的哈希碼值。
booleanisEmpty()
如果此 collection 不包含元素,則返回 true。
Iterator<E>iterator()
返回在此 collection 的元素上進行迭代的迭代器。
booleanremove(Object o)
從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。
booleanremoveAll(Collection<?> c)
移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。
booleanretainAll(Collection<?> c)
僅保留此 collection 中那些也包含在指定 collection 的元素(可選操作)。
intsize()
返回此 collection 中的元素數。
Object[]toArray()
返回包含此 collection 中所有元素的數組。
<T> T[]
toArray(T[] a)
返回包含此 collection 中所有元素的數組;返回數組的運行時類型與指定數組的運行時類型相同。

 2.3、ArrayList示例

 

import java.util.*;class CollectionDemo {    public static void main(String[] args) {        // 聲明2個集合容器,并添加元素        List<String> ar1 = new ArrayList<String>();        ar1.add("a");        ar1.add("b");        ar1.add("c");        ar1.add("d");        ar1.add("e");        // 遍歷        sop("ar1遍歷:");        getIterator(ar1);        List<String> ar2 = new ArrayList<String>();        ar2.add("a");        ar2.add("b");        ar2.add("f");        ar2.add("q");        ar2.add("w");        // 增強for循環遍歷        sop("ar2遍歷:");        getFor(ar2);        // 求集合的長度        sop("ar1的長度:" + ar1.size());        sop("ar2的長度:" + ar2.size());        // 比較判斷        sop("ar1中有字符a嗎 : " + ar1.contains("a"));        // 整個集合比較        sop("ar1中有字符ar2嗎 : " + ar1.containsAll(ar2));        // 求交集        ar1.retainAll(ar2);        sop("求交集");        getFor(ar1);        // addALL        ar1.addAll(ar2);        // 增強for循環遍歷        sop("添加ar2后的ar1:");        getFor(ar1);        // 刪除        ar1.remove("c");        sop("ar1刪除指定c后");        getFor(ar1);        sop("ar1刪除指定集合");        ar1.removeAll(ar2);        getFor(ar1);        sop("ar1是空嗎?" + ar1.isEmpty());        // 清空        ar1.clear();        sop(ar1.size());    }    // iterator遍歷集合    public static void getIterator(List<String> list) {        Iterator<String> iterator = list.iterator();        while (iterator.hasNext()) {            String str = iterator.next();            sop(str);        }    }    // forEach遍歷    public static void getFor(List<String> list) {        for (String str : list) {            sop(str);        }    }    // 打印    public static void sop(Object obj) {        System.out.PRintln(obj);    }}

 

結果:

ar1遍歷:abcdear2遍歷:abfqwar1的長度:5ar2的長度:5ar1中有字符a嗎 : truear1中有字符ar2嗎 : false求交集ab添加ar2后的ar1:ababfqwar1刪除指定c后ababfqwar1刪除指定集合ar1是空嗎?true0

2.4、Iterator

 

方法摘要
booleanhasNext()
如果仍有元素可以迭代,則返回 true。
Enext()
返回迭代的下一個元素。
voidremove()
從迭代器指向的 collection 中移除迭代器返回的最后一個元素(可選操作)。

 2.5、ArrayList

 

import java.util.ArrayList;import java.util.Iterator;import java.util.List;/** * List:元素是有序的,元素可以重復,該集合體系有索引 * Set:元素是無序,元素不可以重復 * List: *         特有方法:可以操作索引的方法都 是特有 *     add(index ,element) * addAll(index,Collection); * remove (index) * set(index,element) * get(index); * subList(from,to) * listIterator() *  *  */public class ListDemo {    public static void main(String[] args) {        //add();        //remove();        //set();        //getIndex();        indexSub();    }        //indexOf和subList    public static void indexSub(){        List<String> list=new ArrayList<String>();        //添加元素        list.add("java01");        list.add("java02");        list.add("java03");        list.add("java04");        list.set(2,"hello");        sop(list.indexOf("java04"));//3        sop(list.indexOf("java09"));//-1        sop(list.lastIndexOf("hello"));//2        List<String> subList=list.subList(1, 3);        sop(subList);//hello,java03    }        //遍歷    public static void getIndex(){        List<String> list=new ArrayList<String>();        //添加元素        list.add("java01");        list.add("java02");        list.add("java03");        list.add("java04");        list.set(2,"hello");        //循環遍歷,通過索引的方式遍歷和數組一樣        for(int x=0;x<list.size();x++){            sop("list["+x+"]="+list.get(x));        }            }        //修改        public static void set(){            List<String> list=new ArrayList<String>();            //添加元素            list.add("java01");            list.add("java02");            list.add("java03");            list.add("java04");            list.set(2,"hello");            //遍歷            get(list);        }    //刪除元素    public static void remove(){        List<String> list=new ArrayList<String>();        //添加元素        list.add("java01");        list.add("java02");        list.add("java03");        list.add("java04");        list.remove(2);        //遍歷        get(list);    }        //添加元素    public static void add(){        List<String> list=new ArrayList<String>();        //添加元素        list.add("java01");        list.add("java02");        list.add("java03");        //遍歷        get(list);        //在指定位置添加        list.add(1,"java09");        //遍歷        System.out.println("========在指定位置添加后==========");        get(list);    }    //遍歷    public static void get(List<String> list){        for(Iterator<String> it=list.iterator();it.hasNext();){            sop(it.next());        }    }    public static void sop(Object obj){        System.out.println(obj);    }    }

2.6、列表迭代器 listIterator

iterator,只能做判斷、刪除、取出,不能做其它操作

listIterator

public ListIterator<E> listIterator(int index)

返回列表中元素的列表迭代器(按適當順序),從列表的指定位置開始。指定的索引表示 next 的初始調用所返回的第一個元素。previous 方法的初始調用將返回索引比指定索引少 1 的元素。

此實現返回 ListIterator 接口的直接實現,擴展了由 iterator() 方法返回的 Iterator 接口的實現。ListIterator 實現依賴于底層實現列表的 get(int)、set(int, E)add(int, E)remove(int) 方法。

注意,除非重寫列表的 remove(int)set(int, E)add(int, E) 方法,否則此實現返回的列表迭代器將拋出 UnsupportedOperationException 來響應其 remove、setadd 方法。

根據 (protected) modCount 字段規范中的描述,在面臨并發修改時,可以使此實現拋出運行時異常。 

 

方法摘要
voidadd(E e)
將指定的元素插入列表(可選操作)。
booleanhasNext()
以正向遍歷列表時,如果列表迭代器有多個元素,則返回 true(換句話說,如果 next 返回一個元素而不是拋出異常,則返回 true)。
booleanhasprevious()
如果以逆向遍歷列表,列表迭代器有多個元素,則返回 true。
Enext()
返回列表中的下一個元素。
intnextIndex()
返回對 next 的后續調用所返回元素的索引。
Eprevious()
返回列表中的前一個元素。
intpreviousIndex()
返回對 previous 的后續調用所返回元素的索引。
voidremove()
從列表中移除由 nextprevious 返回的最后一個元素(可選操作)。
voidset(E e)
用指定元素替換 nextprevious 返回的最后一個元素(可選操作)。

 

 

package com.pb.list.demo1;import java.util.ArrayList;import java.util.List;import java.util.*;public class ListIteratorDemo {    public static void main(String[] args) {        List<String> list=new ArrayList<String>();        //添加元素        list.add("java01");        list.add("java02");        list.add("java03");        list.add("java04");        list.add("java05");        //獲取listIterator迭代器        ListIterator<String> listIterator=list.listIterator();        while(listIterator.hasNext()){            if(listIterator.next().equals("java02")){//判斷                //修改                listIterator.set("java007");                //添加                listIterator.add("hello");            }                    }        sop(list);        //倒序輸出遍歷        while(listIterator.hasPrevious()){            sop(listIterator.previous());        }            }    public static void sop(Object obj){        System.out.println(obj);                }}

 

2.7、Vector

 

package com.pb.list.demo1;import java.util.ArrayList;import java.util.Enumeration;import java.util.List;import java.util.Vector;public class VectorDemo {    public static void main(String[] args) {        Vector<String> vector=new Vector<String>();        //添加元素        vector.add("java01");        vector.add("java02");        vector.add("java03");        vector.add("java04");        vector.add("java05");                //獲取枚舉        Enumeration<String> en=vector.elements();        while(en.hasMoreElements()){            System.out.println(en.nextElement());        }    }}

 

 

2.8、LinkedList

 

package com.pb.list.demo1;import java.util.LinkedList;/** * LinkedList特有方法:  * 添加元素到第一個索引位置 addFirst();* 添加元素到最后一個索引位置 addLast(); * 獲取索引為0的元素 getFirst();  * 獲取索引最后的元素 getLast();  * 刪除索引為0的元素 removeFirst(); *  刪除索引為size()-1的元素 * removeLast(); */public class LinkedListDemo {    public static void main(String[] args) {        // 聲明一個鏈表集合        LinkedList<String> list = new LinkedList<String>();        // 添加到第一個元素        list.addFirst("1");        list.add("2");        list.add("3");        sop(list);// 3,2,1        // 將元素添加到最后        list.addLast("6");        list.addLast("5");        list.addLast("4");// 3,2,1,6,5,4        sop(list);// 獲取第一個元素        sop(list.getFirst());//3        // 獲取最后一個元素        sop(list.getLast());// 4        // 刪除第一個元素        sop(list.removeFirst());        // 刪除最后一個        sop(list.removeLast());        sop(list);// 2,1,6,5        /*         * 獲取集合全部元素,不使用迭代器         */        while (!list.isEmpty()) {            list.removeFirst();// list.removeLast();        }    }    public static void sop(Object obj) {        System.out.println(obj);    }}

removeFirst或者removeLast

public E removeFirst()

移除并返回此列表的第一個元素。

 

指定者:
接口 Deque<E> 中的 removeFirst

返回:

此列表的第一個元素

拋出:

NoSuchElementException - 如果此列表為空

JDK 1.6之后提供了新的方法

pollFirst或者pollLast

public E pollFirst()
獲取并移除此列表的第一個元素;如果此列表為空,則返回 null

 

指定者:
接口 Deque<E> 中的 pollFirst
返回:
此列表的第一個元素;如果此列表為空,則返回 null
從以下版本開始:
1.6 

示例

package com.pb.list.demo1;import java.util.LinkedList;/** * JDK 1.6提供了新的方法 * offerFirst(),添加元素到第個 * offerLast(),添加元素到最后一位 *  * peekFirst()獲取第一個元素 * peekLast()獲取最后一個元素 *  * pollFirst()刪除第一個元素 * pollLast()刪除最后一個元素 * */public class LinkedListDemo1 {        public static void main(String[] args) {    // 聲明一個鏈表集合            LinkedList<String> list = new LinkedList<String>();            // 添加到第一個元素            list.offerFirst("1");            list.offerFirst("2");            list.offerFirst("3");            sop(list);// 3,21            // 將元素添加到最后            list.offerLast("6");            list.offerLast("5");            list.offerLast("4");// 3,2,1,6,5,4            sop(list);            // 獲取第一個元素            sop(list.peekFirst());// 3            // 獲取最后一個元素            sop(list.peekLast());// 4            // 刪除第一個元素            sop(list.pollFirst());            // 刪除最后一個            sop(list.pollLast());            sop(list);// 2,1,6,5            /*             * 獲取集合全部元素,不使用迭代器             */            while (!list.isEmpty()) {                list.pollFirst();// list.pollLast()            }        }        public static void sop(Object obj) {            System.out.println(obj);        }}

 

示例:

package com.pb.list.demo1;import java.util.LinkedList;/** * 使用LinkedList模擬一個堆?;蛘哧犃袛祿Y構 * 堆棧:先進后出 * 隊列:先進先出  *  * */public class LinkedListDemo2 {    public static void main(String[] args) {        Que q=new Que();        q.myAdd("java01");        q.myAdd("java02");        q.myAdd("java03");        q.myAdd("java04");        q.myAdd("java05");        while(!q.isNUll()){            //輸出            System.out.println(q.myGet());        }    }}class Que{    private LinkedList list=null;    public Que(){        list=new LinkedList();            }        //判斷是不是NULL    public boolean isNUll(){        return list.isEmpty();    }    //添加    public void myAdd(Object obj){        list.offerFirst(obj);    }    //刪除    public Object myGet(){        return list.pollLast(); //先出        // return list.pollFirst();    }}

示例,去除list的重復元素

package com.pb.list.demo1;import java.util.ArrayList;import java.util.Iterator;/** * 去除ArrayList中的重復元素 * @author Administrator * */public class ArrayListDemo1 {    public static void main(String[] args) {        ArrayList list=new ArrayList();        list.add("java01");        list.add("java01");        list.add("java02");        list.add("java02");        list.add("java03");        list.add("java03");        list.add("java019");        System.out.println(getSingle(list));    }    public static ArrayList getSingle(ArrayList list){        ArrayList tempList=new ArrayList();        for(Iterator it=list.iterator();it.hasNext();){            Object obj=it.next();            if(!tempList.contains(obj)){                tempList.add(obj);            }        }                return tempList;    }}

 

 示例,去除list的重復對象

package com.pb.list.demo1;public class Person {    private String name;    private int age;                    //重寫equals    @Override    public boolean equals(Object obj) {        if(!(obj instanceof Person)){            return false;        }        Person p=(Person)obj;        return this.name.equals(p.name)&&this.age==p.age;    }    public Person() {        super();        // TODO Auto-generated constructor stub    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }    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 void show(){        System.out.println(this.name+"........"+this.age);    }}

 

 

 

package com.pb.list.demo1;import java.util.ArrayList;import java.util.Iterator;/** * 去除ArrayList中的重復元素 * @author Administrator * */public class ArrayListDemo1 {    public static void main(String[] args) {        Person p1=new Person("張三",19);        Person p2=new Person("張三",19);        Person p3=new Person("李四",23);        Person p4=new Person("李四",23);        Person p5=new Person("王五",33);        Person p6=new Person("王五",23);        Person p7=new Person("趙六",18);                ArrayList<Person> list=new ArrayList<Person>();        list.add(p1);        list.add(p2);        list.add(p3);        list.add(p4);        list.add(p5);        list.add(p6);                //遍歷去掉重復后的        for(Person p:getSingle(list)){            p.show();        }            }    public static ArrayList<Person> getSingle(ArrayList<Person> list){        ArrayList<Person> tempList=new ArrayList<Person>();        for(Iterator<Person> it=list.iterator();it.hasNext();){            Person p=it.next();            if(!tempList.contains(p)){ //contains也是調用對象equals方法                tempList.add(p);            }                    }                return tempList;    }}

 

 

2.9、三種集合區別

ArrayList:底層的數據結構使用是數組結構,遍歷快,增、刪、改,慢,線程不同步

LinkedList:底層的數據結構使用鏈表數據結構,遍歷慢,增、刪、改,快,

Vector:底層的數據結構使用是數組結構,線程同步的,被ArrayList替代了。

 

 

三、Set

3.1、List和Set區別

 List:元素是有序的,元素可以重復,該集合體系有索引
Set:元素是無序,元素不可以重復

一個不包含重復元素的 collection。更確切地講,set 不包含滿足 e1.equals(e2) 的元素對 e1e2,并且最多包含一個 null 元素。

3.2、常見子類

HashSet--哈希表,TreeSet

3.3、功能方法

Set的方法和Collection一樣,使用方式也一樣

 

 

package com.pb.list.demo1;public class Person {    private String name;    private int age;                //重寫hashCode    @Override    public int hashCode() {        System.out.println("========hashCode");        return name.hashCode()+age*39;    }    //重寫equals    @Override    public boolean equals(Object obj) {        if(!(obj instanceof Person)){            return false;        }        Person p=(Person)obj;        System.out.println(p.name+"========equals"+p.age);        return this.name.equals(p.name)&&this.age==p.age;    }    public Person() {        super();        // TODO Auto-generated constructor stub    }    public Person(String name, int age) {        super();        this.name = name;        this.age = age;    }    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 void show(){        System.out.println(this.name+"........"+this.age);    }}

 

package com.pb.list.demo1;import java.util.HashSet;import java.util.Iterator;public class Demo1 {    public static void main(String[] args) {        Person p1=new Person("張三",19);        Person p2=new Person("李四",20);        Person p3=new Person("張三",19);        Person p4=new Person("李四",20);        Person p5=new Person("五一",19);        Person p6=new Person("五一",19);        HashSet<Person> set=new HashSet<Person>();        set.add(p6);        set.add(p5);        set.add(p4);        set.add(p3);        set.add(p2);        set.add(p1);        Iterator<Person> iterator=set.iterator();        while(iterator.hasNext()){            Person p=iterator.next();            p.show();        }            }}
========hashCode========hashCode五一========equals19========hashCode========hashCode========hashCode李四========equals20========hashCode張三========equals19李四........20張三........19五一........19

ArrayList:判斷元素是否存或者刪除依賴的方法equals()方法

Set:判斷元素是否存或者刪除,依賴的方法hashCode()和equals()方法,先判斷hashCode如果有再判斷equals

 


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产网站| 亚洲国产成人在线播放| 亚洲精品aⅴ中文字幕乱码| 国产精品自拍小视频| 欧美性色xo影院| 亚洲综合自拍一区| 亚洲欧美国产视频| 精品小视频在线| 欧美日韩亚洲91| 日韩福利伦理影院免费| 伊人精品在线观看| 久久久在线观看| 欧美亚洲激情视频| 91久久久久久久久久| 国产在线播放91| 97精品一区二区三区| 国产精品日韩在线| 久久亚洲国产精品| 91色p视频在线| 欧美国产视频日韩| 久久精品夜夜夜夜夜久久| 黑人巨大精品欧美一区二区三区| 这里只有视频精品| 欧美性感美女h网站在线观看免费| 亚洲精品美女视频| 日韩有码在线电影| 国产日韩在线播放| 亚洲精品视频久久| 日韩中文娱乐网| 亚洲va欧美va国产综合久久| 欧美性猛交xxxx乱大交极品| 欧美黄色免费网站| 久久久久久久久久久亚洲| 日韩在线观看免费av| 欧美激情在线一区| 国产一区二区三区中文| 色伦专区97中文字幕| 在线观看视频亚洲| 中文字幕亚洲综合| 亚洲欧美一区二区三区久久| 91中文精品字幕在线视频| 欧美国产日韩一区| 国产亚洲一区二区精品| 国产精品成人在线| 欧美日韩国产成人在线观看| 精品国产乱码久久久久久婷婷| 91亚洲精华国产精华| 一个人看的www欧美| 欧美乱大交做爰xxxⅹ性3| 久久天天躁狠狠躁夜夜躁| 久久偷看各类女兵18女厕嘘嘘| 国产精品情侣自拍| 精品中文字幕在线2019| 亚洲最大的免费| 亚洲欧美一区二区三区四区| 成人免费直播live| 久久视频免费观看| 欧美黄色免费网站| 久久亚洲国产精品| 日韩美女在线观看一区| 中文字幕亚洲字幕| 成人久久一区二区三区| 亚洲国产精品久久久久| 国产亚洲免费的视频看| 国内精品美女av在线播放| www.亚洲免费视频| 国产亚洲一区二区精品| 国内精品视频一区| 亚洲成人av片在线观看| 国产97免费视| 最近2019好看的中文字幕免费| 欧美大码xxxx| 国产精品av在线播放| 亚洲黄页网在线观看| 欧美一级淫片播放口| 亚洲第一页自拍| 国产不卡视频在线| 91在线免费观看网站| 精品动漫一区二区三区| www.日韩免费| 国产精品日韩在线| 97婷婷涩涩精品一区| 成人激情黄色网| 国产一区私人高清影院| 国产精品十八以下禁看| 色偷偷av一区二区三区乱| 国产亚洲精品久久久久久| 亚洲sss综合天堂久久| 欧美一性一乱一交一视频| 最新国产精品亚洲| www.久久撸.com| 欧美在线观看www| 俺去了亚洲欧美日韩| 精品无人区乱码1区2区3区在线| 国产成人jvid在线播放| 久久色在线播放| 在线播放日韩专区| 久久久久久久久久久久久久久久久久av| 久久综合国产精品台湾中文娱乐网| 欧美精品制服第一页| 国外视频精品毛片| 欧美怡春院一区二区三区| 日韩天堂在线视频| 日韩av手机在线看| 国产精品久久999| 一区二区三区美女xx视频| 日本久久91av| 久久天堂电影网| 欧美大片网站在线观看| 久久精品在线视频| 国产一区二区三区在线免费观看| 一区二区三区在线播放欧美| 亚洲精品国产精品国产自| 亚洲精品少妇网址| 欧美电影在线观看| 欧美亚洲激情在线| 久久艳片www.17c.com| 国产香蕉一区二区三区在线视频| 亚洲成人av资源网| 国产成+人+综合+亚洲欧美丁香花| 91国语精品自产拍在线观看性色| 亚洲第一网站免费视频| 精品五月天久久| 精品福利樱桃av导航| 亚洲va欧美va国产综合久久| 亚洲第一精品自拍| 亚洲日本欧美日韩高观看| 亚洲自拍偷拍色片视频| 一区二区三区四区精品| 欧美巨大黑人极品精男| 成人亲热视频网站| 久久91超碰青草是什么| 久久亚洲精品视频| 1769国产精品| 国产91色在线播放| 91精品久久久久| 国产精品久久77777| 国产成人精品在线观看| 91极品女神在线| 国产亚洲一区精品| 97在线观看视频国产| 国内精品久久久久久影视8| 国产精品扒开腿爽爽爽视频| 国产精品久久久av| 中文字幕欧美专区| 国产精品高潮呻吟久久av野狼| 97国产在线视频| 欧美黄网免费在线观看| 2019中文字幕在线免费观看| 欧美国产日本高清在线| 久久久噜噜噜久久久| 国产剧情久久久久久| 亚洲视频axxx| 国产噜噜噜噜久久久久久久久| 精品亚洲一区二区三区| 欧美日韩高清在线观看| 性日韩欧美在线视频| 国产91色在线免费| 久久久久免费视频| 久久天堂电影网| 欧美黑人国产人伦爽爽爽| 亚洲成年网站在线观看| 欧美一区三区三区高中清蜜桃| 国产69精品久久久久9|