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

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

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


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美日韩在线第一页| 亚洲欧美日韩第一区| 夜夜嗨av一区二区三区四区| 美女av一区二区| 成人免费视频网址| 91tv亚洲精品香蕉国产一区7ujn| 亚洲欧洲在线免费| 久久久av一区| 色偷偷av一区二区三区乱| 狠狠躁夜夜躁久久躁别揉| 欧美片一区二区三区| 欧美大胆在线视频| 欧美精品精品精品精品免费| 欧美黑人一级爽快片淫片高清| 亚洲精品视频播放| 欧美成人精品在线播放| 国产亚洲日本欧美韩国| 精品亚洲一区二区三区在线观看| 欧美一级成年大片在线观看| 国产亚洲视频在线| 亚洲国产精品美女| 亚洲男人av电影| 国产激情视频一区| 国产精品久久一区主播| 日韩精品免费视频| 国产精品久久久久9999| 亚洲深夜福利视频| 精品动漫一区二区| 久久91精品国产91久久跳| 国产精品r级在线| 最近更新的2019中文字幕| 欧美大胆a视频| 日韩精品久久久久久福利| 国产精品欧美日韩| 亚洲女人被黑人巨大进入| 国产91精品久久久久久久| 97视频在线观看免费| 日韩av综合网站| 日韩精品高清视频| 91久久久久久久| 成人午夜激情网| 久久精品成人欧美大片古装| 91福利视频在线观看| 午夜精品久久久久久久久久久久久| 日本一区二区不卡| 丝袜亚洲欧美日韩综合| 国产亚洲精品久久久| 亚洲欧洲日产国码av系列天堂| 日韩精品高清在线观看| 九九视频这里只有精品| 亚洲国产精品va| 最近的2019中文字幕免费一页| 日韩美女免费视频| 欧美激情亚洲激情| 亚洲黄色在线观看| 深夜成人在线观看| 国产精品美女av| 久久免费国产精品1| 欧美黑人又粗大| 亚洲欧美中文字幕在线一区| 国产精品亚洲精品| 午夜精品福利电影| 中文字幕一精品亚洲无线一区| 日韩av综合网站| 久久精品视频网站| 日韩日本欧美亚洲| 欧美激情在线视频二区| 国产福利精品在线| 国产成人一区二区在线| 亚洲精品中文字幕av| 国产精品第一第二| 久久夜色精品亚洲噜噜国产mv| 日韩精品在线免费播放| 亚洲视频专区在线| 日韩久久精品成人| 97超级碰碰人国产在线观看| 国产精品大陆在线观看| 1769国内精品视频在线播放| 精品亚洲一区二区三区四区五区| 国产精品成人av性教育| 国产亚洲精品一区二555| 亚洲最新av在线| 精品久久久久久亚洲国产300| 国产精品视频一区国模私拍| yellow中文字幕久久| 亚洲国产精品资源| 亚洲最大福利网站| 国产精品爽爽爽| 日韩免费观看高清| 国产欧美日韩中文| 欧美日韩精品国产| 亚洲美女精品成人在线视频| 欧美国产极速在线| 欧美精品videofree1080p| 亚洲经典中文字幕| 97视频在线播放| 红桃视频成人在线观看| 国产一区二区三区日韩欧美| 国产精品扒开腿做爽爽爽男男| 97人洗澡人人免费公开视频碰碰碰| 久久成人av网站| 一本一本久久a久久精品综合小说| 欧美日韩国产精品一区二区三区四区| 亚洲一区二区三区四区在线播放| 蜜月aⅴ免费一区二区三区| 精品国产一区二区三区久久狼5月| 日韩小视频网址| 国产色视频一区| 亚洲黄色片网站| 欧美精品一区二区免费| 国产精品入口免费视| 亚洲欧美日韩精品久久奇米色影视| 亚洲欧美中文日韩在线| 国产精品欧美日韩久久| 国产精品久久中文| 综合久久五月天| 日韩av在线影院| 欧美成人免费观看| 91精品视频大全| 91极品女神在线| 成人精品网站在线观看| 日韩av第一页| 国产成人拍精品视频午夜网站| 亚洲男人天堂2019| www.国产一区| www国产精品com| 亚洲成色999久久网站| 亚洲大胆美女视频| 欧美激情国产高清| 亚洲国产欧美在线成人app| 欧美在线观看www| 欧美成人黄色小视频| 欧美亚洲国产另类| 日本高清+成人网在线观看| 亚洲一区二区自拍| 成人性生交大片免费看视频直播| 日本高清不卡在线| 亚洲黄色片网站| 亚洲欧洲中文天堂| www.国产精品一二区| 久久伊人91精品综合网站| 国产在线久久久| 中文字幕日韩av电影| 成人午夜在线视频一区| 国产一区二区美女视频| 久久久视频精品| 国产啪精品视频网站| 亚洲第一视频网站| 久久久久久美女| 日韩在线播放视频| 2021国产精品视频| 一区二区亚洲欧洲国产日韩| 国产精品一区二区电影| 综合国产在线观看| 亚洲色图第一页| 日本中文字幕不卡免费| 伊人伊人伊人久久| 俺去啦;欧美日韩| 懂色av一区二区三区| 中日韩午夜理伦电影免费| 欧美成人精品在线| 国产精品入口日韩视频大尺度| 91精品久久久久久综合乱菊| 91av在线免费观看|