什麼是集合
由若幹元素構成的集合
學生構成了一個班級 若幹個班級構成了年級
父母親人構成了家庭 等等
數組和集合的差別
-
長度初始化後不可改變數組
-
隻能按索引順序存取數組
- 集合大小可以
任意改變
- 保證無重複元素的集合
- ...
Collection(除了Map之外的集合的老祖宗 是一個接口 在java.util包中)
java.util
包中提供了以下三種類型的集合
java.util
-
集合 一種有序清單的集合List
-
集合 一種保證沒有重複元素的集合Set
-
集合 一種通過鍵值(key-value)查找的映射表集合Map
List示例
package com.collection;
import org.junit.Test;
import java.util.*;
public class Demo01 {
public static void main(String[] args) {
List list1 = new ArrayList<>();
// 集合是否為空
System.out.println(list1.isEmpty());
// 添加集合元素
list1.add("wwbao");
list1.add("yyll");
list1.add(20);
list1.add(false);
list1.add(new Person("yyll", 22));
list1.add(new String("1314"));
System.out.println("==============size==========");
int size = list1.size();
System.out.println("==>Get size:" + size);
System.out.println("============contains============");
// contains 目前集合是否包含某個對象
System.out.println(list1.contains(20)); // true
/*
* 當對比自定義類時 實際上contains 比較的是對象的equals方法
* 如果沒有重寫equals方法 則調用的是Object類的equals方法
* equals方法比較的是 值!!!
* */
System.out.println(list1.contains(new Person("yyll", 22))); // true
System.out.println(list1.contains(new String("1314"))); // true
System.out.println("============contailsAll==========");
List list = Arrays.asList("wwbao", "yyll");
// 判斷list中所有元素是否存在于coll中
System.out.println(list1.containsAll(list));
System.out.println("=============周遊===========");
Iterator it = list.iterator();
// hasNext判斷是否有下一個元素 有傳回true 沒有傳回false
while (it.hasNext()) {
// next方法擷取元素
Object result = it.next();
System.out.println("==>Get result:" + result);
}
System.out.println("=============indexOf===========");
/*
* 清單中指定元素的第一次出現的索引
*
* 清單不包含元素,則傳回-1
* */
int index = list1.indexOf(111);
System.out.println("傳回indexOf的位置是:" + index);
System.out.println("=============remove===========");
System.out.println("删除前的list:" + list1);
Object remove = list1.remove(3);
System.out.println(remove);
System.out.println("删除後的list:" + list1);
System.out.println("=============toArray() ===========");
Object[] arrays = list1.toArray();
System.out.println(Arrays.toString(arrays));
}
}
Person
package com.collection;
public class Person {
private String name;
private int age;
public Person(String name, int age) {
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 "Person{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
@Override
public boolean equals(Object o) {
System.out.println("person的equals方法");
if (this == o) return true;
if (o == null || getClass() != o.getClass()) return false;
Person person = (Person) o;
if (age != person.age) return false;
return name != null ? name.equals(person.name) : person.name == null;
}
輸出

集合交集
@Test
/**
* 集合交集
*/
public void test1() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Collection coll1 = new ArrayList();
coll1.add("wwbao");
coll1.add("yyll");
coll1.add(20);
coll1.add(false);
coll1.add(new String("1314"));
// coll.retainAll(coll1);
// System.out.println(coll);
/*
* equals
* 如果結果為true
* 目前集合和形參必須資料完全一模一樣
* ArrayList是一個有序集合!!!!!!!!!
* 順序如果錯了 資料相同 equals 判斷也是false
* */
System.out.println(coll.equals(coll1));
}
輸出
集合差集
@Test
/**
* 集合差集
*/
public void test() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Collection coll1 = Arrays.asList(false, 20);
coll.removeAll(coll1);
System.out.println(coll);
}
輸出
集合 數組互轉
@Test
/**
* 集合轉成數組
* 數組到集合
*/
public void test2() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Object[] arrays = coll.toArray();
System.out.println("集合到數組:" + Arrays.toString(arrays));
List list = Arrays.asList("wwbao", "yyll", 20);
System.out.println("數組到集合:" + list);
List list1 = Arrays.asList(new int[]{123, 456});
System.out.println("new int:" + list1);
System.out.println("new int size:" + list1.size());
/*
* new int:[[I@4ee285c6]
* new int size:1
*
* int類型數組中有兩個元素 但是轉成集合後
* size 為 1
* */
List list2 = Arrays.asList(new Integer[]{123, 456});
System.out.println("new Integer:" + list2);
System.out.println("new Integer size:" + list2.size());
/*
* new Integer:[123, 456]
* new Integer size:2
* */
/*
* 以後使用Arrays.asList方法
* 如果使用基本類型為入參 則asList方法會将當成一個對象
* 不會得到預期的結果
* 要麼使用基本類型對應的包裝類
* 要麼直接指派 Arrays.asList(123,456) ...
* */
}
輸出
疊代器
@Test
public void test1() {
Collection coll = new ArrayList();
coll.add("wwbao");
coll.add("yyll");
coll.add(20);
coll.add(false);
coll.add(new String("1314"));
Iterator it = coll.iterator();
while (it.hasNext()) {
// it.remove(); // java.lang.IllegalStateException
Object value = it.next();
if (value.equals(20)) {
it.remove();
}
// it.remove(); // java.lang.IllegalStateException
}
System.out.println(coll);
/*
* 輸出結果
* [wwbao, yyll, false, 1314]
* 1.在next方法沒有調用之前 不能調用remove方法 否則
* 報異常 java.lang.IllegalStateException
*
* 2.在next方法調用之後 隻能調用一次remove方法
* 還是會報異常 java.lang.IllegalStateException
* */
}
小結
- 集合類定義在
包中 有List Map Set三種集合類 使用java.util
進行周遊Iterator
-
不要用基本類型傳參Arrays.asList
-
方法實際使用的是對象的equals方法contains
- 如果List集合中包含了
類 則該類必須重寫equals方法 以保證資料的一緻性自定義
即使再小的帆也能遠航