Java集合Collection與List實例詳解
一、集合概述和分類
1.1 集合的分類
同學們,前面我們已經(jīng)學習過了ArrayList集合,它是一種容器,用來裝數(shù)據(jù)的,類似于數(shù)組,但集合的大小可變,開發(fā)中也非常常用。為了滿足不同的業(yè)務場景需求,除了ArrayList集合以外,Java還提供了很多種其他的集合,如下圖所示:

我想你的第一感覺是這些集合好多呀!但是,我們學習時會對這些集合進行分類學習,如下圖所示:一類是單列集合元素是一個一個的,另一類是雙列集合元素是一對一對的。

在今天的課程中,主要學習Collection單列集合。Collection是單列集合的根接口,也稱之為頂層接口,Collection接口下面又有兩個子接口List接口、Set接口,List和Set下面分別有不同的實現(xiàn)類,如下圖所示:

上圖中各種集合的特點如下圖所示:

可以自己寫代碼驗證一下,各種集合的特點
public class CollectionTest1 {
public static void main(String[] args) {
// 簡單確認一下Collection集合的特點
Collection<String> list1 = new ArrayList<>(); //存取順序一致,可以重復,有索引
list1.add("java1");
list1.add("java2");
list1.add("java1");
list1.add("java2");
System.out.println(list1); //[java1, java2, java1, java2]
?
Collection<String> list2 = new HashSet<>(); //存取順序不一致,不重復,無索引
list2.add("java1");
list2.add("java2");
list2.add("java1");
list2.add("java2");
list2.add("java3");
System.out.println(list2); //[java3, java2, java1]
}
}總結:
1. 單列集合的代表是誰?雙列集合的代表是誰?
Collection、Map?
2. Collection集合有哪兩大常用的集合體系,各自有啥特點?
List系列集合:添加的元素是有序、可重復、有索引。
Set系列集合:添加的元素是無序、不重復、無索引。
1.2 Collection集合的常用方法
接下來,我們學習一下Collection集合的一些常用方法,這些方法所有Collection實現(xiàn)類都可以使用。 這里我們以創(chuàng)建ArrayList為例,來演示
public class CollectionTest2 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
// 添加元素到集合
c.add("java1");
c.add("java1");
c.add("java2");
c.add("java2");
c.add("java3");
System.out.println(c); //打印: [java1, java1, java2, java2, java3]
?
// 獲取集合的大小
System.out.println(c.size()); //5
?
// 判斷集合中是否包含某個元素
System.out.println(c.contains("java1")); //true
System.out.println(c.contains("Java1")); //false
?
// 刪除某個元素,如果有多個重復元素只能刪除第一個
System.out.println(c.remove("java1")); //true
System.out.println(c); //打印: [java1,java2, java2, java3]
?
// 清空集合的元素
c.clear();
System.out.println(c); //打?。篬]
?
// 判斷集合是否為空 是空返回true 反之返回false
System.out.println(c.isEmpty()); //true
?
// 把集合轉換為數(shù)組
Object[] array = c.toArray();
System.out.println(Arrays.toString(array)); //[java1,java2, java2, java3]
?
// 如果想把集合轉換為指定類型的數(shù)組,可以使用下面的代碼
String[] array1 = c.toArray(new String[c.size()]);
System.out.println(Arrays.toString(array1)); //[java1,java2, java2, java3]
?
// 還可以把一個集合中的元素,添加到另一個集合中
Collection<String> c1 = new ArrayList<>();
c1.add("java1");
c1.add("java2");
Collection<String> c2 = new ArrayList<>();
c2.add("java3");
c2.add("java4");
c1.addAll(c2); //把c2集合中的全部元素,添加到c1集合中去
System.out.println(c1); //[java1, java2, java3, java4]
}
}最后,我們總結一下Collection集合的常用功能有哪些,ArrayList、LinkedList、HashSet、LinkedHashSet、TreeSet集合都可以調用下面的方法。

二、Collection遍歷方式
各位同學,接下來我們學習一下Collection集合的遍歷方式。有同學說:“集合的遍歷之前不是學過嗎?就用普通的for循環(huán)啊? “ 沒錯!之前是學過集合遍歷,但是之前學習過的遍歷方式,只能遍歷List集合,不能遍歷Set集合,因為以前的普通for循環(huán)遍歷需要索引,只有List集合有索引,而Set集合沒有索引。
所以我們需要有一種通用的遍歷方式,能夠遍歷所有集合。
2.1 迭代器遍歷集合
接下來學習的迭代器就是一種集合的通用遍歷方式。就是用來遍歷集合的專用方式(數(shù)組沒有迭代器),在Java中迭代器的代表是Iterator。
代碼寫法如下:
public class CollectionTest3 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("趙敏");
c.add("小昭");
c.add("素素");
c.add("滅絕");
System.out.println(c); // [趙敏, 小昭, 素素, 滅絕]
?
// 第一步:先獲取迭代器對象
// 解釋:Iterator就是迭代器對象,用于遍歷集合的工具
Iterator<String> it = c.iterator();
?
// 第二步:判斷當前位置是否有元素可以獲取
// 解釋:hasNext()方法返回true,說明有元素可以獲??;反之沒有
while(it.hasNext()){
// 第三步:獲取當前位置的元素,然后自動指向下一個元素.
String e = it.next();
System.out.println(e);
}
}
}迭代器代碼的原理如下:
- 當調用iterator()方法獲取迭代器時,當前指向第一個元素
- hasNext()方法則判斷這個位置是否有元素,如果有則返回true,進入循環(huán)
- 調用next()方法獲取元素,并將當前元素指向下一個位置,
- 等下次循環(huán)時,則獲取下一個元素,依此內推

