Java第十五天(List、ArrayList、LinkedList、Vector)

68.List集合java

(1)概念api

List是有序的集合,就像咱們的數組同樣。咱們能夠把list理解爲是一個長度可變的數組,並且提供了豐富的api。List的集合底層就是數組。數組

(2)List的添加和得到安全

import java.util.ArrayList;
import java.util.List;

public class ListTest {
    public static void main(String[] args) {
        List l1=new ArrayList();
        //List中添加
        l1.add("孫悟空");
        l1.add("豬八戒");
        l1.add("沙和尚");
        //指定索引位置添加
        l1.add(3,"挑擔子");
        List l2=new ArrayList();
        l2.add("唐僧");
        l2.add("白龍馬");
        l2.add("孫悟空");
        l2.add("豬八戒");
        l2.add("沙和尚");
        //指定索引位置添加子集合的內容
        l1.addAll(1,l2);
        System.out.println(l1);

        //Object o = l1.get(1);根據索引得到集合中的元素,默認返回的是Object的,可是若是已知是String類型能夠強轉
        String o = (String) l1.get(1);
        System.out.println(o);
        //得到集合中"孫悟空"第一次出現的索引,若是不包含該元素則返回-1
        int i=l1.indexOf("孫悟空");
        System.out.println(i);
        //得到集合中"孫悟空"最後一次出現的索引,若是不包含該元素則返回-1
        int j=l1.lastIndexOf("孫悟空");
        System.out.println(j);
    }
}

(3)List的遍歷方法多線程

import java.util.ArrayList;
import java.util.List;
import java.util.ListIterator;

public class ListTest1 {
    public static void main(String[] args) {
        List l1 = new ArrayList();
        //List中添加
        l1.add("孫悟空");
        l1.add("豬八戒");
        l1.add("沙和尚");
        //指定索引位置添加
        l1.add(3, "白龍馬");
        ListIterator listIterator = l1.listIterator();
        while (listIterator.hasNext()){
            Object next = listIterator.next();
            System.out.println(next);
            //使用迭代器遍歷的過程當中集合自己是不能更改的,這樣有多線程的併發問題;可是能夠經過迭代器更改集合,所做的更改不參與本次遍歷
            if(next.equals("白龍馬")){
                listIterator.add("蹄兒朝西");
            }
        }
        System.out.println("-----------ListIterator第二次遍歷------------");
        //list使用迭代器遍歷是能夠逆轉的,對比Collection
        while (listIterator.hasPrevious()){
            Object previous = listIterator.previous();
            System.out.println(previous);
        }
        System.out.println("-----------使用for循環遍歷------------");
        //還可使用for循環進行遍歷
        for (int i = 0; i < l1.size(); i++) {
            Object o=l1.get(i);
            System.out.println(o);
            //for循環中是能夠更改集合的,i < l1.size()此處使用的是可變的動態的集合長度,所以所做的更改參與此次的遍歷
            if(o.equals("蹄兒朝西")){
                l1.add("馬有失蹄");
            }
        }
    }
}

(4)List刪除方法併發

import java.util.ArrayList;
import java.util.List;

public class ListTest2 {
    public static void main(String[] args) {
        List l1 = new ArrayList();
        //List中添加
        l1.add("孫悟空");
        l1.add("豬八戒");
        l1.add("沙和尚");
        l1.add("孫悟空");
        l1.add("豬八戒");
        l1.add("沙和尚");
        System.out.println("//刪除集合中指定索引的元素----------------");
        l1.remove(2);
        System.out.println("//刪除集合中第一次檢索到的指定元素----------------");
        l1.remove("豬八戒");
        System.out.println(l1);
        List l2 = new ArrayList();
        l2.add("唐僧");
        l2.add("白龍馬");
        l2.add("豬八戒");
        l2.add("沙和尚");
        l1.addAll(1, l2);
        System.out.println("//指定索引位置添加子集合的內容----------------");
        System.out.println(l1);
        l1.removeAll(l2);
        System.out.println("//刪除集合全部子集合包含的元素----------------");
        System.out.println(l1);
        l1.set(1,"孫行者");
        System.out.println("//修改指定索引處的元素----------------");
        System.out.println(l1);
        l1.clear();
        System.out.println(l1);
    }
}

69.ArrayListapp

List 接口的大小可變數組的實現。實現了全部可選列表操做,並容許包括 null 在內的全部元素。除了實現 List 接口外,此類還提供一些方法來操做內部用來存儲列表的數組的大小。(此類大體上等同於 Vector 類,除了此類是不一樣步的。)性能

ArrayList的底層是數組的原理。spa

ArrayList中的元素和能夠重複線程

是有序的集合,長度不固定。

不是線程安全的。

效率高。

ArrayList在添加數據的時候初始的長度是10,後續會以5個長度來擴充集合的長度。

ArrayList不是線程安全的集合,適合不要求線程安全的需求來實現。

好處是性能高。

缺點就是線程不安全,可能帶來數據不許確。

若是線程要是同步的話,性能就會變低。

 

70.LinkedList

List 接口的連接列表實現。實現全部可選的列表操做,而且容許全部元素(包括 null)。除了實現 List 接口外,LinkedList 類還爲在列表的開頭及結尾 get、remove 和 insert 元素提供了統一的命名方法。這些操做容許將連接列表用做堆棧、隊列雙端隊列

此類實現 Deque 接口,爲 add、poll 提供先進先出隊列操做,以及其餘堆棧和雙端隊列操做。

全部操做都是按照雙重連接列表的須要執行的。在列表中編索引的操做將從開頭或結尾遍歷列表(從靠近指定索引的一端)。

Linked也不是線程安全的。

鏈表:儲存了元素和先後的地址

LinkedList是鏈表爲原理,添加修改刪除的性能高。

import java.util.LinkedList;

public class LinkListTest {
    public static void main(String[] args) {
        LinkedList list=new LinkedList();
        list.add("取經");
        list.addFirst("西天");
        list.addLast("上大路");
        System.out.println(list);//[西天, 取經, 上大路]
        /*list.removeFirst();//[取經, 上大路]
        list.removeLast();//[取經]*/
        Object pop = list.pop();//出棧
        System.out.println(pop);//西天    棧頂的元素出棧
        System.out.println(list);//[取經, 上大路]
        list.push("小西天");//壓棧    棧頂添加進去
        System.out.println(list);//[小西天, 取經, 上大路]
        Object pop1 = list.pop();
        System.out.println(pop1);//小西天    棧頂的元素出棧
        System.out.println(list);//[取經, 上大路]
    }
}

 

71.Vector

Vector 類能夠實現可增加的對象數組。與數組同樣,它包含可使用整數索引進行訪問的組件。可是,Vector 的大小能夠根據須要增大或縮小,以適應建立 Vector 後進行添加或移除項的操做。

import java.util.Enumeration;
import java.util.Vector;

public class VectorTest {
    public static void main(String[] args) {
        Vector list=new Vector();
        list.add("banana");
        list.add(0,"apple");
        Vector list2=new Vector();
        list2.add("pineappple");
        list2.add("pineapple cake");
        list.addAll(list2);
        System.out.println(list.get(2));
        System.out.println(list.elementAt(2));
        System.out.println("---------Vector中使用elements()遍歷----------");
        Enumeration elements = list.elements();
        while (elements.hasMoreElements()){
            Object o = elements.nextElement();
            System.out.println(o);
        }
        System.out.println("---------Vector中使用for循環遍歷----------");
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }
}

相關文章
相關標籤/搜索