1. 程式人生 > >棟哥帶你學Java集合與迭代器

棟哥帶你學Java集合與迭代器

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());
    }
}