国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java集合-List

這篇具有很好參考價(jià)值的文章主要介紹了Java集合-List。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

一、List集合概述

java.util.List接口繼承自Collection接口,是單列集合的一個(gè)重要分支,習(xí)慣性地會(huì)將實(shí)現(xiàn)了List接口的對(duì)象稱為List集合,在List集合中允許出現(xiàn)重復(fù)的元素,所有的元素是以一種線性方式進(jìn)行存儲(chǔ)的,在程序中可以通過索引來訪問集合中的指定元素,另外List集合還有一個(gè)特點(diǎn)就是元素有序,即元素的存入順序和取出順序一致

List特性:

  • 有序
    • 存取有順序
  • 有下標(biāo)
    • 是一個(gè)帶有索引的集合,通過索引就可以精確的操作集合中的元素(與數(shù)組的索引一個(gè)道理)
  • 可以重復(fù)
    • 添加的元素可以重復(fù)

List實(shí)現(xiàn)類架構(gòu)圖、

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

二、ArrayList

1、什么是ArrayList類

java.util.ArrayList是大小可變的數(shù)組的實(shí)現(xiàn),是單列集合List的實(shí)現(xiàn)類,存儲(chǔ)在內(nèi)的數(shù)據(jù)稱為元素,此類提供一些方法來操作內(nèi)部存儲(chǔ)的元素,ArrayList中可不斷添加元素,其大小也自動(dòng)增長
java.util.ArrayList集合數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)是數(shù)組結(jié)構(gòu),元素增刪慢,查找快,由于日常開發(fā)中使用最多的功能為查詢數(shù)據(jù)、遍歷數(shù)據(jù),所以ArrayList是常用的集合。

2、ArrayList常用方法

方法 說明
add(E e) 把指定的元素添加到集合中
set(int index , E e) 根據(jù)下標(biāo)替換對(duì)象
subList(int fromIndex , int toIndex) 截取
toArray()
toArray(T[])
集合轉(zhuǎn)換數(shù)組
contains(E e) 判斷集合中是否包含指定的元素
get(int index) 根據(jù)下標(biāo)獲取對(duì)應(yīng)的元素
indexOf(E e) 獲取指定的元素在集合中第一次出現(xiàn)的索引 -1【未找到】
isEmpty() 判斷集合是否為空
size() 獲取集合的長度
clear() 清空集合
remove(int index) 根本下標(biāo)刪除元素

代碼案例:

package cn.com.example11;

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

public class ArrayListClass {

    static ArrayList arrayList;

    static {
        arrayList = new ArrayList();
        arrayList.add(1);
        arrayList.add(2);
        arrayList.add(3);
        arrayList.add(4);
    }


    /**
     * 添加元素
     */
    public static void addHandler(){

        arrayList.add(1);
        arrayList.add(2);

        System.out.println(arrayList);

    }


    /**
     * 根據(jù)下標(biāo)替換對(duì)象
     */
    public static void setHandler(){
        arrayList.set(1,"admin");

        System.out.println(arrayList);
    }

    /**
     * 截取
     */
    public static void subListHandler(){

        List list = arrayList.subList(1,3);

        System.out.println(list);
        System.out.println(arrayList);
    }

    /**
     * 集合轉(zhuǎn)換數(shù)組
     */
    public static void toArrayHandler(){

        Object[] arr = arrayList.toArray();

        System.out.println(arr[0]);
        System.out.println(arrayList);

    }

    /**
     * 判斷集合中是否包含指定的元素
     */
    public static void containersHandler(){

        boolean b = arrayList.contains("admin");

        System.out.println(b);
        System.out.println(arrayList);

    }

    /**
     * 根據(jù)下標(biāo)獲取對(duì)應(yīng)的元素
     */
    public static void getHandler(){

        String value = (String)arrayList.get(1);

        System.out.println(value);
        System.out.println(arrayList);

    }

    /**
     * 獲取指定的元素在集合中第一次出現(xiàn)的索引
     */
    public static void indexOfHandler(){

        int index = arrayList.indexOf("admin");

        System.out.println(index);
        System.out.println(arrayList);

    }

    /**
     * 判斷集合是否為空
     */
    public static void isEmptyHandler(){

        boolean b = arrayList.isEmpty();

        System.out.println(b);
        System.out.println(arrayList);

    }

    /**
     * 獲取集合長度
     */
    public static void sizeHandler(){

        int count = arrayList.size();

        System.out.println(count);
        System.out.println(arrayList);

    }

    /**
     * 根據(jù)下標(biāo)刪除元素
     */
    public static void removeHandler(){

        String value = (String) arrayList.remove(1);

        System.out.println(value);
        System.out.println(arrayList);


    }

    /**
     * 清空集合
     */
    public static void clearHandler(){

        arrayList.clear();

        System.out.println(arrayList);

    }

    public static void main(String[] args) {

        addHandler();
        setHandler();
        subListHandler();
        toArrayHandler();
        containersHandler();
        getHandler();
        indexOfHandler();
        isEmptyHandler();
        sizeHandler();
        removeHandler();
        clearHandler();


    }
}

運(yùn)行結(jié)果:

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

3、ArrayList遍歷

3.1、普通for循環(huán)

代碼案例:

/**
     * 普通for循環(huán)
     */
    public static void forHandler(){

        for (int i = 0; i < arrayList.size(); i++) {
            System.out.println(arrayList.get(i));
        }

    }

3.2、增強(qiáng)for循環(huán)

代碼案例:

/**
     * 增強(qiáng)for循環(huán)
     */
    public static void forEachHandler(){

        for (Object o : arrayList) {
            System.out.println(o);
        }

    }

3.3、Iterator迭代器

代碼案例:

/**
     * Iterator迭代器
     */
    public static void iteratorHandler(){

        Iterator iterator = arrayList.iterator();

        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }

    }

4、ArrayList數(shù)據(jù)結(jié)構(gòu)

ArrayList數(shù)據(jù)結(jié)構(gòu):數(shù)組結(jié)構(gòu)

ArrayList查詢數(shù)據(jù)快,可根據(jù)下標(biāo)查詢,但是增刪速度慢,一旦在某個(gè)位置插入數(shù)據(jù),后面所有數(shù)據(jù)都必須往后移動(dòng)

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

三、LinkedList

java.util.LinkedList集合數(shù)據(jù)存儲(chǔ)的結(jié)構(gòu)是鏈表結(jié)構(gòu),方便元素添加、刪除的集合。

LinkedList是一個(gè)雙向鏈表

1、LinkedList常用方法

方法 說明
public void addFirst(E e) 將指定元素插入集合的開頭
public void addLast(E e) 將指定元素插入集合的結(jié)尾
public E getFirst() 返回集合第一個(gè)元素
public E getLast() 返回集合最后一個(gè)元素
public E removeFirst() 移除并返回集合的第一個(gè)元素
public E removeLast() 移除并返回最后一個(gè)元素
public E pop() 從集合所表示的堆棧中彈出一個(gè)元素
public void push(E e) 將元素推入集合所表示的堆棧中
public boolean isEmpty() 判斷集合是否為空

代碼案例:

package cn.com.example11;

import java.util.LinkedList;

public class LinkedListClass {

    public static LinkedList<Integer> linkedList;

    static {
        linkedList = new LinkedList<>();
        linkedList.add(1);
        linkedList.add(2);
        linkedList.add(3);
        linkedList.add(4);
    }

    /**
     * 將指定元素插入集合的開頭
     */
    public static void addFirstHandler(){

        linkedList.addFirst(0);

        System.out.println(linkedList); // [0, 1, 2, 3, 4]

    }

    /**
     * 將指定元素插入集合的結(jié)尾
     */
    public static void addLastHandler(){

        linkedList.addLast(5);

        System.out.println(linkedList); // [0, 1, 2, 3, 4, 5]

    }

    /**
     * 返回集合第一個(gè)元素
     */
    public static void getFirstHandler(){

        Integer value = linkedList.getFirst();

        System.out.println(value); // 0

    }

    /**
     * 返回集合最后一個(gè)元素
     */
    public static void getLastHandler(){

        Integer value = linkedList.getLast();

        System.out.println(value); // 5

    }

    /**
     * 移除并返回集合的第一個(gè)元素
     */
    public static void removeFirstHandler(){

        Integer value = linkedList.removeFirst();

        System.out.println(linkedList); // [1, 2, 3, 4, 5]
        System.out.println(value); // 0

    }

    /**
     * 移除并返回集合的最后一個(gè)元素
     */
    public static void removeLastHandler(){

        Integer value = linkedList.removeLast();

        System.out.println(linkedList); // [1, 2, 3, 4]
        System.out.println(value); // 5

    }

    /**
     * 從集合所表示的堆棧中彈出一個(gè)元素
     */
    public static void popHandler(){

        Integer value = linkedList.pop();

        System.out.println(linkedList); // [2, 3, 4]

        System.out.println(value); // 2


    }

