java 集合 之 List

接前一節:

ArrayList

boolean add(E e)

將指定的元素追加到此列表的末尾。

void add(int index, E element)

在此列表中的指定位置插入指定的元素。

boolean addAll(Collection<? extends E> c)

按指定集合的Iterator返回的順序將指定集合中的所有元素追加到此列表的末尾。

boolean addAll(int index, Collection<? extends E> c)

將指定集合中的所有元素插入到此列表中,從指定的位置開始。

void clear()

從列表中刪除所有元素。

Object clone()

返回此 ArrayList實例的淺拷貝。

boolean contains(Object o)

如果此列表包含指定的元素,則返回 true 。

void ensureCapacity(int minCapacity)

如果需要,增加此 ArrayList實例的容量,以確保它可以至少保存最小容量參數指定的元素數。

void forEach(Consumer<? super E> action)

對 Iterable的每個元素執行給定的操作,直到所有元素都被處理或動作引發異常。

E get(int index)

返回此列表中指定位置的元素。

int indexOf(Object o)

返回此列表中指定元素的第一次出現的索引,如果此列表不包含元素,則返回-1。

boolean isEmpty()

如果此列表不包含元素,則返回 true 。

Iterator<E> iterator()

以正確的順序返回該列表中的元素的迭代器。

int lastIndexOf(Object o)

返回此列表中指定元素的最後一次出現的索引,如果此列表不包含元素,則返回-1。

ListIterator<E> listIterator()

返回列表中的列表迭代器(按適當的順序)。

ListIterator<E> listIterator(int index)

從列表中的指定位置開始,返回列表中的元素(按正確順序)的列表迭代器。

E remove(int index)

刪除該列表中指定位置的元素。

boolean remove(Object o)

從列表中刪除指定元素的第一個出現(如果存在)。

boolean removeAll(Collection<?> c)

從此列表中刪除指定集合中包含的所有元素。

boolean removeIf(Predicate<? super E> filter)

刪除滿足給定謂詞的此集合的所有元素。

protected void removeRange(int fromIndex, int toIndex)

從這個列表中刪除所有索引在 fromIndex (含)和 toIndex之間的元素。

void replaceAll(UnaryOperator<E> operator)

將該列表的每個元素替換爲將該運算符應用於該元素的結果。

boolean retainAll(Collection<?> c)

僅保留此列表中包含在指定集合中的元素。

E set(int index, E element)

用指定的元素替換此列表中指定位置的元素。

int size()

返回此列表中的元素數。

void sort(Comparator<? super E> c)

使用提供的 Comparator對此列表進行排序以比較元素。

Spliterator<E> spliterator()

在此列表中的元素上創建late-binding故障快速 Spliterator 。

List<E> subList(int fromIndex, int toIndex)

返回此列表中指定的 fromIndex (包括)和 toIndex之間的獨佔視圖。

Object[] toArray()

以正確的順序(從第一個到最後一個元素)返回一個包含此列表中所有元素的數組。

<T> T[] toArray(T[] a)

以正確的順序返回一個包含此列表中所有元素的數組(從第一個到最後一個元素); 返回的數組的運行時類型是指定數組的運行時類型。

void trimToSize()

修改這個 ArrayList實例的容量是列表的當前大小。

 LinkedList

Modifier and Type Method and Description
boolean add(E e)

將指定的元素追加到此列表的末尾。

void add(int index, E element)

在此列表中的指定位置插入指定的元素。

boolean addAll(Collection<? extends E> c)

按照指定集合的迭代器返回的順序將指定集合中的所有元素追加到此列表的末尾。

boolean addAll(int index, Collection<? extends E> c)

將指定集合中的所有元素插入到此列表中,從指定的位置開始。

void addFirst(E e)

在該列表開頭插入指定的元素。

void addLast(E e)

將指定的元素追加到此列表的末尾。

void clear()

從列表中刪除所有元素。

Object clone()

返回此 LinkedList的淺版本。

boolean contains(Object o)

如果此列表包含指定的元素,則返回 true 。

Iterator<E> descendingIterator()

以相反的順序返回此deque中的元素的迭代器。

E element()

檢索但不刪除此列表的頭(第一個元素)。

E get(int index)

返回此列表中指定位置的元素。

E getFirst()

返回此列表中的第一個元素。

E getLast()

返回此列表中的最後一個元素。

int indexOf(Object o)

返回此列表中指定元素的第一次出現的索引,如果此列表不包含元素,則返回-1。

int lastIndexOf(Object o)

返回此列表中指定元素的最後一次出現的索引,如果此列表不包含元素,則返回-1。

ListIterator<E> listIterator(int index)

從列表中的指定位置開始,返回此列表中元素的列表迭代器(按適當的順序)。

boolean offer(E e)

將指定的元素添加爲此列表的尾部(最後一個元素)。

boolean offerFirst(E e)

在此列表的前面插入指定的元素。

boolean offerLast(E e)

在該列表的末尾插入指定的元素。

E peek()

檢索但不刪除此列表的頭(第一個元素)。

E peekFirst()

檢索但不刪除此列表的第一個元素,如果此列表爲空,則返回 null 。

E peekLast()

檢索但不刪除此列表的最後一個元素,如果此列表爲空,則返回 null 。

E poll()

檢索並刪除此列表的頭(第一個元素)。

E pollFirst()

檢索並刪除此列表的第一個元素,如果此列表爲空,則返回 null 。

E pollLast()

檢索並刪除此列表的最後一個元素,如果此列表爲空,則返回 null 。

E pop()

從此列表表示的堆棧中彈出一個元素。

void push(E e)

將元素推送到由此列表表示的堆棧上。

E remove()

檢索並刪除此列表的頭(第一個元素)。

E remove(int index)

刪除該列表中指定位置的元素。

