Java 集合 Collection介紹及常用方式
單列集合體系結(jié)構(gòu)

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

