最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java?ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢

 更新時間:2025年03月25日 10:41:38   作者:鈕鈷祿·愛因斯晨  
這篇文章主要介紹了Java?ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢,ArrayList是一個動態(tài)數(shù)組,可以自動調整大小,并提供了豐富的操作方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下

一、引言

在 Java 編程中,我們經(jīng)常需要處理多個元素的數(shù)據(jù)。數(shù)組是一種基本的數(shù)據(jù)存儲方式,但它存在一些局限性,比如長度固定。為了更靈活地處理數(shù)據(jù),Java 提供了集合框架,它能根據(jù)元素的添加或刪除自動調整大小,并且提供了豐富的操作方法。

二、為什么需要集合

2.1 數(shù)組的弊端

當我們想要同時存儲多個元素時,首先會想到數(shù)組。例如:

int[] arr = new int[3];

數(shù)組的優(yōu)點是可以快速訪問元素,通過索引可以直接定位到元素。然而,數(shù)組的長度是固定的。一旦數(shù)組創(chuàng)建,其長度就不能再改變。如果我們需要存儲更多的元素,就需要創(chuàng)建一個新的數(shù)組,并將原數(shù)組的元素復制過去,這無疑增加了代碼的復雜性和性能開銷。

2.2 集合的優(yōu)勢

集合的出現(xiàn)解決了數(shù)組長度固定的問題。集合的長度是可變的,可以隨著元素的添加自動擴容。例如,我們可以使用 ArrayList 來存儲多個元素,而無需擔心長度的限制。

2.3 集合存儲數(shù)據(jù)類型的特點

2.3.1 數(shù)組存儲類型

數(shù)組既可以存儲基本數(shù)據(jù)類型,也可以存儲引用數(shù)據(jù)類型。例如:

int[] arr1 = new int[3]; // 存儲基本數(shù)據(jù)類型
class User {
    String name;
    int age;
    public User(String name, int age) {
        this.name = name;
        this.age = age;
    }
}
User u1 = new User("小紅", 13);
User u2 = new User("小明", 13);
User[] userArr = new User[2];
userArr[0] = u1;
userArr[1] = u2; // 存儲引用數(shù)據(jù)類型

2.3.2 集合存儲類型

集合只能存儲引用數(shù)據(jù)類型。如果要存儲基本數(shù)據(jù)類型,需要將其轉換為對應的包裝類。這是因為 Java 集合框架是基于泛型實現(xiàn)的,而泛型只能接受引用類型。例如,要存儲整數(shù),我們需要使用 Integer 包裝類:

import java.util.ArrayList;
ArrayList<Integer> list = new ArrayList<>();
list.add(1); // 自動裝箱,將 int 類型的 1 轉換為 Integer 類型

2.4 集合和數(shù)組的對比

對比項數(shù)組集合
長度長度固定,創(chuàng)建后不能改變長度可變,可根據(jù)元素數(shù)量自動調整
存儲類型可以存儲基本數(shù)據(jù)類型和引用數(shù)據(jù)類型只能存儲引用數(shù)據(jù)類型,存儲基本數(shù)據(jù)類型需使用包裝類
操作靈活性操作相對簡單,主要通過索引訪問和修改元素提供了豐富的操作方法,如添加、刪除、修改、查找等

三、集合:ArrayList

3.1 ArrayList 概述

ArrayList 是 Java 集合框架中最常用的類之一,它實現(xiàn)了 List 接口,底層基于數(shù)組實現(xiàn)。ArrayList 允許存儲重復元素,并且可以根據(jù)需要動態(tài)調整大小。

3.2 創(chuàng)建 ArrayList 對象

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        // 1. 創(chuàng)建集合的對象
        // 泛型:限定集合中存儲的數(shù)據(jù)類型
        ArrayList<String> list = new ArrayList<String>();
        // JDK 7 以后,泛型的類型可以省略,但是前后必須一致,就是右邊 <> 里面可以不寫
        // 此時我們創(chuàng)建的是 ArrayList 的對象,而 ArrayList 是 Java 已經(jīng)寫好的一個類
        // 這個類在底層做了一些處理,打印對象不是地址值,而是集合中的內容
        // 在展示的時候,它會拿 [] 把里面的內容給框起來
        System.out.println(list);
    }
}
// 運行結果: []

在上述代碼中,我們創(chuàng)建了一個 ArrayList 對象,并指定了泛型類型為 String,表示該集合只能存儲 String 類型的元素。

3.3 ArrayList 底層實現(xiàn)原理

