1. 程式人生 > >章節七、1-ArrayList

章節七、1-ArrayList

一、集合是一個容器,前面講的數值也是一個容器,

它們的區別是:

1、陣列既可以儲存基本資料型別,又可以儲存引用資料型別,而集合只能儲存引用資料型別,也就是物件。

2、基本資料型別儲存的是值,引用資料型別儲存的是地址值。

3、陣列的長度是固定不變的,集合的長度可以根據元素的增加而增加。

二、向List集合中新增元素

package introduction9;

import java.util.ArrayList;

/***
 * 單列集合有Collection
 * Collection集合常用子介面有List 和 Set
 * Collection是層次結構中的根介面
 * List和Set是子介面,List以及他的實現類特點是可存重複的元素,Set以及他的實現類特點是不可有重複元素
 * List介面的實現類最常用的有Arraylist,特點是可重複元素
 * Set介面實現類最常用的有HashSet TreeSet 特點是不可有重複元素
 * 
 * 雙列集合有MAP,雙列指的是鍵值對的形式儲存
 * MAP也是介面,java裡面實現好的類有HashMap
 
*/ public class ArrayListDemo { public static void main(String[] args) { /** ArrayList<String>表示在這個集合中儲存的元素型別為String型別, 因為java是強型別的,所以使用前要宣告使用型別, 新建的集合元素預設大小為10, 如果在ArrayList<String>()不輸入內容,代表的是呼叫空引數,預設值為10 如果在括號中帶上引數,ArrayList<String>(100)輸入100表示集合的初始值大小為100, 指定大小的好處是可以節省資源, List物件實際上是儲存在一個引用型陣列中,表面上看該陣列能夠自動增長改變大小, 實際上這個陣列並沒有辦法改變大小,它只是改變了引用型陣列的指向而已, java自動增加ArrayList陣列的意思是指向ArrayList裡新增物件時,原物件的數目加一, 如果大於原底層陣列的長度,就以適當的元素新建一個原數值的拷貝,並修改原數值(指向新建的陣列), 原陣列自動拋棄,java中有垃圾回收機制,會自動回收這些垃圾,當即使這樣有時候還是會比較耗資源, 在使用者向ArrayList裡面追加物件時,java總是要計算容量是否適當,如果容量不足時就把原陣列拷貝 新陣列內,對原陣列變數重新賦值指向新陣列
*/ //建立一個ArrayList物件 ArrayList<String> cars = new ArrayList<String>(); //如何向集合中增加元素? //新增元素到名為cars的ArrayList中 cars.add("BMW"); cars.add("Honda"); cars.add("Audi"); } }

三、獲取元素個數  size方法

package introduction9;

import java.util.ArrayList;

/*** * 單列集合有Collection * Collection集合常用子介面有List 和 Set * Collection是層次結構中的根介面 * List和Set是子介面,List以及他的實現類特點是可存重複的元素,Set以及他的實現類特點是不可有重複元素 * List介面的實現類最常用的有Arraylist,特點是可重複元素 * Set介面實現類最常用的有HashSet TreeSet 特點是不可有重複元素 * * 雙列集合有MAP,雙列指的是鍵值對的形式儲存 * MAP也是介面,java裡面實現好的類有HashMap */ public class ArrayListDemo { public static void main(String[] args) { /** ArrayList<String>表示在這個集合中儲存的元素型別為String型別, 因為java是強型別的,所以使用前要宣告使用型別, 新建的集合元素預設大小為10, 如果在ArrayList<String>()不輸入內容,代表的是呼叫空引數,預設值為10 如果在括號中帶上引數,ArrayList<String>(100)輸入100表示集合的初始值大小為100, 指定大小的好處是可以節省資源, List物件實際上是儲存在一個引用型陣列中,表面上看該陣列能夠自動增長改變大小, 實際上這個陣列並沒有辦法改變大小,它只是改變了引用型陣列的指向而已, java自動增加ArrayList陣列的意思是指向ArrayList裡新增物件時,原物件的數目加一, 如果大於原底層陣列的長度,就以適當的元素新建一個原數值的拷貝,並修改原數值(指向新建的陣列), 原陣列自動拋棄,java中有垃圾回收機制,會自動回收這些垃圾,當即使這樣有時候還是會比較耗資源, 在使用者向ArrayList裡面追加物件時,java總是要計算容量是否適當,如果容量不足時就把原陣列拷貝 新陣列內,對原陣列變數重新賦值指向新陣列 */ //建立一個ArrayList物件 ArrayList<String> cars = new ArrayList<String>(); //如何向集合中增加元素? //新增元素到名為cars的ArrayList中 cars.add("BMW"); cars.add("Honda"); cars.add("Audi"); //大小 size獲取集合中的元素集合的歌數 int size = cars.size(); System.out.println("這個list集合的大小為:"+size); } }

執行結果:

四、通過索引訪問集合中的元素(索引位從0開始)

package introduction9;

import java.util.ArrayList;

/***
 * 單列集合有Collection
 * Collection集合常用子介面有List 和 Set
 * Collection是層次結構中的根介面
 * List和Set是子介面,List以及他的實現類特點是可存重複的元素,Set以及他的實現類特點是不可有重複元素
 * List介面的實現類最常用的有Arraylist,特點是可重複元素
 * Set介面實現類最常用的有HashSet TreeSet 特點是不可有重複元素
 * 
 * 雙列集合有MAP,雙列指的是鍵值對的形式儲存
 * MAP也是介面,java裡面實現好的類有HashMap
 */
public class ArrayListDemo {

    public static void main(String[] args) {
    /**    ArrayList<String>表示在這個集合中儲存的元素型別為String型別,
        因為java是強型別的,所以使用前要宣告使用型別,
        新建的集合元素預設大小為10,
        如果在ArrayList<String>()不輸入內容,代表的是呼叫空引數,預設值為10
        如果在括號中帶上引數,ArrayList<String>(100)輸入100表示集合的初始值大小為100,
        指定大小的好處是可以節省資源,
        List物件實際上是儲存在一個引用型陣列中,表面上看該陣列能夠自動增長改變大小,
        實際上這個陣列並沒有辦法改變大小,它只是改變了引用型陣列的指向而已,
        java自動增加ArrayList陣列的意思是指向ArrayList裡新增物件時,原物件的數目加一,
        如果大於原底層陣列的長度,就以適當的元素新建一個原數值的拷貝,並修改原數值(指向新建的陣列),
        原陣列自動拋棄,java中有垃圾回收機制,會自動回收這些垃圾,當即使這樣有時候還是會比較耗資源,
        在使用者向ArrayList裡面追加物件時,java總是要計算容量是否適當,如果容量不足時就把原陣列拷貝
        新陣列內,對原陣列變數重新賦值指向新陣列
    */
        //建立一個ArrayList物件
        ArrayList<String> cars = new ArrayList<String>();
        //如何向集合中增加元素?
        //新增元素到名為cars的ArrayList中
        cars.add("BMW");
        cars.add("Honda");
        cars.add("Audi");
        //大小     size獲取集合中的元素集合的歌數
        int size = cars.size();
        System.out.println("這個list集合的大小為:"+size);
        //通過索引訪問集合中的元素
        System.out.println("1索引位上的元素為:"+cars.get(1));
    }

}

執行結果為:

五、遍歷集合元素

package introduction9;

import java.util.ArrayList;

/***
 * 單列集合有Collection
 * Collection集合常用子介面有List 和 Set
 * Collection是層次結構中的根介面
 * List和Set是子介面,List以及他的實現類特點是可存重複的元素,Set以及他的實現類特點是不可有重複元素
 * List介面的實現類最常用的有Arraylist,特點是可重複元素
 * Set介面實現類最常用的有HashSet TreeSet 特點是不可有重複元素
 * 
 * 雙列集合有MAP,雙列指的是鍵值對的形式儲存
 * MAP也是介面,java裡面實現好的類有HashMap
 */
public class ArrayListDemo {

    public static void main(String[] args) {
    /**    ArrayList<String>表示在這個集合中儲存的元素型別為String型別,
        因為java是強型別的,所以使用前要宣告使用型別,
        新建的集合元素預設大小為10,
        如果在ArrayList<String>()不輸入內容,代表的是呼叫空引數,預設值為10
        如果在括號中帶上引數,ArrayList<String>(100)輸入100表示集合的初始值大小為100,
        指定大小的好處是可以節省資源,
        List物件實際上是儲存在一個引用型陣列中,表面上看該陣列能夠自動增長改變大小,
        實際上這個陣列並沒有辦法改變大小,它只是改變了引用型陣列的指向而已,
        java自動增加ArrayList陣列的意思是指向ArrayList裡新增物件時,原物件的數目加一,
        如果大於原底層陣列的長度,就以適當的元素新建一個原數值的拷貝,並修改原數值(指向新建的陣列),
        原陣列自動拋棄,java中有垃圾回收機制,會自動回收這些垃圾,當即使這樣有時候還是會比較耗資源,
        在使用者向ArrayList裡面追加物件時,java總是要計算容量是否適當,如果容量不足時就把原陣列拷貝
        新陣列內,對原陣列變數重新賦值指向新陣列
    */
        //建立一個ArrayList物件
        ArrayList<String> cars = new ArrayList<String>();
        //如何向集合中增加元素?
        //新增元素到名為cars的ArrayList中
        cars.add("BMW");
        cars.add("Honda");
        cars.add("Audi");
        //大小     size獲取集合中的元素集合的歌數
        int size = cars.size();
        System.out.println("這個list集合的大小為:"+size);
        //通過索引訪問集合中的元素
        System.out.println("1索引位上的元素為:"+cars.get(1));
        //遍歷集合元素
        //方式一:
        System.out.println("遍歷集合");
        for(int i = 0;i<size;i++) {
            System.out.println("索引位"+i+"上的元素為:"+cars.get(i));
        }
        //方式二:使用高階for迴圈
        System.out.println("\n高階for迴圈");
        for(String car:cars) {
            System.out.println("集合元素為:"+car);
        }
    }

}

執行結果為:

六、移除元素

package introduction9;

import java.util.ArrayList;

/***
 * 單列集合有Collection
 * Collection集合常用子介面有List 和 Set
 * Collection是層次結構中的根介面
 * List和Set是子介面,List以及他的實現類特點是可存重複的元素,Set以及他的實現類特點是不可有重複元素
 * List介面的實現類最常用的有Arraylist,特點是可重複元素
 * Set介面實現類最常用的有HashSet TreeSet 特點是不可有重複元素
 * 
 * 雙列集合有MAP,雙列指的是鍵值對的形式儲存
 * MAP也是介面,java裡面實現好的類有HashMap
 */
public class ArrayListDemo {

    public static void main(String[] args) {
    /**    ArrayList<String>表示在這個集合中儲存的元素型別為String型別,
        因為java是強型別的,所以使用前要宣告使用型別,
        新建的集合元素預設大小為10,
        如果在ArrayList<String>()不輸入內容,代表的是呼叫空引數,預設值為10
        如果在括號中帶上引數,ArrayList<String>(100)輸入100表示集合的初始值大小為100,
        指定大小的好處是可以節省資源,
        List物件實際上是儲存在一個引用型陣列中,表面上看該陣列能夠自動增長改變大小,
        實際上這個陣列並沒有辦法改變大小,它只是改變了引用型陣列的指向而已,
        java自動增加ArrayList陣列的意思是指向ArrayList裡新增物件時,原物件的數目加一,
        如果大於原底層陣列的長度,就以適當的元素新建一個原數值的拷貝,並修改原數值(指向新建的陣列),
        原陣列自動拋棄,java中有垃圾回收機制,會自動回收這些垃圾,當即使這樣有時候還是會比較耗資源,
        在使用者向ArrayList裡面追加物件時,java總是要計算容量是否適當,如果容量不足時就把原陣列拷貝
        新陣列內,對原陣列變數重新賦值指向新陣列
    */
        //建立一個ArrayList物件
        ArrayList<String> cars = new ArrayList<String>();
        //如何向集合中增加元素?
        //新增元素到名為cars的ArrayList中
        cars.add("BMW");
        cars.add("Honda");
        cars.add("Audi");
        
        //大小     size獲取集合中的元素集合的歌數
        int size = cars.size();
        System.out.println("這個list集合的大小為:"+size);
        
        //通過索引訪問集合中的元素
        System.out.println("1索引位上的元素為:"+cars.get(1));
        
        //遍歷集合元素
        //方式一:
        System.out.println("遍歷集合");
        for(int i = 0;i<size;i++) {
            System.out.println("索引位"+i+"上的元素為:"+cars.get(i));
        }
        //方式二:使用高階for迴圈
        System.out.println("\n高階for迴圈");
        for(String car:cars) {
            System.out.println("集合元素為:"+car);
        }
        
        //移除集合元素(移除最後一個元素)
        cars.remove(size-1);
        System.out.println("\n高階for迴圈移除元素之後");
        for(String car:cars) {
            System.out.println("集合元素為:"+car);
        }
    }

}

執行結果為:

七、此演示中移除元素比較快,因為集合中只有三位,當如果如果集合中元素較多,例如有2000個,移除倒數一、二、三位上的元素效率與集合只有三位的的效率一樣,刪除後元素後這個元素的索引位就會空下來,而ArrayList增刪時會帶來元素的移動,如果在中間刪除一個元素,後面所有位置上的元素都會向前面移動,增加資料會向後移動,因此當如果想要移除前面一、二、三個元素的話,這樣會影響效率,所以增刪元素時用linked List集合會比較快(下一節中會講到),這也是ArrayList和Linked List的不同之處。

八、查詢用ArrayList會比較快,因為ArrayList底層是陣列實現的,使用下標查詢,不需要比較,基於位置來讀取相應的位元組數。