    /**
     * 將元素推入集合所表示的堆棧中
     */
    public static void pushHandler(){

        linkedList.push(6);

        System.out.println(linkedList); // [6, 2, 3, 4]

    }

    /**
     * 判斷集合是否為空
     */
    public static void isEmptyHandler(){

        boolean b = linkedList.isEmpty();

        System.out.println(b); // false

    }


    public static void main(String[] args) {

        addFirstHandler();
        addLastHandler();
        getFirstHandler();
        getLastHandler();
        removeFirstHandler();
        removeLastHandler();
        popHandler();
        pushHandler();
        isEmptyHandler();
    }

}

2、LinkedList遍歷

2.1、增強(qiáng)for循環(huán)

代碼案例:

/**
     * 增強(qiáng)for循環(huán)
     */
    public static void forEachHandler(){

        for (Integer integer : linkedList) {
            System.out.println(integer);
        }

    }

2.2、Iterator迭代器

代碼案例:

/**
     * Iterator遍歷
     */
    public static void iteratorHandler(){

        Iterator<Integer> iterator = linkedList.iterator();

        while (iterator.hasNext()){
            System.out.println(iterator.next());
        }
    }

3、LinkedList數(shù)據(jù)結(jié)構(gòu)

LinkedList數(shù)據(jù)結(jié)構(gòu):雙向鏈表

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

四、ArrayList和LinkedList區(qū)別

1、ArrayList和LinkedList結(jié)構(gòu)不同

ArrayList和LinkedList都是集合類,但是他們有兩種不同的實(shí)現(xiàn)方式,ArrayList底層維護(hù)的是一個(gè)動(dòng)態(tài)數(shù)組,LinkedList底層維護(hù)的是一個(gè)雙向鏈表

ArrayList數(shù)據(jù)結(jié)構(gòu)

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

LinkedList數(shù)據(jù)結(jié)構(gòu)

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言

2、效率不同

2.1、添加效率

ArrayList和LinkedList分別插入1000萬條數(shù)據(jù)測試
ArrayList插入1000萬條數(shù)據(jù)耗時(shí)420毫秒
LinkedList插入1000萬條數(shù)據(jù)耗時(shí)8900毫秒

ArrayList插入1000萬條數(shù)據(jù):

public static void addArrayList(){

        long start = System.currentTimeMillis();

        ArrayList<Integer> arrayList = new ArrayList<>();

        for (int i = 1; i <= 10000000 ; i++) {
            arrayList.add(i);
        }


        long end = System.currentTimeMillis();

        System.out.println("耗時(shí):" + (end - start));
    }

LinkedList插入1000萬條數(shù)據(jù):

public static void addLinkedList(){

        long start = System.currentTimeMillis();

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

        for (int i = 1; i <= 10000000 ; i++) {
            linkedList.add(i);
        }


        long end = System.currentTimeMillis();

        System.out.println("耗時(shí):" + (end - start));

    }

很明顯普通的插入數(shù)據(jù),ArrayList比LinkedList要快很多,可為什么普遍說法都是LinkedList添加刪除快,這里是有前提條件,LinkedList在兩種情況下插入數(shù)據(jù)比ArrayList快

a、往集合中間插入數(shù)據(jù)時(shí)ArrayList比LinkedList慢

ArrayList往集合中間插入數(shù)據(jù)要做兩個(gè)事:把之前的數(shù)據(jù)挪開賦值到新的數(shù)組位置,然后把需要插入的數(shù)據(jù)插入到數(shù)組對(duì)應(yīng)的位置。

LinkedList只要修改對(duì)應(yīng)位置數(shù)據(jù)prev和next對(duì)象的指向就可以了。

b、ArrayList正好擴(kuò)容的時(shí)候添加數(shù)據(jù)要比LinkedList慢

因?yàn)锳rrayList維護(hù)的是一個(gè)數(shù)組,所以當(dāng)容量到達(dá)閥值時(shí)就會(huì)進(jìn)行擴(kuò)容,然后會(huì)重新分配數(shù)據(jù)的位置,當(dāng)數(shù)組擴(kuò)容的時(shí)候速度也要比LinkedList慢。

2.2、刪除數(shù)據(jù)

ArrayList要比LinkedList慢,原理和往集合中間插入數(shù)據(jù)是一樣的,ArrayList每次刪除數(shù)據(jù)都要對(duì)數(shù)組重組。

2.3、查詢數(shù)據(jù)