ArrayList 底層使用一個動態(tài)數(shù)組來存儲元素。當我們創(chuàng)建一個 ArrayList 對象時,會默認分配一個初始容量(通常為 10)。當添加元素時,如果數(shù)組的容量不足,ArrayList 會自動進行擴容。擴容的過程是創(chuàng)建一個新的數(shù)組,其容量通常是原數(shù)組的 1.5 倍,然后將原數(shù)組的元素復制到新數(shù)組中。

3.4 ArrayList 成員方法

方法名說明
boolean add (E e)添加元素,返回值表示是否添加成功
boolean remove (E e)刪除指定元素,返回值表示是否刪除成功
E set (int index , E e)修改指定索引下的元素,返回原來的元素
E get (int index)獲取指定索引的元素
E remove (int index)刪除指定索引下的元素,返回原來的元素
int size ()集合的長度,也就是集合中元素的個數(shù)

3.4.1 添加元素

import java.util.ArrayList;

public class ArrayListAddExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        boolean b1 = list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        System.out.println(list);
        System.out.println(b1);
    }
}

add(E e) 方法用于向集合中添加元素,返回值表示是否添加成功。在 ArrayList 中,該方法通常返回 true,因為它總是可以成功添加元素。

3.4.2 刪除元素

import java.util.ArrayList;

public class ArrayListRemoveExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        list.remove("aaa");
        System.out.println(list);
    }
}

remove(E e) 方法用于刪除指定元素,返回值表示是否刪除成功。如果集合中存在該元素,則刪除并返回 true;否則返回 false

3.4.3 修改元素

import java.util.ArrayList;

public class ArrayListSetExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.set(0, "ddd");
        System.out.println(list);
    }
}

set(int index, E e) 方法用于修改指定索引下的元素,返回原來的元素。

3.4.4 獲取元素

import java.util.ArrayList;

public class ArrayListGetExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        String s = list.get(0);
        System.out.println(s);
    }
}

get(int index) 方法用于獲取指定索引的元素。

3.4.5 刪除指定索引的元素

import java.util.ArrayList;

public class ArrayListRemoveIndexExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        String removed = list.remove(0);
        System.out.println(list);
        System.out.println(removed);
    }
}

remove(int index) 方法用于刪除指定索引下的元素,返回原來的元素。

3.4.6 獲取集合長度

import java.util.ArrayList;

public class ArrayListSizeExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        int size = list.size();
        System.out.println(size);
    }
}

size() 方法用于獲取集合的長度,即集合中元素的個數(shù)。

3.4.7 遍歷集合

import java.util.ArrayList;

public class ArrayListTraversalExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("aaa");
        list.add("bbb");
        list.add("ccc");
        // 普通 for 循環(huán)遍歷
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        // 增強 for 循環(huán)遍歷
        for (String element : list) {
            System.out.println(element);
        }
        // 使用迭代器遍歷
        java.util.Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

在上述代碼中,我們展示了三種遍歷 ArrayList 的方式:普通 for 循環(huán)、增強 for 循環(huán)和迭代器。不同的遍歷方式適用于不同的場景,例如,普通 for 循環(huán)可以在遍歷過程中修改元素,而增強 for 循環(huán)和迭代器則更簡潔。

四、ArrayList 的性能分析

4.1 時間復雜度

  • 添加元素:在列表末尾添加元素的時間復雜度為 (O(1)),但在中間或開頭添加元素需要移動后續(xù)元素,時間復雜度為 (O(n))。
  • 刪除元素:刪除末尾元素的時間復雜度為 (O(1)),刪除中間或開頭元素需要移動后續(xù)元素,時間復雜度為 (O(n))。
  • 查找元素:通過索引查找元素的時間復雜度為 (O(1)),通過元素值查找元素需要遍歷列表,時間復雜度為 (O(n))。
  • 修改元素:通過索引修改元素的時間復雜度為 (O(1))。

4.2 空間復雜度

ArrayList 的空間復雜度主要取決于存儲的元素數(shù)量和數(shù)組的容量。在擴容時,會額外分配一定的空間,因此空間復雜度為 (O(n))。

五、總結

復雜度為 (O(1)),刪除中間或開頭元素需要移動后續(xù)元素,時間復雜度為 (O(n))。

  • 查找元素:通過索引查找元素的時間復雜度為 (O(1)),通過元素值查找元素需要遍歷列表,時間復雜度為 (O(n))。
  • 修改元素:通過索引修改元素的時間復雜度為 (O(1))。

5.2 空間復雜度

ArrayList 的空間復雜度主要取決于存儲的元素數(shù)量和數(shù)組的容量。在擴容時,會額外分配一定的空間,因此空間復雜度為 (O(n))。

