麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

java集合 之 Collection和Iterator接口

2019-11-15 00:44:54
字體:
供稿:網(wǎng)友
java集合 之 Collection和Iterator接口

Collection是List,Queue和Set接口的父接口,該接口里定義的方法即可用于操作Set集合,也可以用于List和Queue集合。Collection接口里定義了如下操作元素的方法。

boolean add(object o):該方法用于向一個集合中里添加一個元素。如果集合對象被添加操作改變了,則返回true。

boolean addAll(Collection c):將集合c中的所有元素添加到指定的集合中。如果集合對象被添加操作改變了,則返回true。

void clear():清除集合里的所有元素,將集合長度變?yōu)?。

boolean contatins(Objeect o):返回集合中是否包含指定元素o。如果包含,返回true。

boolean containsAll(Collection c):返回集合中是否包含集合c中的所有元素。如果包含,返回true。

boolean isEmpty():返回集合是否為空。當(dāng)集合長度為零時,返回true;否則返回false。

Iterator iterator():返回一個Iterator對象,用于遍歷集合中的元素。

boolean remove(Object o):刪除集合中的指定元素o,當(dāng)集合中包含多個o元素時,只刪除第一個符合條件的o元素,該方法返回true。

boolean removeAll(Collection c):刪除集合中所有集合c包含的元素(相當(dāng)于當(dāng)前集合減去集合c),如果該方法改變了調(diào)用該方法的集合,則該方法返回true。

boolean retainAll(Collection c):刪除集合中所有集合c不包含的元素(相當(dāng)于求當(dāng)前集合于集合c的交集),如果該方法改變了調(diào)用了該方法的集合,則該方法返回true。

int size():返回集合的長度。

Object[] toArray():將集合轉(zhuǎn)換為一個數(shù)組,所有集合元素變成相應(yīng)的數(shù)組元素。

