Java 集合 Collection介紹及常用方式
單列集合體系結(jié)構(gòu)
注意:
List系列集合添加的元素是有序(存取數(shù)據(jù)的順序相同),可重復(fù),有索引的
Set系列集合 添加的元素是無(wú)序,不能重復(fù),無(wú)索引的
Collection介紹
Collection是單列集合的祖宗接口,它的功能是全部單列集合都可以繼承使用的。
常用方法
方法名稱 | 說(shuō)明 |
public boolean add(E e) | 把給定的對(duì)象添加到當(dāng)前集合中 |
public void clear() | 清空集合中所有的元素 |
public boolean remove(E e) | 把給定的對(duì)象在當(dāng)前集合中刪除 |
public boolean contains(0bject obj) | 判斷當(dāng)前集合中是否包含給定的對(duì)象 |
public boolean isEmpty() | 判斷當(dāng)前集合是否為空 |
public int size() | 返回集合中元素的個(gè)數(shù)/集合的長(zhǎng)度 |
代碼演示:
import java.util.ArrayList; import java.util.Collection; public class Test1 { public static void main(String[] args) { //Collection是一個(gè)接口,我們不能直接創(chuàng)建他的對(duì)象。 //所以,現(xiàn)在我們學(xué)習(xí)他的方法時(shí),只能創(chuàng)建他實(shí)現(xiàn)類的對(duì)象。 //實(shí)現(xiàn)類:ArrayList Collection<String> coll = new ArrayList<>(); //把給定的對(duì)象添加到當(dāng)前集合中 coll.add("aaa"); coll.add("bbb"); System.out.println(coll);//[aaa, bbb] //把給定的對(duì)象在當(dāng)前集合中刪除 coll.remove("aaa"); System.out.println(coll);//[bbb] //返回集合中元素的個(gè)數(shù)/集合的長(zhǎng)度 System.out.println(coll.size());//1 //判斷當(dāng)前集合是否為空 System.out.println(coll.isEmpty());//false //清空集合中所有的元素 coll.clear(); System.out.println(coll);//[] System.out.println(coll.isEmpty());//true //判斷當(dāng)前集合中是否包含給定的對(duì)象 coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); System.out.println(coll);//[aaa, bbb, ccc] System.out.println(coll.contains("bbb"));//true System.out.println(coll.contains("ddd"));//false } }
注意:
contains方法在底層依賴equals方法判斷對(duì)象是否一致
如果存的是自定義對(duì)象,沒(méi)有重寫equals方法,那么默認(rèn)使用Object類中的equals方法進(jìn)行判斷,而object類中equals方法判斷的是地址值是否相同,要想判斷自定義對(duì)象中的內(nèi)容是否相同,需要在自定義的Javabean類中,重寫equals方法
舉例:如果同姓名和同年齡,就認(rèn)為是同一個(gè)學(xué)生。
代碼實(shí)現(xiàn):
測(cè)試類:
import java.util.ArrayList; import java.util.Collection; public class Test { public static void main(String[] args) { //舉例:如果同姓名和同年齡,就認(rèn)為是同一個(gè)學(xué)生。 Collection<Student> coll = new ArrayList<>(); Student s1 = new Student("zhangsan", 23); coll.add(s1); Student s2 = new Student("zhangsan", 23); Student s3 = new Student("lisi", 24); /* //重寫equals方法前比較的是自定義對(duì)象的地址值 //s2和s3是新new出來(lái)的,與s1的地址都不同,所以都是false System.out.println(coll.contains(s2));//false System.out.println(coll.contains(s3));//false*/ //重寫equals方法后,比較的是自定義對(duì)象內(nèi)的屬性值 System.out.println(coll.contains(s2));//true System.out.println(coll.contains(s3));//false } }
自定義對(duì)象的Javabean類:
import java.util.Objects; public class Student { private String name; private int age; public Student() { } public Student(String name, int age) { 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; } //重寫equals方法 @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; Student student = (Student) o; return age == student.age && Objects.equals(name, student.name); } }
Collection的遍歷方式
迭代器遍歷
說(shuō)明
迭代器在Java中的類是Iterator,迭代器是集合專用的遍歷方式,不依賴索引進(jìn)行遍歷。
Collection集合獲取迭代器
方法名稱 | 說(shuō)明 |
Iterator<E> iterator () | 返回迭代器對(duì)象 默認(rèn)指向當(dāng)前集合的0索引 |
Iterator中的常用方法
方法名稱 | 說(shuō)明 |
boolean hasNext() | 判斷當(dāng)前位置是否有元素, 有元素返回true,沒(méi)有元素返回false |
E next () | 獲取當(dāng)前位置的元素 并將迭代器對(duì)象移向下一個(gè)位置。 |
void remove () | 刪除獲取到的元素 |
代碼演示
import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Test2 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); Iterator<String> it = coll.iterator(); while (it.hasNext()) { String str = it.next(); System.out.println(str); } //aaa //bbb //ccc } }
細(xì)節(jié)注意點(diǎn)
1,迭代器遍歷完畢,指針不會(huì)復(fù)位,重新遍歷該集合時(shí)需要重新獲取該集合的迭代器對(duì)象
2,循環(huán)中只能用一次next方法,否則前一個(gè)next方法將迭代器對(duì)象移向下一個(gè)位置時(shí)該位置沒(méi)有元素,后一個(gè)next方法獲取不到元素就會(huì)報(bào)錯(cuò)(NoSuchElementException)
3,迭代器遍歷時(shí),不能用集合的方法進(jìn)行增加或者刪除,可以用迭代器的方法進(jìn)行刪除
增強(qiáng)for遍歷
說(shuō)明
增強(qiáng)for的底層就是迭代器,為了簡(jiǎn)化迭代器的代碼書寫的。
它是JDK5之后出現(xiàn)的,其內(nèi)部原理就是一個(gè)Iterator迭代器
所有的單列集合和數(shù)組都能用增強(qiáng)for進(jìn)行遍歷。
格式
for (元素的數(shù)據(jù)類型 變量名 :數(shù)組或者集合){
具體代碼;
}
代碼演示
import java.util.ArrayList; import java.util.Collection; public class Test3 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); for (String s : coll) { System.out.println(s); } //aaa //bbb //ccc } }
細(xì)節(jié)注意點(diǎn)
上述代碼中的s是一個(gè)第三方變量,依次代表集合中的每一個(gè)數(shù)據(jù)
對(duì)s進(jìn)行操作不會(huì)影響集合中的數(shù)據(jù)
Lambda表達(dá)式遍歷
說(shuō)明
得益于JDK 8開始的新技術(shù)Lambda表達(dá)式,提供了一種更簡(jiǎn)單、更直接的遍歷集合的方式。
方法
方法名稱 | 說(shuō)明 |
default void forEach(Consumer<? super T> action): | 結(jié)合lambda遍歷集合 |
代碼演示
import java.util.ArrayList; import java.util.Collection; import java.util.function.Consumer; public class Test4 { public static void main(String[] args) { Collection<String> coll = new ArrayList<>(); coll.add("aaa"); coll.add("bbb"); coll.add("ccc"); //匿名內(nèi)部類 coll.forEach(new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } }); //lambda表達(dá)式 coll.forEach(s -> System.out.println(s)); //aaa //bbb //ccc } }
到此這篇關(guān)于Java 集合 Collection的文章就介紹到這了,更多相關(guān)Java 集合 Collection內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
關(guān)于Jackson的JSON工具類封裝 JsonUtils用法
這篇文章主要介紹了關(guān)于Jackson的JSON工具類封裝 JsonUtils用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09IntelliJ IDEA 安裝 Grep Console插件 自定義控制臺(tái)輸出多顏色格式功能
由于Intellij idea不支持顯示ascii顏色,grep-console插件能很好的解決這個(gè)問(wèn)題,下面就以開發(fā)JavaEE項(xiàng)目中,結(jié)合Log4j配置多顏色日志輸出功能,感興趣的朋友一起看看吧2020-05-05從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署的過(guò)程
這篇文章主要介紹了從0到1構(gòu)建springboot web應(yīng)用鏡像并使用容器部署,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03IDEA快速搭建Java開發(fā)環(huán)境的教程圖解
這篇文章主要介紹了IDEA如何快速搭建Java開發(fā)環(huán)境,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11JAVA String.valueOf()方法的用法說(shuō)明
這篇文章主要介紹了JAVA String.valueOf()方法的用法說(shuō)明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-09-09java使用poi讀取excel內(nèi)容方法實(shí)例
本文介紹java使用poi讀取excel內(nèi)容的實(shí)例,大家參考使用吧2014-01-01springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑
這篇文章主要介紹了springboot實(shí)現(xiàn)指定mybatis中mapper文件掃描路徑方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-06-06idea打包java可執(zhí)行jar包的實(shí)現(xiàn)步驟
這篇文章主要介紹了idea打包java可執(zhí)行jar包的實(shí)現(xiàn)步驟,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-12-12