ArrayList 是 Java 集合框架中一個非常實用的類,它提供了動態(tài)數(shù)組的功能,方便我們存儲和操作多個元素。通過了解 ArrayList 的底層實現(xiàn)原理、成員方法和性能特點,我們可以在實際開發(fā)中更加合理地使用它,提高代碼的性能和可維護性。同時,我們也應該注意 ArrayList 在某些場景下的局限性,例如在頻繁插入和刪除元素的場景下,性能可能不如其他集合類,如 LinkedList。

到此這篇關于Java ArrayList集合之解鎖數(shù)據(jù)存儲新姿勢的文章就介紹到這了,更多相關Java ArrayList集合數(shù)據(jù)存儲內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Java 自定義線程池和線程總數(shù)控制操作

    Java 自定義線程池和線程總數(shù)控制操作

    這篇文章主要介紹了Java 自定義線程池和線程總數(shù)控制操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • RocketMQ中的消息發(fā)送與消費詳解

    RocketMQ中的消息發(fā)送與消費詳解

    這篇文章主要介紹了RocketMQ中的消息發(fā)送與消費詳解,RocketMQ是一款高性能、高可靠性的分布式消息中間件,消費者是RocketMQ中的重要組成部分,消費者負責從消息隊列中獲取消息并進行處理,需要的朋友可以參考下
    2023-10-10
  • 基于Elasticsearch5.4的常見問題總結

    基于Elasticsearch5.4的常見問題總結

    下面小編就為大家分享一篇基于Elasticsearch5.4的常見問題總結,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-01-01
  • 淺談Java虛擬機對內部鎖的四種優(yōu)化方式

    淺談Java虛擬機對內部鎖的四種優(yōu)化方式

    這篇文章主要介紹了淺談Java虛擬機對內部鎖的四種優(yōu)化方式,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java匿名內部類的使用方法舉例詳解

    Java匿名內部類的使用方法舉例詳解

    Java中的匿名內部類是一種沒有名字的局部內部類,主要用于一次性實現(xiàn)接口或繼承類的場合,它們常見于GUI事件處理、多線程編程等場景,簡化代碼結構同時提高開發(fā)效率,需要的朋友可以參考下
    2024-09-09
  • Swagger文檔自動生成PDF/HTML/Word解決方案詳細指南

    Swagger文檔自動生成PDF/HTML/Word解決方案詳細指南

    本指南詳細介紹了Swagger?YAML/JSON定義、Swagger?UI的使用、Swagger轉為Markdown格式以及Markdown轉為PDF/HTML/Word的過程,包括工具如Pandoc的運用,并提供了一個Spring?Boot應用集成Swagger2和Swagger2Markup的示例,闡述了API文檔的生成流程,感興趣的朋友一起看看吧
    2025-08-08
  • Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    Java SpringMVC 異常處理SimpleMappingExceptionResolver類詳解

    這篇文章主要介紹了SpringMVC 異常處理SimpleMappingExceptionResolver類詳解,本篇文章通過簡要的案例,講解了該項技術的了解與使用,以下就是詳細內容,需要的朋友可以參考下
    2021-09-09
  • Java面向對象基礎知識之數(shù)組和鏈表

    Java面向對象基礎知識之數(shù)組和鏈表

    這篇文章主要介紹了Java面向對象的之數(shù)組和鏈表,文中有非常詳細的代碼示例,對正在學習java基礎的小伙伴們有很好的幫助,需要的朋友可以參考下
    2021-11-11
  • 使用Springboot處理跨域的方式

    使用Springboot處理跨域的方式

    這篇文章主要介紹了使用Springboot處理跨域的方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-09-09
  • jsoup如何爬取圖片到本地

    jsoup如何爬取圖片到本地

    這篇文章主要為大家詳細介紹了jsoup如何爬取圖片到本地,jsoup爬取網(wǎng)站信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-01-01

最新評論

上饶市| 莲花县| 义乌市| 尚义县| 冷水江市| 常山县| 新沂市| 吉木萨尔县| 固原市| 赤城县| 油尖旺区| 陆良县| 灯塔市| 秦皇岛市| 白水县| 同德县| 邮箱| 宁陕县| 万宁市| 荣成市| 嘉善县| 财经| 顺平县| 昌都县| 五华县| 临清市| 即墨市| 浮山县| 定西市| 商洛市| 运城市| 南昌县| 临沭县| 西乌珠穆沁旗| 太和县| 新竹县| 曲水县| 马边| 明光市| 远安县| 长乐市|