国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

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

java集合 之 Collection和Iterator接口

2019-11-15 00:44:54
字體:
來源:轉載
供稿:網友
java集合 之 Collection和Iterator接口

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

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

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

void clear():清除集合里的所有元素,將集合長度變為0。

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

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

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

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

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

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

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

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

Object[] toArray():將集合轉換為一個數組,所有集合元素變成相應的數組元素。

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)接口,該方法所需的參數類型是一個函數式接口,而Iterable是Collection接口的父接口,應此Collection可以直接調用此方法。

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

public class CollectionEach {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業應用開發");        books.add("瘋狂java講義");        books.add("瘋狂android");        /*輸出:迭代集合為:瘋狂java講義               迭代集合為:輕量級java企業應用開發               迭代集合為:瘋狂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表達式遍歷集合。

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

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

使用Lambda表達式遍歷Iterator

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

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

使用foreach循環遍歷集合元素

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

public class ForeachTest {    public static void main(String[] args){        Collection books = new HashSet();        books.add("輕量級java企業應用開發");        books.add("瘋狂java講義");        books.add("瘋狂android");        for(Object obj : books){            String book = (String)obj;            /*瘋狂java講義            輕量級java企業應用開發            瘋狂android*/            System.out.println(book);            if (book.equals("瘋狂Andriod講義")) {                //下面代碼將要引發異常                books.remove(book);            }        }        //[瘋狂java講義, 輕量級java企業應用開發, 瘋狂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應用開發"));        books.add(new String("瘋狂java講義"));        books.add(new String("瘋狂IOS講義"));        books.add(new String("瘋狂Ajax講義"));        books.add(new String("瘋狂android講義"));        //統計書名包括“瘋狂”子串的圖書數量.輸出:4        System.out.println(calAll(books,ele -> ((String)ele).contains("瘋狂")));        //統計書名字符串長度大于10的圖書數量.輸出: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()類方法創建該Stream對應的Builder。

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

3.調用Builder的build()方法獲取相應的Stream。

4.調用Stream的聚集方法。

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

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

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

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

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

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

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

Stream常用的中間方法:

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

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

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

distinct():該方法用于排序流中所用重復的元素(判斷元素重復的標準是使用equals()方法比較返回true)。這是一個有狀態的方法。

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

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

常用的末端方法:

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

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

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

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

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

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

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應用開發"));        books.add(new String("瘋狂java講義"));        books.add(new String("瘋狂IOS講義"));        books.add(new String("瘋狂Ajax講義"));        books.add(new String("瘋狂android講義"));        //統計書中包含“瘋狂”子串的圖書數量        //輸出:4        System.out.println(books.stream()                .filter(ele -> ((String)ele).contains("瘋狂"))                .count());        //統計書名中包含“java”子串的圖書數量        //輸出:2        System.out.println(books.stream()                .filter(ele -> ((String)ele).contains("java"))                .count());        //統計圖書中字符串長度大于10的圖書數量        //輸出:2        System.out.println(books.stream()                .filter(ele -> ((String)ele).length() > 10)                .count());        /*先調用Collection對象的stream方法將集合轉換為Stream         * 再調用Stream中的mapToXxx()方法,進行轉換         */        books.stream().mapToInt(ele -> ((String)ele).length())                //用forEach方法遍歷IntStream中每個元素                //輸出:8 8 7 11 11                .forEach(System.out::println);    }}

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 柳江县| 永康市| 南华县| 威信县| 景谷| 翁牛特旗| 石棉县| 宣恩县| 安图县| 峨山| 舞阳县| 和林格尔县| 体育| 利津县| 泽州县| 包头市| 建阳市| 蕲春县| 宜良县| 镇安县| 渭源县| 永昌县| 雷州市| 永德县| 敦煌市| 沐川县| 双牌县| 灌南县| 天水市| 武功县| 金乡县| 武乡县| 定陶县| 乌兰县| 南汇区| 黔江区| 金川县| 额敏县| 克什克腾旗| 海门市| 水富县|