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