1. 程式人生 > >java基礎(17)、集合類(1:Collection)

java基礎(17)、集合類(1:Collection)

實例 array 9.png str 列表 println 方式 elements .com

一.  什麽是集合類?

二.  Collection接口

  2.1  Collection子接口(List接口和Set接口)

  2.1  Collection的常用方法

三.  叠代器(Iterator)

  3.1  關於叠代器

  3.2  叠代其的用法

  3.3  叠代器的簡化:增強for循環

  3.4  使用叠代器向集合添加元素

四.  List接口

  4.1  List接口的方法

  4.2  List接口的實現類

  4.3  List遍歷的方法

  4.4  並發修改異常


一.  什麽是集合類?

  放了方便對多個對象操作,需要一個能對對象存儲的容器,它得具備:1、可以存不同的對象類型,2、容器的長度可變(放多少個對象進來就有多大);

就醬~~ 滿足這要求的容器就是集合啦;特點如下圖~

技術分享圖片


二.  Collection接口

Collection:集合框架的頂層接口。表示一組對象,這些對象也稱為 collection 的元素。

技術分享圖片

2.1  Collection子接口

Collection有兩個子接口,他們的特點是:

  List接口:可存放重復的元素,元素存取是“有序”的;

  Set接口:不可以存放重復的元素,通常元素存取是“無序”的,也有一些實現類是“有序”的。

註意:上方提到的“有序,無序”指的是存放元素時是否會記住元素的存放順序;並非對元素進行“排序”。 

技術分享圖片

2.2  Collection接口中的常用方法【返回類型 方法名(形參)】

添加操作

  • boolean add(boject e):確保此 collection 包含指定的元素(可選操作)。
  • boolean addAll(Collectiong c):將指定 collection 中的所有元素都添加到此 collection 中(可選操作)。

刪除操作

  • void clear():移除此 collection 中的所有元素(可選操作)。
  • boolean remove(object o):從此 collection 中移除指定元素的單個實例,如果存在的話(可選操作)。
  • boolean removaAll(Collection c): 移除此 collection 中那些也包含在指定 collection 中的所有元素(可選操作)。

查詢操作

  • int size():返回此 collection 中的元素數

判斷操作

  • boolean isEmpty():如果此 collection 不包含元素,則返回 true
  • boolean contains(Object obj):如果此 collection 包含指定的元素,則返回 true
  • boolean containsAll(Collection c):如果此 collection 包含指定 collection 中的所有元素,則返回 true

叠代操作

  • Iterator iterator():返回在此 collection 的元素上進行叠代的叠代器。


三.  叠代器:Iterator

3.1  關於叠代器

叠代是取出集合中元素的一種方式,因為Collection中有iterator方法,所以每一個子類集合對象都具備叠代器;叠代器的next方法返回值類型是Object,所以要記得類型轉換。

叠代器讀取元素示意圖

技術分享圖片

1     Collection c = new ArrayList();    //創建集合對象
2     Iterator it = c.iterator();    //獲取此集合的叠代器
3     while(it.haxNext()){        //遍歷這個集合
4         Object o = it.next();
5     }

  說明

  1、叠代器不保證取出元素的順序和存入的順序一致,“有些”是靠集合實例本身保證的;

  2、叠代器本身是一個接口,該方法返回的是一個叠代器實例對象,通常使用的是接口多態使用叠代器;

  3、叠代器中常用的兩個方法是:

    boolean hasNext():判斷是否有下一個元素;

    boolean next();取出下一個元素。

3.2  叠代器的兩種用法 

 1  //叠代器用法一
 2  for(Iterator iter = iterator();iter.hasNext();){
 3      System.out.println(iter.next());
 4  }
 5  
 6  //叠代器用法二
 7  Iterator iter = l.iterator();
 8  while(iter.hasNext()){
 9      System.out.println(iter.next());
10  }

3.3  增強for循環:叠代器的一種簡化方法

1     //for(數據類型 叠代變量名:集合對象)
2     for(Object obj : c){
3         //do something with obj
4     }

3.4  如何使用叠代器添加集合元素?

iterator接口沒有添加元素的方法,但是它的子接口ListIterator有,故:用ListIterator叠代,叠代器添加元素。(集合本身叠代,使用集合本身方法添加元素,如add


四.  List接口

4.1  List接口方法

特有方法

  • void add(int index,Object element):在列表的指定位置插入指定元素(可選操作)。
  • Object get(int index):返回列表中指定位置的元素。
  • Object set(int index,Object element):用指定元素替換列表中指定位置的元素(可選操作)。

4.2  List接口的實現類

  • ArrayList:線程不安全,查詢速度塊,底層用的是數組,增刪慢;
  • LinkedList:線程不安全,鏈表結構,增刪速度快,查詢慢;
  • Vector:線程安全,但速度慢,已被ArrayList替代

4.3  List接口遍歷的方法

1.  叠代器遍歷

1 //叠代器遍歷list
2 Iterator it = list.iterator();
3 while(it.hasNext()){
4     Object obj = it.next();
5     System.out.println(obj);
6 }

2.  增強for循環

1 //增強for循環遍歷集合
2 for(Object obj : list){
3     System.out.println(obj);
4 } 

3.  普通for循環配合get方法

1 //普通for循環,獲取指定位置的元素
2 for(int i = 0;i<list.size();i++){
3     System.out.println(list.get(i));
4 }

4.4  並發修改異常

在使用叠代器遍歷ArrayList的時候,若使用集合本身的方法修改了集合,將導致並發修改異常:ConcurrentModificationException,故需註意:

  • 使用叠代器遍歷,使用叠代器刪除元素
  • 使用集合本身遍歷,使用集合本身方法刪除元素

vector類

Vector類是1.0就已經有的,在1.2被整合到集合框架中,其中的大部分方法都和ArrayList相同,但它是線程安全的,所以效率要低,特有方法:

  • void addElement(E obj):將指定的組件添加到此向量的末尾,將其大小增加1。
  • void removeElement():從此向量中移除全部組件,並將其大小設置為零。
  • elements():返回此向量的組件的枚舉。


LinkedList類

LinkedList類底層使用的是鏈表結構保存數據,絕大多數方法和ArrayList相同,只不過多了一些對首尾元素操作的方法

  • void addFirst(E e):將指定元素插入此列表的開頭。
  • void addLast(E e):將指定元素添加到此列表的結尾。
  • E remove():獲取並移除此列表的頭(第一個元素)。

LinkedList底層使用的是鏈表,但是自己維護了一個索引,所以提供了get(int index)的方法來通過索引獲取元素,但此方法的效率很低,一般不使用


小結:List接口的實現類選擇

  是否需要線程安全: 如果是,可以選擇Vector,但是可以通過其他方式讓其他兩種類也達到線程安全的,所以一般也不會使用Vector;

  如果不是,考慮是增刪多還是查詢多,增刪多:使用LinkedList;查詢多:使用ArrayList

java基礎(17)、集合類(1:Collection)