棟哥帶你學Java集合與迭代器
阿新 • • 發佈:2019-02-13
Java中的集合
為什麼會有集合?
因為陣列有弊端,所有才有了集合.
陣列的特點是什麼?
首先,陣列中只能新增相同型別的元素(基本資料型別和引用資料型別都能儲存),而且陣列的長度一旦確定就不能該改變,
如果要新增超出陣列長度個數的元素,就只能再宣告一個新的陣列,將原陣列中的元素儲存進去,然後再存要新增的新元素.這樣一
來,操作就比較複雜.
那麼集合都有哪些特點呢?
集合的出現是因為陣列有弊端,那麼反過來想,集合就沒有陣列的弊端.在集合中
能新增不同型別的元素,但是要注意,
集合中只能新增引用資料型別(只能新增物件型別),並且集合的長度長度可以變.
java中的集合就是Collection.今天先說ArrayList.
集合不能直接建立物件,因為它是一個介面,那我我們使用集合的時候就只能多型建立了.
Collection<E> collection1 = new ArrayList<>();
剛建立好的是長這樣,我們先把Collection後面的<E>和ArrayList後面的<>刪除先,因為這涉及到泛型,什麼是泛型後面的部落格會單獨講.
改完後的樣子
⬇️
Collection collection = new ArrayList();
(一)
/**
* 集合的基本方法
*/
public static void fun1() {
// 建立一個集合 多型的宣告方法
Collection collection = new ArrayList();
// 新增方法
// 什麼時候會 新增失敗?
// ArrayList中的add 不可能會返回 失敗
boolean b1 = collection.add("a");
boolean b2 = collection.add("b");
boolean b3 = collection.add("c");
// 當你向集合當中新增基本資料型別的時候
// 系統會幫你進行自動裝箱把基本資料型別變成它的包之類的物件
boolean b4 = collection.add(10);
boolean b5 = collection.add(true);
// 列印集合
System.out.println(collection.toString());
// 獲取集合的長度
int size = collection.size();
System.out.println(size);
// 判斷是否包含某個元素
boolean b7 = collection.contains('c');
System.out.println(b7);
// 從集合中刪除一個元素
boolean b8 = collection.remove("c");
System.out.println(b8);
// 操作的是 原集合(集合本身)
System.out.println(collection);
// 判斷集合 是否為空
boolean b9 = collection.isEmpty();
System.out.println(b9);
// 清空陣列
collection.clear();
System.out.println(collection);
}
(二)
/**
* 遍歷集合
*/
public static void fun2() {
Collection collection = new ArrayList();
// 新增a b c d
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
Object[] array = collection.toArray();
for (int i = 0; i < array.length; i++) {
System.out.println(array[i]);
}
}
(三)
/*
* 建立一個集合
* 儲存三個學生
* 遍歷列印學生的姓名(只打印姓名)
*/
public static void fun3() {
Collection collection = new ArrayList();
Student student1 = new Student("張三", 18);
Student student2 = new Student("李四", 17);
Student student3 = new Student("王五", 16);
collection.add(student1);
collection.add(student2);
collection.add(student3);
// 集合轉陣列(相當於有一個向上轉型)
// 物件調方法 強轉註意: 把陣列中每一個物件進行強轉
// 而不是把儲存物件的容器(陣列)轉化
// Student[] array = (Student[])collection.toArray();這種寫法是錯的
Object[] array = collection.toArray();
for (int j = 0; j < array.length; j++) {
// array[i]直接從陣列中取出來 是Object型別
// 要想使用 Student類中的方法 需要強轉 向下轉型
// 必須是這個型別 你才能強轉
Student student = (Student)array[j];
System.out.println(student.getName());
}
}
(四)
// addAll方法
Collection collection = new ArrayList();
collection.add("ygs");
collection.add("sxm");
collection.add("dp");
//addAll是把前一個集合的東西 都放進這個數組裡
Collection collection2 = new ArrayList();
collection2.add("y");
collection2.add("s");
collection2.add("d");
collection2.addAll(collection);
//給集合collection2 新增一個元素 這個元素是 collection
collection2.add(collection);
//列印結果 [y, s, d, ygs, sxm, dp, [ygs, sxm, dp]]
System.out.println(collection);
System.out.println(collection2);
(五)
//containsAll 就是 前一個集合的元素和這個元素都一樣就返回true
Collection collection3 = new ArrayList();
collection3.add("ygs");
collection3.add("sxm");
collection3.add("dp");
boolean containsAll = collection3.containsAll(collection);
System.out.println(containsAll);
(六)
//removeAll
//這個方法 將兩個集合的重合元素刪除
//誰呼叫這個方法 就刪除 誰的元素 另一個集合 不變
//只刪除交集 重複也可以刪
Collection collection4 = new ArrayList();
collection4.add("ygs");
collection4.add("sxm");
collection4.add("dp");
collection4.add("wl");
collection4.removeAll(collection);
System.out.println(collection4);
(七)
//retainAll
// 把兩個集合的交集取出來 儲存在collection5中(誰調方法儲存在誰那)
// 如果collection 和 collection5 求出交集 放到 collection5中
// 如果collection5和原來對比 發生變化 返回 true
// 不發生變化 返回false
Collection collection5 = new ArrayList();
collection5.add("ygs");
collection5.add("sxm");
collection5.add("dp");
collection5.add("wl");
boolean retainAll = collection5.retainAll(collection);
System.out.println(collection5);
System.out.println(retainAll);
Collection裡的迭代器
迭代器是一個物件,用來遍歷集合裡的元素.
(一)
/**
* 測試迭代器中的方法
*/
public static void fun1() {
Collection collection = new ArrayList();
collection.add("a");
collection.add("b");
collection.add("c");
collection.add("d");
// 獲取集合中的迭代器
Iterator iterator = collection.iterator();
// 先判斷集合中是否有元素
boolean isHasNext = iterator.hasNext();
System.out.println(isHasNext);
// 從集合中取出元素
Object next = iterator.next();
System.out.println(next);
}
(二)
/**
* 遍歷集合
*/
public static void fun2() {
Collection collection = new ArrayList();
// 迭代時 相當於有一個指標 指向首位置
// 每呼叫一次 next方法 這個指標向下移一格
collection.add("a");// ←
collection.add("b");//
collection.add("c");//
collection.add("d");//
// 遍歷集合
Iterator iterator = collection.iterator();
// 如果有元素 就獲取 沒元素 就停止迴圈
while (iterator.hasNext()) {
// 注意:迭代時 迴圈 只能使用一次next()方法
System.out.println(iterator.next());
}
}
(三)
/*
* 需求:
* 建立一個集合
* 儲存三學生
* 使用迭代器遍歷 列印學生姓名
*/
public static void fun3() {
Collection collection = new ArrayList();
collection.add(new Student("張三", 18));
collection.add(new Student("李四", 17));
collection.add(new Student("王五", 16));
// 獲取集合中迭代器
Iterator i = collection.iterator();
// 迴圈獲取物件
while (i.hasNext()) {
// 獲取元素 把Object型別轉成Student型別
Student student = (Student) i.next();
// 列印姓名
System.out.println(student.getName());
}
}