Java(List集合的子類)


List集合的子類

一、ArrayList集合(實現類)

1、特點

1、底層數據結構是:數組(元素增刪慢,查找快);
2、此實現不是同步的(多線程)、線程不安全;
3、ArrayList使用無參構造函數創建對象時,Object數組默認的容量時10,當長度不夠時,會增長0.5倍;

2、創建對象格式

ArrayList<?> arrayList = new ArrayList<>();或者
Collection<?> c  = new ArrayList<>();//多態

3、ArrayList為什么是長度不可變的?

ArrayList 底層是通過數組實現的,數組在創建的時候必須要指定其大小,那么基於數組實現無法直接達到長度可變。

4、ArrayList 是如何達到長度可變的?

ArrayList 通過創建一個大於現有數組長度的數組,並將原數組數據按順序拷貝到新數組變相完成長度可變的。

5、遍歷操作

toArray():數組遍歷
iterator():迭代器遍歷
foreach():增強for循環,底層是迭代器
listIterator():列表迭代
listIterator(index):從指定位置列表迭代
for() size()和get()

6、去重復操作

1、新建一個新的集合
        遍歷老的集合,
        如果新的集合里面包含有這個老的集合元素,
        就把老集合的元素添加到新的集合
2、冒泡排序、快速排序等數據結構方法去重
例題
 public static void main(String[] args) {
            //創建集合對象
            List li = new ArrayList();
            //創建員工對象
            Employee emp0 = new Employee(2021, "張三", 18, 9000);
            Employee emp1 = new Employee(2022, "李四", 18, 9000);
            Employee emp2 = new Employee(2022, "李四", 18, 9000);
            Employee emp3 = new Employee(2022, "王五", 18, 9000);
            Employee emp4 = new Employee(2022, "李四", 21, 9000);
            //把Employee對象添加到list集合
            li.add(emp0);
            li.add(emp1);
            li.add(emp2);
            li.add(emp3);
            li.add(emp4);
            //2.要求員工不能夠存儲重復元素 [2種方法]
    //        //第一種
    //        //先創建新集合
    //        List newList = new ArrayList();
    //        //遍歷老集合
    //        for (Object obj : li) {
    //            if (!newList.contains(obj)) {//如果新集合里面不包括老集合的元素,則添加
    //                newList.add(obj);
    //            }
    //        }
    ////把新集合賦值給老集合
    //        li = newList;
    ////遍歷輸出
    //        for (Object obj : li) {
    //            System.out.println(obj);
    //        }

            System.out.println("--------------------");
            //第二種:選擇排序算法:第一個元素依次和后面的元素進行比較
            for (int i = 0; i < li.size(); i++) {
                for (int j = i+1; j <li.size() ; j++) {
                    if(li.get(i).equals(li.get(j))){
                        li.remove(j);
                        j--;
                    }
                }
            }
            for (Object obj:li) {
                System.out.println(obj);
            }

            //4.要求使用至少四種方式遍歷員工對象
            System.out.println("----------1------------");
            //第一種
            //Collection toArray
            Object[] objs = li.toArray();
            for (Object obj: objs) {
                System.out.println(obj);
            }
            System.out.println("----------2-------------------");
            //第二種 迭代器
            Iterator iterator = li.iterator();
            while (iterator.hasNext()){
                System.out.println(iterator.next());
            }
            System.out.println("------------3----------------");
            //foreach
            for (Object obj: li) {
                System.out.println(obj);
            }
            System.out.println("---------------4----------------");
    //for循環
            for (Iterator it  = li.iterator();it.hasNext(); System.out.println(it.next()) );
            System.out.println("------------5--------------");
    //list遍歷:列表迭代器
            ListIterator listIterator = li.listIterator();
    //先正向遍歷后才能逆向遍歷
            while (listIterator.hasNext()){
                System.out.println(listIterator.next());
            }

            System.out.println("----------------6--------------");
            while (listIterator.hasPrevious()){
                System.out.println(listIterator.previous());
            }
        }

7、常用方法

//添加
        // 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 clear() 移除此列表中的所有元素。

        //E remove(int index) 移除此列表中指定位置上的元素。
        //boolean remove(Object o) 移除此列表中首次出現的指定元素(如果存在)。
        //protected  void removeRange(int fromIndex, int toIndex) 移除列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素。

//判斷
        //boolean contains(Object o) 如果此列表中包含指定的元素,則返回 true。
        //boolean isEmpty() 如果此列表中沒有元素,則返回 true

//獲取
        // E get(int index) 返回此列表中指定位置上的元素。

        //int indexOf(Object o) 返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。

        // int size() 返回此列表的長度

//替換
        //E set(int index, E element) 用指定的元素替代此列表中指定位置上的元素。

//數組
        //Object[] toArray() 按適當順序(從第一個到最后一個元素)返回包含此列表中所有元素的數組。

二、LinkedList集合(實現類)

特點:

1、底層數據結構是:鏈表
2、具有堆棧、隊列或雙端隊列的操作。
3、有list集合特點和雙端隊列的特點
4、插入和刪除效率高,查詢和修改效率低
5、線程不安全
6、存儲有序
7、可以存儲null值
8、元素允許重復
9、可以通過索引操作節點
注意:使用LinkedList集合特有的方法,不能使用多態

創建對象格式

LinkedList<?> linkedList = new LinkedList<>();

特有方法

List集合的方法都有,下面介紹一下LinkedList的特有方法

//添加
       //void addFirst(E e) 將指定元素插入此列表的開頭。
        // void addLast(E e) 將指定元素添加到此列表的結尾。

        //boolean offerFirst(E e) 在此列表的開頭插入指定的元素。
        //boolean offerLast(E e) 在此列表末尾插入指定的元素。

        //void push(E e) 將元素推入此列表所表示的堆棧。

//移除
        //E removeFirst() 移除並返回此列表的第一個元素。
        //E removeLast() 移除並返回此列表的最后一個元素。相當於remove()

        //E pollFirst() 獲取並移除此列表的第一個元素;如果此列表為空,則返回 null。
        //E pollLast() 獲取並移除此列表的最后一個元素;如果此列表為空,則返回 null。

        //E pop() 從此列表所表示的堆棧處彈出第一個元素。相當於removeFirst()

// 獲取
        // E getFirst() 返回此列表的第一個元素。
        //E getLast() 返回此列表的最后一個元素。

        //E peekFirst() 獲取但不移除此列表的第一個元素;如果此列表為空,則返回 null。
        //E peekLast() 獲取但不移除此列表的最后一個元素;如果此列表為空,則返回 null。

三、Vector集合(實現類)

特點

1、底層數據結構是:數組(有索引、查詢快、增刪慢)
2、線程安全(單線程)

特有方法

// Enumeration<E> elements() 返回此向量的組件的枚舉。相當於迭代器iterator().hasNext()
//E elementAt(int index) 返回指定索引處的組件。 相當於迭代器iterator().Next()


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM