1. 程式人生 > >容器,型別轉換。List。

容器,型別轉換。List。

一、容器

二、集合介面

  • 1 Collection 介面

Collection 是最基本的集合介面,一個 Collection 代表一組 Object,即 Collection 的元素, Java不提供直接繼承自Collection的類,只提供繼承於的子介面(如List和set)。

  • 2 List 介面

List介面是一個有序的 Collection,使用此介面能夠精確的控制每個元素插入的位置,能夠通過索引(元素在List中位置,類似於陣列的下標)來訪問List中的元素,第一個元素的索引為 0,而且允許有相同的元素。

  • 3 Set介面

Set 具有與 Collection 完全一樣的介面,只是行為上不同,Set 不儲存重複的元素。

  • 4 Map介面

將唯一的鍵對映到值。

三、List介面及其實現類—ArrayList(陣列序列)

1.List是元素有序並且可以重複的集合,被稱為序列。

2.List可以精確的控制每個元素的插入位置,或刪除某個位置的元素。

3.ArrayList–陣列序列,是List的一個重要實現類

ArrayList類的構造方法有3種過載方式

1.構 造 方 法

  • ArrayList()

建立一個空的ArrayList物件

  • ArrayList(Collection c)

根據指定的集合建立ArrayList物件

  • ArrayList(int initialCapacity)

使用給定的大小建立ArrayList物件

2.方 法 原 型

例項:

public class ArrayTest {

public static void main(String[] args) {

    //建立一個空ArrayList物件
    ArrayList arrayList = new ArrayList();
    //新增10次需要借用for迴圈語句
    for (int i = 0; i < 10; i++) {
        //建立整型包裝類物件
        Integer integer = new Integer(i);
        //將該物件存放到ArrayList中
        arrayList.add(integer);
    }
    System.out.println("陣列中的元素:");
    //遍歷輸出:arrayList
    for (int i = 0; i < arrayList.size(); i++) {
        Integer in = (Integer) arrayList.get(i);
        System.out.println(in);
    }
    System.out.println("*********************************");
    //清空
    arrayList.clear();
    System.out.println("陣列被清空後的情況:");
    System.out.println("陣列長度為:" + arrayList.size());

    if (arrayList == null && arrayList.isEmpty()){
        System.out.println("陣列現在為空");
    } else {
        System.out.println("陣列不為空");
    }
}
}

深度理解ArrayList

  • ArrayList實現了List介面,它是以陣列的方式來實現的,陣列的特性是可以使用索引的方式來快速定位物件的位置,因此對於快速的隨機取得物件的需求,使用ArrayList實現執行效率上會比較好.
  • 這裡列舉出了迴圈List列表的三種方式: 使用普通for迴圈,用get方法獲取; 使用Iterator迭代器,使用next方法遍歷;使用增強for迴圈,直接輸出! 由此可見第三種方法是最方便,最簡潔的!

例項1:

建立一個空ArrayList物件
ArrayList arrayList = new ArrayList();
//新增10次用for迴圈:
for(int i = 0;i < 10; i++ ){
    //建立整型包裝類物件
    Integer integer = new Integer(i);
    //將該物件存放到ArrayList中
    arrayList.add(integer);
}
//遍歷輸出ArrayList:
for (int i = 0;i < arrayList.size();i++){
    Integer in = (Integer)arrayList.get(i);
    System.out.println(in);
}

例項2:

public class ArrayListDemo {
    public static void main(String[] args) {
        //用泛型建立List物件
        List<String>userlist = new ArrayList<String>();
            userlist.add("豐澤");
            userlist.add("與龍共舞");
        System.out.println("使用普通for迴圈");
       //   方法一: 遍歷輸出userList物件
        for (int i = 0; i <userlist.size() ; i++) {
            System.out.println(userlist.get(i));
        }
        System.out.println();
        System.out.println();

        //  方法二:
        System.out.println("使用Iterator迭代器:");
        Iterator iterator = userlist.iterator();
        while (iterator.hasNext()){
            System.out.println(iterator.next()+"");
        }
        System.out.println();
        System.out.println();


        //  方法三:
        System.out.println("使用增強for迴圈:");
        for (String s:userlist){
            System.out.println(s+"");
        }

    }
}

四、LinkedList類

  • LinkedList類用於建立連結串列資料結構;

  • 連結串列中元素的數量不受任何限制,可以隨意地新增和刪除;

  • 與ArrayList相比,如果需要頻繁地新增和刪除元素,LinkedList的效能更加優越;

  • LinkedList類繼承了AbstractSequentialList類,並實現了List介面

1.LinkedList類的構造方法

  • LinkedList()

建立一個空連結串列

  • LinkedList(Collection c)

根據指定的集合建立連結串列

2.LinkedList類的常用方法

  • int size()

返回連結串列的大小,即元素的數量

  • boolean isEmpty()

判斷連結串列是否為空,為空返回true,否則返回false

  • void clear()

清空連結串列中的所有元素,使其成為空連結串列

  • boolean add(Object element)

向連結串列中新增一個元素,該元素可以是任何類的物件

  • Object remove(int index)

從連結串列中刪除指定索引位置的元素

  • Object get(int index)

返回指定索引位置的元素

  • Object set(int index, Object elem)

將元素elem存放到由index指定的索引位置上

  • int indexOf(Object element)

判斷element在連結串列中是否存在,存在返回對應的索引,否則返回-1

3.方法原型

例項:

