1. 程式人生 > >【Java基礎15_1】Collection類及其基本用法

【Java基礎15_1】Collection類及其基本用法

Collection類->目錄

集合和陣列區別
  • 長度區別:
    • 陣列的長度是固定的而集合的長度是==可變==的
  • 儲存資料型別的區別:
    • 陣列可以儲存基本資料型別 , 也可以儲存引用資料型別;
    • 集合只能儲存引用資料型別
  • 內容區別:
    • 陣列只能儲存同種資料型別的元素 ,集合可以儲存==不同型別==的元素
1.體系結構圖

Collection體系結構圖

Collection常見API
  • 新增功能
方法宣告 作用
boolean add ( Object obj ) 新增一個元素
boolean addAll ( Collection c ) 新增一個集合的元素
  • 刪除功能
方法宣告 作用
void clear() 移除所有元素
boolean remove(Object o) 移除一個元素
boolean removeAll(Collection c) 移除一個集合的元素(一個)
  • 判斷功能
方法宣告 作用
boolean contains(Object o) 判斷集合中是否包含指定的元素
boolean containsAll(Collection c) 判斷集合中是否包含指定的集合元素(所有)
boolean isEmpty( ) 判斷集合是否為空
  • 獲取功能

    • 獲取當前集合的迭代器
方法宣告 作用
Iterator < E > iterator( ) 迭代器遍歷(重點)
  • 長度功能
方法宣告 作用
int size() 元素的個數
  • 交集功能

boolean retainAll ( Collection );

  • 把集合轉換為陣列

    Objec [ ] toArray()

面試題
  • 陣列有沒有 length() 方法呢?字串有沒有length()方法呢 ? 集合有沒有 length( ) 方法呢?
  • 答:陣列有 length 屬性;字串有length()方法;集合沒有 length( ),但是有size( )方法
獲取交集的注意事項
boolean retainAll ( Collection c )   
  • 獲取交集。獲取到的元素去c中,布林型別的值表示集合是否==發生改變==
  • 如果c.retainAll(c1), 獲取到的交集元素去了c中,布林型別的值表示c這個集合是否發生改變。如果改變了就返回true.
public class CollectionDemo1 {

    public static void main(String[] args) {

        //建立一個集合
        Collection<String> c1 = new ArrayList<>();

        Collection<String> c2 = new ArrayList<>();

        //新增元素
        c1.add("田馥甄");
        c1.add("銀臨");
        c1.add("謝春花");


        c2.add("謝春花");

        System.out.println("c1獲取交集前:"+c1);
        System.out.println("c2獲取交集前:"+c2);

        //獲取交集
        System.out.println("獲取交集後的集合是否發生改變:  "+c1.retainAll(c2));
        System.out.println("C1獲取交集後: "+c1);
        System.out.println("C2: "+c2);
    }
}

  • 程式執行結果:
    c1獲取交集前:[田馥甄, 銀臨, 謝春花]
    c2獲取交集前:[謝春花]
    獲取交集後的集合是否發生改變: true
    C1獲取交集後: [謝春花]
    C2: [謝春花]
集合的遍歷
  • 其實就是依次獲取集合中的每一個元素。有以下兩種方法:
1. 用陣列遍歷
  • 把集合轉成陣列
  • 通過遍歷陣列實現遍歷集合
    集合轉為陣列方法:
Object[] toArray():
import java.util.ArrayList;
import java.util.Collection;

/*
 * 用陣列遍歷集合
 */
public class CollectionTraversalArray {

    public static void main(String[] args) {

        //建立集合
        Collection<String> c = new ArrayList<String>();
        //新增元素
        c.add("周杰倫");
        c.add("朴樹");
        c.add("毛不易");

        //轉為陣列
        Object[] obj = c.toArray();

        //遍歷陣列
        for(Object ob:obj) {
            //向下轉型
            String str = (String)ob;
            System.out.print(str+"  ");
        }

    }

}
package com.itbull;

import java.util.ArrayList;
import java.util.Collection;

/*
 * 陣列遍歷法
 * Collection遍歷自定義型別Singer
 */
public class CollectionTraversalSinger {

    public static void main(String[] args) {

        //建立Singer
        Singer s1 = new Singer("周杰倫","晴天");
        Singer s2 = new Singer("樸  樹","白樺林");
        Singer s3 = new Singer("譚維維","如果有來生");

        // 建立集合
        Collection<Singer> c = new ArrayList<Singer>();

        c.add(s1);
        c.add(s2);
        c.add(s3);

    //轉為陣列
        Object[] arr = c.toArray();

    //遍歷陣列
        for(Object obj:arr) {
            Singer ob = (Singer) obj;
            System.out.println(ob.getName()+"-----"+ob.getSongName());
        }

    }

}
//自定義Singer類
public class Singer {
private String name;
private String songName;

public Singer() {
    super();
    // TODO Auto-generated constructor stub
}
public Singer(String name, String songName) {
    super();
    this.name = name;
    this.songName = songName;
}
public String getName() {
    return name;
}
public void setName(String name) {
    this.name = name;
}
public String getSongName() {
    return songName;
}
public void setSongName(String songName) {
    this.songName = songName;
}
@Override
public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ((name == null) ? 0 : name.hashCode());
    result = prime * result + ((songName == null) ? 0 : songName.hashCode());
    return result;
}

@Override
public String toString() {
    return "Singer [name=" + name + ", songName=" + songName + "]";
}


}
2. 用迭代器遍歷(重點)
  • Iterator 中有如下幾個方法可以用來獲取集合中的元素:
方法名 作用
boolean hasNext ( ) 判斷是否有下一個元素
Object next ( ) 獲取下一個元素
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 迭代器Iterator遍歷String
 */
public class CollectionTraversalIterator {

    public static void main(String[] args) {

        //建立集合
        Collection<String> c = new ArrayList<String>();

        //新增元素
        c.add("孫燕姿");
        c.add("金玟岐");
        c.add("范瑋琪");

        //獲取當前集合的迭代器物件
        Iterator<String> it = c.iterator();

        //如果有下一個,就獲取
        while(it.hasNext()) {       
            System.out.println(it.next());
        }


    }

}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;

/*
 * 用Iterator遍歷自定義物件Singer
 */
public class CollectionIteratorSinger {

    public static void main(String[] args) {

        //建立Singer物件
        Singer s1 = new Singer("迴音哥","海綿寶寶");
        Singer s2 = new Singer("雙   笙","葬花吟");
        Singer s3 = new Singer("玄   觴","不朽之罪");

        //建立集合物件
        Collection<Singer> c = new ArrayList<Singer>();
        //將自定義物件新增到集合中
        c.add(s1);
        c.add(s2);
        c.add(s3);

        //獲取集合的迭代器物件
        Iterator<Singer> it = c.iterator();

        System.out.println("\t\t歌手名字\t\t歌曲");
        //如果有下一個就獲取

        while (it.hasNext()) {
            Singer singer = it.next();
            System.out.println("\t\t"+singer.getName()+"\t\t"+singer.getSongName());
        }

    }

}