最后,我們再總結一下,使用迭代器遍歷集合用到哪些方法

2.2 增強for遍歷集合
同學們剛才我們學習了迭代器遍歷集合,但是這個代碼其實還有一種更加簡化的寫法,叫做增強for循環(huán)。
格式如下:

需要注意的是,增強for不光可以遍歷集合,還可以遍歷數(shù)組。接下來我們用代碼演示一下:
public class CollectionTest4 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("趙敏");
c.add("小昭");
c.add("素素");
c.add("滅絕");
System.out.println(c); // [趙敏, 小昭, 素素, 滅絕]
?
// 1.使用增強for遍歷集合
for(String s: c){
System.out.println(s);
}
?
System.out.println("----------------------");
?
// 2.再嘗試使用增強for遍歷數(shù)組
String[] arr = {"迪麗熱巴", "古力娜扎", "稀奇哈哈"};
for(String name: arr){
System.out.println(name);
}
}
}2.3 forEach遍歷集合
在JDK8版本以后還提供了一個forEach方法也可以遍歷集合,如果下圖所示:

我們發(fā)現(xiàn)forEach方法的參數(shù)是一個Consumer接口,而Consumer是一個函數(shù)式接口,所以可以傳遞Lambda表達式
public class CollectionTest5 {
public static void main(String[] args) {
Collection<String> c = new ArrayList<>();
c.add("趙敏");
c.add("小昭");
c.add("素素");
c.add("滅絕");
System.out.println(c); // [趙敏, 小昭, 素素, 滅絕]
// 調用forEach方法
// 由于參數(shù)是一個Consumer接口,所以可以傳遞匿名內部類
c.forEach(new Consumer<String>() {
@Override
public void accept(String s) {
System.out.println(s);
}
});
System.out.println("---------------------");
?
// 也可以使用lambda表達式對匿名內部類進行簡化
c.forEach(s -> System.out.println(s)); // [趙敏, 小昭, 素素, 滅絕]
}
}2.4 遍歷集合案例
接下來,我們看一個案例,在集合中存儲自定義的對象,并遍歷。具體要求如下

首先,我們得寫一個電影類,用來描述每一步電影應該有哪些信息。
public class Movie{
private String name; // 電影名稱
private double score; // 評分
private String actor; // 演員
// 無參數(shù)構造方法
public Movie(){}
// 全參數(shù)構造方法
public Movie(String name, double score, String actor){
this.name=name;
this.score=score;
this.actor=actor;
}
//...get、set、toString()方法自己補上..
}接著,再創(chuàng)建一個測試類,完成上面的需求
public class CollectionDemo {
public static void main(String[] args) {
Collection<Movie> movies = new ArrayList<>();
movies.add(new Movie("《肖申克的救贖》", 9.7, "羅賓斯"));
movies.add(new Movie("《霸王別姬》", 9.6, "張國榮、張豐毅"));
movies.add(new Movie("《阿甘正傳》", 9.5, "湯姆漢克斯"));
for(Movie movie : movies){
System.out.println("電影名:" + movie.getName());
System.out.println("評分:" + movie.getScore());
System.out.println("主演:" + movie.getActor());
System.out.println("--------------------");
}
}
}以上代碼的內存原理如下圖所示:當往集合中存對象時,實際上存儲的是對象的地址值

總結:
1、如何獲取集合的迭代器對象?
Iterator<E> iterator():獲取集合對應的迭代器,用來遍歷集合中的元素的。
2、增強for可以遍歷哪些容器?
既可以遍歷集合也可以遍歷數(shù)組
3、增強for的關鍵是記住它的遍歷格式,它的具體格式是什么樣的?
for(元素的數(shù)據(jù)類型 變量名 : 數(shù)組或者集合){
// 在此處使用變量即可, 該變量就是元素
}
4、集合中存儲的是元素的什么信息?
集合中存儲的是元素對象的地址
到此這篇關于Java集合Collection與List實例詳解的文章就介紹到這了,更多相關Java集合Collection與List內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- java.util.Collections類—emptyList()方法的使用
- Java Collections.EMPTY_LIST與Collections.emptyList()的區(qū)別
- Java Collections的emptyList、EMPTY_LIST詳解與使用說明
- Java后臺通過Collections獲取list集合中最大數(shù),最小數(shù)代碼
- Java使用Collections工具類對List集合進行排序
- Java中Collection、List、Set、Map之間的關系總結
- Java?Collections.sort()實現(xiàn)List排序的默認方法和自定義方法
- JAVA對list集合進行排序Collections.sort()
- 用Java集合中的Collections.sort方法如何對list排序(兩種方法)
相關文章
詳解使用Spring Cloud Consul實現(xiàn)服務的注冊和發(fā)現(xiàn)
這篇文章主要介紹了詳解使用Spring Cloud Consul實現(xiàn)服務的注冊和發(fā)現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-06-06
SpringCloud Feign遠程調用實現(xiàn)詳解
Feign是Netflix公司開發(fā)的一個聲明式的REST調用客戶端; Ribbon負載均衡、 Hystrⅸ服務熔斷是我們Spring Cloud中進行微服務開發(fā)非常基礎的組件,在使用的過程中我們也發(fā)現(xiàn)它們一般都是同時出現(xiàn)的,而且配置也都非常相似2022-11-11
java利用udp實現(xiàn)發(fā)送數(shù)據(jù)
這篇文章主要為大家詳細介紹了java利用udp實現(xiàn)發(fā)送數(shù)據(jù),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下2020-07-07
Java如何獲取數(shù)組和字符串的長度(length還是length())
這篇文章主要介紹了Java如何獲取數(shù)組和字符串的長度(length還是length()),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-12-12