public class LinkedTest {

public static void main(String[] args) {

    //建立空的連結串列
    LinkedList linkedList = new LinkedList();

    for (int i = 0; i < 10; i++) {
        //建立包裝類物件
        Double temp = new Double(i);
        //將包裝類物件新增到連結串列中
        linkedList.add(temp);
    }
    //迴圈列印連結串列中的元素
    for (int i = 0; i < linkedList.size(); i++) {
        System.out.println(linkedList.get(i));
    }
    System.out.println("*********************************");
    linkedList.removeFirst();  //刪除第一個元素
    linkedList.removeLast();   //刪除最後一個元素

    System.out.println("刪除第一個元素和最後一個元素後的連結串列:");
    for (int i = 0; i < linkedList.size(); i++) {
        System.out.println(linkedList.get(i));
    }
    執行結果:0123456789 ********************************* 陣列被清空後的情況: 陣列長度為:0 陣列不為空

深度理解LinkedList

  • 1.LinkedList是採用連結串列的方式來實現List介面的,它本身有自己特定的方法,如: addFirst(),addLast(),getFirst(),removeFirst()等. 由於是採用連結串列實現的,因此在進行insert和remove動作時在效率上要比ArrayList要好得多!適合用來實現Stack(堆疊)與Queue(佇列),前者先進後出,後者是先進先出.
  • 2、如果要使用佇列的功能,由於LinkedList也實現了java.util.Queue介面,所以可以直接使用LinkedList的例項來實現.
 //父類引用queue指向子類物件  
        Queue<String> queue = new LinkedList<String>();  
//offer()方法是往佇列加入元素  
        queue.offer("xiaoyun");  
public class StringStack {
    private LinkedList<String> linkedList = new LinkedList<String>();

    /**
     * 將元素加入到LinkedList容器
     * (就是插入到連結串列的第一個位置)
     */
    public void put(String name) {
        linkedList.addFirst(name);
    }

    /**
     * 取出堆疊中最上面的元素
     * (就是取出連結串列linkedList的第一個元素)
     * 最後return
     */
    public String getTop() {
        return linkedList.getFirst();
    }

    /**
     * 取出並刪除最上面的元素
     * (就是移除linkedList的第一個元素)
     * 最後return
     */
    public String pop() {
        return linkedList.removeFirst();
    }

    /**
     * 獲取元素個數
     * 最後return
     */
    public int size() {
        return linkedList.size();
    }

    /**
     * 判斷堆疊是否為空
     * 就是判斷LinkedList是否為空
     * 最後return
     */
    public boolean isEmpty() {
        return linkedList.isEmpty();
    }

    /**
     * 測試
     */
    public static void main(String[] args) {
        LinkedList<Object> linkedList = new LinkedList<Object>();
        ArrayList<String> arrayList = new ArrayList<String>();
        for (int i = 0; i <5 ; i++) {
            arrayList.add(Integer.toString(i));
        }
        linkedList.add(arrayList);
        linkedList.add("學習");
        linkedList.add("快樂");
        for (Object d : linkedList) {
            if(d instanceof ArrayList){
                System.out.println("是array");
            }else {
                continue;
            }
            System.out.println(d);
        }
        linkedList.clear();
        if (linkedList.isEmpty() && linkedList ==null){
            System.out.println("連結串列為空");
        }else {
            System.out.println("連結串列不為空");
        }

    }
}
執行結果:
是array
[0, 1, 2, 3, 4]
連結串列不為空

關於:在刪除可插入物件的動作時,為什麼ArrayList的效率會比較低呢?

解析: 因為ArrayList是使用陣列實現的,若要從陣列中刪除或插入某一個物件,需要移動後段的陣列元素,從而會重新調整索引順序,調整索引順序會消耗一定的時間,所以速度上就會比LinkedList要慢許多. 相反,LinkedList是使用連結串列實現的,若要從連結串列中刪除或插入某一個物件,只需要改變前後物件的引用即可!

五、Vector類

  • Vector類與ArrayList類和LinkedList類很相似,最大的區別在於Vector是執行緒同步的;

  • 如果在多執行緒的程式中要使用到集合框架,並且不希望執行緒與執行緒之間相互干擾,那麼Vector是不錯的選擇;

  • Vector類繼承於AbstractList類,並實現了List介面

1.構 造 方 法

  • Vector()

建立一個空的Vector物件。初始容量為10,容量增量為0

  • Vector(Collection c)

根據指定的集合建立Vector物件

  • Vector(int initialCapacity)

建立一個Vector物件,初始容量由initialCapacity指定,容量增量為0

  • Vector(int initialCapacity,int capacityIncrement)

建立一個Vector物件,初始容量由initialCapacity指定,容量增量由capacityIncrement指定

2.常用方法 3.方法原型

例項:

public class VectorTest {

public static void main(String[] args) {
    //建立一個空的Vector物件。初始容量為10,容量增量為0
    Vector vector = new Vector();
    //向Vector物件中新增一個元素,該元素可以是任何類的物件
    vector.add("a");
    vector.add("b");
    vector.add("c");
    vector.add("d");

    //將指定元素插入到指定索引位置
    vector.insertElementAt("王聰聰",3);

    for (int i = 0; i <vector.size() ; i++) {
        System.out.println(vector.get(i));
        
        執行結果:a b c 王聰聰 d 

五、型別轉換

其中基本資料型別轉換為字串有三種方法:

  • 1.使用包裝類的toString()方法

  • 2.使用String的valueOf()方法

  • 3.用一個空字串加上基本型別,得到的就是基本型別資料對應的字串。

例項:

//int轉String

int id = 10;

String name = Integer.toString(id);

String name2 = String.valueOf(id);

String name3 = id + “”;

//String轉int

String Str = “8”;

int t = Integer.parseInt(Str);

int tt = Integer.valueOf(Str);