Java基礎之:集合——Collection
為什么要引入集合的概念?
因為我們在使用陣列時,不方便動態的擴容縮容,而集合很好的解決了這個問題,當然這只是集合強大功能中的一部分,
集合的分類

Collection
首先,學習單列集合Collection,我們先了解什么是單列,什么是雙列,
單列:只有一列資料組成,類似一維陣列,
雙列:由兩列資料組成,一串列示鍵,一串列示值,類似二維陣列,
Collection是一個介面,public interface Collection<E> extends Iterable<E>
對于Collection的實作類而言,有些是有序(List)的,有些是無序(Set)的,(這里的有序與無序指的是,輸出資料時是否按照輸入時的順序)
Set與List是繼承于Collection介面的兩個子介面,可以通過它們來實作Collection,
List是允許有重復元素的,Set是不允許有重復元素的,
Collection常用方法
在Collection介面中的方法,在List與Set中也能夠使用,所以比較重要,
-
add:添加單個元素
-
remove:洗掉指定元素
-
contains:查找元素是否存在
-
size:獲取元素個數
-
isEmpty:判斷是否為空
-
addAll:添加多個元素
-
containsAll:查找多個元素是否都存在
-
removeAll:洗掉多個元素
-
clear:清空
package class_collection;
import java.util.ArrayList;
import java.util.Collection;
public class ClassTest01_CollectionMethods {
?
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
?
//Collection的子介面List的實作類ArrayList,使用多型的特性,
//此時col編譯型別為Collection,運行型別為ArrayList,所以只能訪問Collection中的方法,
Collection col = new ArrayList();
//add:添加單個元素
col.add("Hello" + "01");
col.add("Hello" + "02");
col.add("Hello" + "03");
col.add("Hello" + "04");
System.out.println(col);
//remove:洗掉指定元素
col.remove("Hello02");
System.out.println(col);
//contains:查找元素是否存在
col.contains("Hello01"); //true
//size:獲取元素個數
col.size(); // 3
?
//isEmpty:判斷是否為空
col.isEmpty(); //false
//addAll:添加多個元素,引數為Collection型別,即實作了Collection介面的集合,
col.addAll(col); //此效果等同于將col復制一份加入原來的col集合中
System.out.println(col);
//containsAll:查找多個元素是否都存在,引數為Collection型別
col.containsAll(col); //true
//removeAll:洗掉多個元素,引數為Collection型別
col.removeAll(col); //效果等同于清空集合
System.out.println(col);
?
//clear:清空
col.clear();
System.out.println(col);
}
}
?
Collection遍歷方式
Collection介面可以使用兩種方法遍歷集合,使用Iterator迭代器 或者 使用增強for回圈,
Iterator迭代器遍歷
Iterator物件稱為迭代器(設計模式的一種),主要用于遍歷Collection集合中的元素,
Collection介面中有iterator()方法,用以回傳一個Iterator介面的物件,即可以回傳一個迭代器,(Collection中有此方法,那么所有實作Collection介面的類也可以使用)
Iterator僅用于遍歷集合,Iterator本身并不提供承載物件的能力(它是一個介面),如果需要創建Iterator物件,則必須要有一個需要被迭代的集合,
迭代器執行原理:
-
創建迭代器 Iterator iterator = col.iterator();
-
使用hasNext()方法判斷是否還有下一個元素:iterator.hasNext(); //T or F
-
使用next()方法將指標下移并回傳下移后指標指向的元素:System.out.println(iterator.next());
-
在使用迭代器遍歷完一次集合后,一定要重置迭代器,否則迭代器將一直指向最后一個元素,就不能進行下一次遍歷,
package class_collection;
?
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
?
public class ClassTest02_ForeachCollection {
?
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
Collection col = new ArrayList();
col.add("Hello" + "01");
col.add("Hello" + "02");
col.add(new Book("三體1", 30.4));
col.add(new Book("三體2", 33.4));
col.add(new Book("三體3", 31.4));
/*
* Iterator 核心方法 hasNext() next()
* 通常遍歷使用while
*/
Iterator iterator = col.iterator();
System.out.println(iterator.getClass());//iterator運行型別java.util.ArrayList$Itr
while(iterator.hasNext()) { //首先判斷是否還有下一個元素
System.out.println(iterator.next());
//直接輸出元素內容,如果是自定義類,需要重新toString
}
//在使用迭代器遍歷完一次集合后,一定要重置迭代器,否則迭代器將一直指向最后一個元素,就不能進行下一次遍歷
iterator = col.iterator();
}
}
?
class Book{
private String name;
private double price;
public Book(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
}
增強for回圈遍歷
jdk5.0出現了增強for回圈,可以代替iterator迭代器,特點:增強for就是簡化版的iterator,本質一樣,只能用于遍歷集合或陣列,
基本語法:
for(元素型別 元素名 : 集合名或陣列名) {
訪問元素
}
package class_collection;
?
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
?
public class ClassTest02_ForeachCollection {
?
@SuppressWarnings({ "rawtypes", "unchecked" })
public static void main(String[] args) {
Collection col = new ArrayList();
col.add("Hello" + "01");
col.add("Hello" + "02");
col.add(new Book("三體1", 30.4));
col.add(new Book("三體2", 33.4));
col.add(new Book("三體3", 31.4));
/*
增強for回圈本質上,還是使用Iterator迭代器,
只不過是提供的一種更加方便的形式,
*/
//Debug看原始碼
for(Object obj : col) {
System.out.println(obj);
}
}
?
class Book{
private String name;
private double price;
public Book(String name, double price) {
super();
this.name = name;
this.price = price;
}
@Override
public String toString() {
return "Book [name=" + name + ", price=" + price + "]";
}
}
Collection練習
創建 3個 Dog {name, age} 物件,放入到 ArrayList 中,賦給 List 參考
用迭代器和增強for回圈兩種方式來遍歷
重寫Dog 的toString方法, 輸出name和age
import java.util.List;
import java.util.ArrayList;
import java.util.Iterator;
?
public class ClassWork01 {
?
@SuppressWarnings({ "unused", "rawtypes", "unchecked" })
public static void main(String[] args) {
List list = new ArrayList();
list.add(new Dog("小白",3));
list.add(new Dog("小花",8));
list.add(new Dog("小黑",6));
//迭代器
Iterator ite = list.iterator();
while(ite.hasNext()) {
System.out.println(ite.next()); //next()取出集合中的下一個物件,默認呼叫toString
}
// ite = list.iterator(); //使用迭代器,在遍歷完之后,一定要重置,因為索引已經走到了最后,
//未重置迭代器,此回圈無輸出
while(ite.hasNext()) {
System.out.println(ite.next());
}
?
System.out.println("=======================");
//增強for回圈
for(Object obj:list) {
System.out.println(obj); //編譯型別為Object,動態系結到Dog
}
}
}
?
class Dog{
private String name;
private int age;
public Dog(String name, int age) {
super();
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;
}
@Override
public String toString() {
return "Dog [name=" + name + ", age=" + age + "]";
}
}
程式輸出
Dog [name=小白, age=3]
Dog [name=小花, age=8]
Dog [name=小黑, age=6]
==========================
Dog [name=小白, age=3]
Dog [name=小花, age=8]
Dog [name=小黑, age=6]
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/240340.html
標籤:Java