public class CollectionTest {    public static void main(String[] args){        Collection c = new ArrayList();        //添加元素        c.add("孫悟空");        c.add(6);        System.out.

使用Lambda表達式遍歷集合:

java8為Iterble接口新增了了一個foreach(Consumer action)接口,該方法所需的參數(shù)類型是一個函數(shù)式接口,而Iterable是Collection接口的父接口,應(yīng)此Collection可以直接調(diào)用此方法。

當(dāng)程序調(diào)用Iterable的foreach(Consumer action)遍歷集合元素時,程序會依次將集合元素傳給Comsumer的accept(T t)方法(該方法中唯一的抽象方法)。

public class CollectionEach {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業(yè)應(yīng)用開發(fā)");        books.add("瘋狂java講義");        books.add("瘋狂android");        /*輸出:迭代集合為:瘋狂java講義               迭代集合為:輕量級java企業(yè)應(yīng)用開發(fā)               迭代集合為:瘋狂android*/        books.forEach(obj -> System.out.println("迭代集合為:" + obj));    }}

使用java8增強的Ieteraor遍歷集合元素:

Iteraor接口也是java集合框架中的成員,主要用于遍歷Collection集合中的元素,Iterator對象也被稱為迭代器。

Iteraor定義了一些方法:

boolean hasnext(): 如果被迭代的元素還沒有遍歷完,則返回true。

Object next(): 返回集合中的下一個元素。

void remove():刪除集合集合中上一次next方法返回的元素。

void forEachRemning(Consumer action):使用Lambda表達式遍歷集合。

當(dāng)使用Iterator迭代訪問Collection集合元素時,Collection集合里的元素不能被改變,只有通過Iterator的remove方法刪除上一次next()方法返回的集合元素才可以,否則會引發(fā)異常。

public class IteratorTest2 {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業(yè)應(yīng)用開發(fā)");        books.add("瘋狂java講義");        books.add("瘋狂android");        Iterator it = books.iterator();        while(it.hasNext()){            String book = (String)it.next();          //輸出:瘋狂java講義          //     輕量級java企業(yè)應(yīng)用開發(fā)          //     瘋狂android            System.out.println(book);            if (book.equals("瘋狂java講義")) {                it.remove();            }        }       //輸出:[輕量級java企業(yè)應(yīng)用開發(fā), 瘋狂android]                 System.out.println(books);    }}

使用Lambda表達式遍歷Iterator

java8為Iterator提供了一個forEachRemning(Consumer action)方法,該方法所需的也是Consumer參數(shù)同樣也是函數(shù)式接口。當(dāng)程序調(diào)用Iterator的forEachRemning(Consumer action)遍歷集合元素時,程序會依次將集合元素傳給Consumer的accept(T t)方法(該接口中唯一的方法)。

public class IteratorEach {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業(yè)應(yīng)用開發(fā)");        books.add("瘋狂java講義");        books.add("瘋狂android");        Iterator it = books.iterator();        /*迭代元素集合為:瘋狂java講義              迭代元素集合為:輕量級java企業(yè)應(yīng)用開發(fā)              迭代元素集合為:瘋狂android*/        it.forEachRemaining(obj -> System.out.println("迭代元素集合為:" + obj));    }}

使用foreach循環(huán)遍歷集合元素

除了可以使用Iterator接口迭代訪問Collection集合里的元素之外,使用java5提供的foreach循環(huán)迭代訪問集合元素更加快捷。

public class ForeachTest {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業(yè)應(yīng)用開發(fā)");        books.add("瘋狂java講義");        books.add("瘋狂android");        for(Object obj : books){            String book = (String)obj;            /*瘋狂java講義            輕量級java企業(yè)應(yīng)用開發(fā)            瘋狂android*/            System.out.println(book);            if (book.equals("瘋狂Andriod講義")) {                //下面代碼將要引發(fā)異常                books.remove(book);            }        }        //[瘋狂java講義, 輕量級java企業(yè)應(yīng)用開發(fā), 瘋狂android]        System.out.println(books);    }

使用java8新增的Prdicate操作集合:

java8為Collectio集合新增一個removeIf(Predicate filter)方法,該方法將會批量刪除符合filter條件的所有元素。

public class PredicateTest {    public static void main(String[] args){        Collection books = new HashSet();        books.add(new String("輕量級java應(yīng)用開發(fā)"));        books.add(new String("瘋狂java講義"));        books.add(new String("瘋狂IOS講義"));        books.add(new String("瘋狂Ajax講義"));        books.add(new String("瘋狂android講義"));        //統(tǒng)計書名包括“瘋狂”子串的圖書數(shù)量.輸出:4        System.out.println(calAll(books,ele -> ((String)ele).contains("瘋狂")));        //統(tǒng)計書名字符串長度大于10的圖書數(shù)量.輸出:2        System.out.println(calAll(books,ele -> ((String)ele).length()>10));    }    public static int calAll(Collection books , Predicate p ){        int total = 0;        for(Object obj : books){            if (p.test(obj)) {                total++;            }        }        return total;    }}

使用java8新增的Stream操作集合:

java8新增了Stream,IntStream,LongStream,DoubleStream等流式API,這些api代表多個支持串行和并行聚集操作的元素。上面四個接口中,Stream代表一個通用的流接口,其他則分別代表元素類型為int,long,double的流。

獨立使用流的方法:

1.使用Stream或Xxxstream的builder()類方法創(chuàng)建該Stream對應(yīng)的Builder。

2.重復(fù)調(diào)用Budiler的add()方法,向該流中添加多個元素。

3.調(diào)用Builder的build()方法獲取相應(yīng)的Stream。

4.調(diào)用Stream的聚集方法。

對于大部分的聚集方法而言,每個Stream只能執(zhí)行一次。

Stream提供了大量的方法進行聚集操作,這些方法既可以是”中間的“,也可以是”末端的“。

〉中間方法:中間操作允許流保持打開操作,并且可以直接調(diào)用后續(xù)的方法。中間方法的返回值是另一個流。

〉末端方法:末端方法是對流的最終操作。當(dāng)對某個Stream對象執(zhí)行末端方法后,該流將會被”消耗“,且不可再用。

除此之外,關(guān)于流的方法還有如下兩個特征:

1.有狀態(tài)的方法:這個方法會為流增加一些新的特征,比如元素的唯一性,元素的最大數(shù)量,保證元素以排序的方式被處理。有狀態(tài)的方法往往需要更大的開銷。

2.短路方法:短路方法可以盡早結(jié)束對流的操作,不必檢查每個元素。

Stream常用的中間方法:

filter(Predicate predicate):過濾所有不符合predicate的元素。

map ToXxx(ToXxxFunction mapper):使用ToXxxFunction對流中的元素進行一對一的轉(zhuǎn)換,返回一個新流包含轉(zhuǎn)換后生成的所用元素。

peek(Consumer action):依次對每個元素執(zhí)行一些操作,該方法返回的流與原有流包含相同的元素。該方法主要用于調(diào)試。

distinct():該方法用于排序流中所用重復(fù)的元素(判斷元素重復(fù)的標(biāo)準(zhǔn)是使用equals()方法比較返回true)。這是一個有狀態(tài)的方法。

sorted():該方法保證流中的元素在后續(xù)的操作中處于有序狀態(tài)。這是一個有狀態(tài)的方法。

limit(long maxSize):該方法用于保證對流的后續(xù)訪問中最大允許的元素個數(shù)。這是一個有狀態(tài),短路方法。

常用的末端方法:

forEach(Consumer action):遍歷流中的元素,對每個元素執(zhí)行action。

toArray():將流中所有的元素轉(zhuǎn)換為數(shù)組形式。

reduce():該方法有三個重載的版本,都用于通過某種操作來合并流中的元素。

min():返回流中元素的最小值。

max():返回流中元素的最大值。

count():返回流中所用元素的數(shù)值。

anyMatch(Predicate predicate):判斷流中是否至少包含一個符合Predicate條件。

allMatch(Predicate predicate):判斷流中是否每個元素都符合Predicate條件。

noneMatch(Predicate predicate):判斷流中是否所有元素都不包括符和Predicate條件。

findFirst():返回流中第一個元素。

findAny():返回流中任意一個元素。

public class CollectionStream {    public static void main(String[] args){        Collection books = new HashSet();        books.add(new String("輕量級java應(yīng)用開發(fā)"));        books.add(new String("瘋狂java講義"));        books.add(new String("瘋狂IOS講義"));        books.add(new String("瘋狂Ajax講義"));        books.add(new String("瘋狂android講義"));        //統(tǒng)計書中包含“瘋狂”子串的圖書數(shù)量        //輸出:4        System.out.println(books.stream()                .filter(ele -> ((String)ele).contains("瘋狂"))                .count());        //統(tǒng)計書名中包含“java”子串的圖書數(shù)量        //輸出:2        System.out.println(books.stream()                .filter(ele -> ((String)ele).contains("java"))                .count());        //統(tǒng)計圖書中字符串長度大于10的圖書數(shù)量        //輸出:2        System.out.println(books.stream()                .filter(ele -> ((String)ele).length() > 10)                .count());        /*先調(diào)用Collection對象的stream方法將集合轉(zhuǎn)換為Stream         * 再調(diào)用Stream中的mapToXxx()方法,進行轉(zhuǎn)換         */        books.stream().mapToInt(ele -> ((String)ele).length())                //用forEach方法遍歷IntStream中每個元素                //輸出:8 8 7 11 11                .forEach(System.out::println);    }}