ArrayList比LinkedList快。
原理是ArrayList是數(shù)組有下標(biāo)標(biāo)記數(shù)據(jù)位置,查詢時(shí)直接返回對(duì)應(yīng)數(shù)組下標(biāo)數(shù)據(jù)即可。

LinkedList是鏈表,沒有對(duì)數(shù)據(jù)進(jìn)行位置標(biāo)記,每次獲取固定位置的數(shù)據(jù)都需要循環(huán)遍歷鏈表和linkedList.get(10),就需要循環(huán)10次找到對(duì)應(yīng)的節(jié)點(diǎn)返回。

五、Vector

Vector類可以實(shí)現(xiàn)可增長的對(duì)象數(shù)組,和ArrayList差不多
VectorJDK1.0出現(xiàn)的,從JDK1.2開始對(duì)該類進(jìn)行改進(jìn),可以實(shí)現(xiàn)List接口,但是Vector是同步的,單線程,那么速度比較慢,所以被ArrayList替代

java list,JavaSe,java,list,數(shù)據(jù)結(jié)構(gòu),算法,開發(fā)語言文章來源地址http://www.zghlxwxcb.cn/news/detail-549906.html

到了這里,關(guān)于Java集合-List的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 探索Java集合框架—數(shù)據(jù)結(jié)構(gòu)、ArrayList集合

    探索Java集合框架—數(shù)據(jù)結(jié)構(gòu)、ArrayList集合

    Java集合的使用相信大家都已經(jīng)非常得心應(yīng)手,但是我們怎么做到知其然,更知其所以然這種出神入化的境界呢?我們揭開集合框架底層神秘面紗來一探究竟 目錄 一、背景介紹 二、思路方案 數(shù)據(jù)結(jié)構(gòu)是什么? 數(shù)據(jù)結(jié)構(gòu)可以分為線性和非線性兩種數(shù)據(jù)結(jié)構(gòu) 線性數(shù)據(jù)結(jié)構(gòu): 非

    2024年02月10日
    瀏覽(26)
  • 【JavaSE專欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    【JavaSE專欄89】Java字符串和XML數(shù)據(jù)結(jié)構(gòu)的轉(zhuǎn)換,高效靈活轉(zhuǎn)變數(shù)據(jù)

    作者主頁 :Designer 小鄭 作者簡介 :3年JAVA全棧開發(fā)經(jīng)驗(yàn),專注JAVA技術(shù)、系統(tǒng)定制、遠(yuǎn)程指導(dǎo),致力于企業(yè)數(shù)字化轉(zhuǎn)型,CSDN學(xué)院、藍(lán)橋云課認(rèn)證講師。 主打方向 :Vue、SpringBoot、微信小程序 本文講解了 XML 的概念,以及 Java 中 XML 和字符串的轉(zhuǎn)換方法,并給出了樣例代碼。

    2024年02月09日
    瀏覽(32)
  • 【數(shù)據(jù)結(jié)構(gòu)一】初始Java集合框架(前置知識(shí))

    【數(shù)據(jù)結(jié)構(gòu)一】初始Java集合框架(前置知識(shí))

    ? ? ? ?Java語言在設(shè)計(jì)之初有一個(gè)非常重要的理念便是:write once,run anywhere!所以Java中的數(shù)據(jù)結(jié)構(gòu)是已經(jīng)被設(shè)計(jì)者封裝好的了,我們只需要實(shí)例化出想使用的對(duì)象,便可以操作相應(yīng)的數(shù)據(jù)結(jié)構(gòu)了,本篇文章中我會(huì)向大家簡單 介紹一下什么是數(shù)據(jù)結(jié)構(gòu) ,以及 對(duì)Java中常用的數(shù)

    2024年02月04日
    瀏覽(26)
  • java八股文面試[數(shù)據(jù)結(jié)構(gòu)]——集合框架

    java八股文面試[數(shù)據(jù)結(jié)構(gòu)]——集合框架

    Java集合類主要由兩個(gè)根接口Collection和Map派生出來的。 Collection派生出了三個(gè)子接口: Map接口派生: Map代表的是存儲(chǔ)key-value對(duì)的集合,可根據(jù)元素的key來訪問value。 ?因此Java集合大致也可分成 List、Set、Queue、Map四種接口體系 。 List代表了有序可重復(fù)集合,可直接根據(jù)元素的索

    2024年02月11日
    瀏覽(59)
  • JAVA數(shù)據(jù)結(jié)構(gòu)篇--13線程安全的Set 集合

    前言:java 中用于存放不重復(fù)元素的set 集合,其中無序的HashSet,以及有序的LinkedHashSet和TreeSet 都是非線程安全的,那么多線程環(huán)境下,我們要存放不重復(fù)的元素,需要使用哪種集合進(jìn)行數(shù)據(jù)存??; 1 使用: 2 過程: 2.1 放入獲取元素: Collections.synchronizedSet:通過使用synchron

    2024年02月16日
    瀏覽(21)
  • 數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))-集合與時(shí)間和空間復(fù)雜度

    數(shù)據(jù)結(jié)構(gòu)(Java實(shí)現(xiàn))-集合與時(shí)間和空間復(fù)雜度

    什么是集合框架 Java 集合框架 Java Collection Framework ,又被稱為容器 container ,是定義在 java.util 包下的一組接口 interfaces 和其實(shí)現(xiàn)類 classes 。 什么是數(shù)據(jù)結(jié)構(gòu) 數(shù)據(jù)結(jié)構(gòu)(Data Structure)是計(jì)算機(jī)存儲(chǔ)、組織數(shù)據(jù)的方式,指相互之間存在一種或多種特定關(guān)系的數(shù)據(jù)元素的 集合。 容器

    2024年02月12日
    瀏覽(20)
  • JAVA基礎(chǔ)學(xué)習(xí)筆記-day14-數(shù)據(jù)結(jié)構(gòu)與集合源碼2

    JAVA基礎(chǔ)學(xué)習(xí)筆記-day14-數(shù)據(jù)結(jié)構(gòu)與集合源碼2

    博文主要是自己學(xué)習(xí)JAVA基礎(chǔ)中的筆記,供自己以后復(fù)習(xí)使用,參考的主要教程是B站的 尚硅谷宋紅康2023大數(shù)據(jù)教程 君以此始,亦必以終?!笄鹈鳌蹲髠鳌ば辍?7.1 List接口特點(diǎn) List集合所有的元素是以一種 線性方式 進(jìn)行存儲(chǔ)的,例如,存元素的順序是11、22、33。那

    2024年01月18日
    瀏覽(23)
  • 【Java集合類面試二十六】、介紹一下ArrayList的數(shù)據(jù)結(jié)構(gòu)?

    【Java集合類面試二十六】、介紹一下ArrayList的數(shù)據(jù)結(jié)構(gòu)?

    文章底部有個(gè)人公眾號(hào): 熱愛技術(shù)的小鄭 。主要分享開發(fā)知識(shí)、學(xué)習(xí)資料、畢業(yè)設(shè)計(jì)指導(dǎo)等。有興趣的可以關(guān)注一下。為何分享? 踩過的坑沒必要讓別人在再踩,自己復(fù)盤也能加深記憶。利己利人、所謂雙贏。 面試官:介紹一下ArrayList的數(shù)據(jù)結(jié)構(gòu)? 參考答案: ArrayList的底

    2024年02月08日
    瀏覽(17)
  • 【數(shù)據(jù)結(jié)構(gòu)】搜索樹 與 Java集合框架中的Set,Map

    【數(shù)據(jù)結(jié)構(gòu)】搜索樹 與 Java集合框架中的Set,Map

    作者主頁:paper jie_博客 本文作者:大家好,我是paper jie,感謝你閱讀本文,歡迎一建三連哦。 本文錄入于《JAVA數(shù)據(jù)結(jié)構(gòu)》專欄,本專欄是針對(duì)于大學(xué)生,編程小白精心打造的。筆者用重金(時(shí)間和精力)打造,將javaSE基礎(chǔ)知識(shí)一網(wǎng)打盡,希望可以幫到讀者們哦。 其他專欄:《

    2024年02月08日
    瀏覽(31)
  • java -- 簡單的數(shù)據(jù)結(jié)構(gòu)、List接口和Collections類

    數(shù)據(jù)結(jié)構(gòu) : 數(shù)據(jù)用什么樣的方式組合在一起。 數(shù)據(jù)存儲(chǔ)的常用結(jié)構(gòu)有:棧、隊(duì)列、數(shù)組、鏈表 棧: stack ,又稱堆棧,它是運(yùn)算受限的線性表,其限制是僅允許在標(biāo)的一端進(jìn)行插入和刪除操作,不允許在其他任何位置進(jìn)行添加、查找、刪除等操作。 采用該結(jié)構(gòu)的集合,對(duì)元素

    2023年04月10日
    瀏覽(22)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包