boolean remove(Object o)

從列表中刪除指定元素的第一個出現(如果存在)。

E removeFirst()

從此列表中刪除並返回第一個元素。

boolean removeFirstOccurrence(Object o)

刪除此列表中指定元素的第一個出現(從頭到尾遍歷列表時)。

E removeLast()

從此列表中刪除並返回最後一個元素。

boolean removeLastOccurrence(Object o)

刪除此列表中指定元素的最後一次出現(從頭到尾遍歷列表時)。

E set(int index, E element)

用指定的元素替換此列表中指定位置的元素。

int size()

返回此列表中的元素數。

Spliterator<E> spliterator()

在此列表中的元素上創建late-binding故障快速 Spliterator 。

Object[] toArray()

以正確的順序(從第一個到最後一個元素)返回一個包含此列表中所有元素的數組。

<T> T[] toArray(T[] a)

以正確的順序返回一個包含此列表中所有元素的數組(從第一個到最後一個元素); 返回的數組的運行時類型是指定數組的運行時類型。

代碼示例 

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Stream;

import static java.util.stream.Collectors.toList;

public class Mylist {

    public static void main(String[] args) {
        Mylist mylist = new Mylist();
//        mylist.TestArrayList();
        mylist.TestLinkList();
    }

    public void TestArrayList(){

        /**
         * 初始化
         */
        //方式一:內部類
        List<String> mylist = new ArrayList<String>(){{
            add("z");
            add("b");
            add("a");
        }};

        //方式二:
        mylist.add("xx");

        //方式三:
        List<String> jdks = new ArrayList<>(Arrays.asList("1", "2", "3"));
        System.out.println(jdks);

        //方式四: stream流, jdk8及以後
        List<String> colors = Stream.of("blue", "red", "yellow").collect(toList());
        System.out.println(colors);

        /**
         * 遍歷容器,並刪除指定元素
         */
        //方式一:
        System.out.println("for 增強版訪問:");
        for(String str: mylist){
            System.out.println(str);

        }
        //遍歷刪除
        CopyOnWriteArrayList<String> list = new CopyOnWriteArrayList<>(mylist);
        for(String x:list){
            if("z".equals(x))
            {
                list.remove(x);
                System.out.println("刪除元素:z");
            }
        }

        //方式二:
        System.out.println("傳統循環訪問:");
        for (int i = mylist.size() - 1; i >= 0; i--)
        {
            System.out.println(mylist.get(i));
            //刪除元素
            if (mylist.get(i).equals("a")){
                mylist.remove(i);
                System.out.println("刪除元素:a, 位置在: " + (i+1));
            }
        }
        //方式三:
        System.out.println("使用迭代器訪問:");
        ListIterator<String> iter = mylist.listIterator();
        while(iter.hasNext()){
            String str = iter.next();   //這裏next不能調用兩次,會出錯;調用next之後,next會指向下一個元素
            System.out.println(str);
            //刪除元素
            if ("b".equals(str)){
                iter.remove();
                System.out.println("刪除元素:b");
            }
        }
        //方式四:
        mylist.forEach((i)-> System.out.println(i));

        System.out.println("當前list內容:" + mylist +"大小爲:"+ mylist.size());

        /**
         * 其他函數調用
         */
        if (mylist.contains("a")){
            System.out.println("list中包含元素:a");
        }

//        List<String> mylist2 = new ArrayList<>();
        //集合先要判斷爲null,在判斷是否爲空
        List<String> mylist2 = null;
        if (mylist2 == null){
            System.out.println("mylist2 = nul");
        }

        if (mylist2.isEmpty()){ //如果沒有分配內存,會拋出異常
            System.out.println("mylist2 is empty");
        }

        //排序
        mylist.sort(Comparator.reverseOrder());
        System.out.println(mylist);

        //使用stream流對多個字段進行排序
        //mylist.stream().sorted(Comparator.comparing(ClassType::getAge).reversed().thenComparing(ClassType::getHeight)).collect(Collectors.toList());

        //清除
        mylist.clear();

        //更多函數請查看:http://www.matools.com/api/java8  網頁搜索:ArrayList
    }


    /**
     * LinkedList 和 ArrayList類似。
     */
    public void TestLinkList(){
        LinkedList<Integer> mylinklist = new LinkedList<Integer>(){{
            add(3);
            add(5);
            add(2);
            add(1);
            add(0);
        }};

        mylinklist.add(19);

        System.out.println("元素集合:"+mylinklist);
        /**
         * LinkedList初始化和遍歷,與ArrayList類似。這裏不在重複
         */
        if (mylinklist.peek() == null){
            System.out.println("peek():第一個元素爲空");
        }

        /**
         * LinkedList peek和element區別:
         * peek(),如果鏈表爲空,則返回null。element(),如果鏈表爲空,則拋異常。
         */
        try{
            Integer tmp = mylinklist.element();
            System.out.println("獲取第一個元素爲:"+tmp);
        }catch (Exception e){
            e.printStackTrace();
            System.out.println("element 沒有獲取第一個元素,拋出異常");
        }

        /**
         * LinkedList對象刪除元素時,不需要擔心被刪除元素之後元素錯亂,因爲是鏈表結構
         */
        mylinklist.remove(4);   //刪除第四個元素
        Integer tmp2 = 19;
        mylinklist.remove(tmp2);    //刪除對象值爲19的元素
        System.out.println(mylinklist);


        /**
         * 對象排序
         */
        mylinklist.sort(Comparator.reverseOrder());
//        mylinklist.sort(Comparator.naturalOrder());
        System.out.println("排序之後:" + mylinklist);

        /**
         * 對象清除
         */
        mylinklist.clear();

        //更多函數請查看:http://www.matools.com/api/java8  網頁搜索:LinkedList
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章