                                        ---------《瘋狂java講義》8.2


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 免费观看黄色一级视频 | 午夜精品在线视频 | 黄色大片在线免费观看 | 国产精品99久久久久久久女警 | 欧美国产精品一区二区 | 91懂色| 夜夜看| 精品国产91一区二区三区 | 亚洲国产精品500在线观看 | 亚洲人成中文字幕在线观看 | 在线观看中文字幕av | 一级国产航空美女毛片内谢 | 久久伊人国产精品 | 国产精品成人av片免费看最爱 | 久草在线精品观看 | 毛片免费一区二区三区 | 国产91中文字幕 | 久久91久久 | 久久久久久久久浪潮精品 | 4p一女两男做爰在线观看 | 哪里可以看免费的av | 成人三级电影网站 | 国产一级免费在线视频 | 精品国产视频一区二区三区 | 宅男噜噜噜66一区二区 | 日本在线播放一区二区三区 | 永久免费不卡在线观看黄网站 | 精品国产一区二区三区在线观看 | 国产成人精品二区 | 国产一区二区三区视频在线 | 国产一区二区三区视频在线 | 欧美精品日日鲁夜夜添 | 在线成人亚洲 | 久久成人在线观看 | 欧美一a一片一级一片 | 天天看夜夜爽 | 特逼视频 | 免费一级a毛片在线播放视 日日草夜夜操 | 国产一级毛片高清视频 | 国产精品成人av片免费看最爱 | 12av毛片|