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

Java中ArrayList的8種淺拷貝方式示例代碼

 更新時間:2025年01月09日 10:02:24   作者:墨瑾軒  
這篇文章主要介紹了Java中ArrayList的8種淺拷貝方式的相關(guān)資料,講解了Java中ArrayList的淺拷貝概念,并詳細分享了八種實現(xiàn)淺拷貝的方法,可以幫助讀者更好地理解和選擇合適的淺拷貝方法,需要的朋友可以參考下

引言

嗨,小伙伴們!今天咱們來聊聊 Java 中的 ArrayList 淺拷貝。啥是淺拷貝呢?簡單來說,就是復(fù)制對象時只復(fù)制指向?qū)ο蟮囊?,而不?fù)制對象本身。那么,如何在 Java 中對 ArrayList 進行淺拷貝呢?別急,咱們這就開始揭秘!

什么是淺拷貝?

淺拷貝是指復(fù)制對象時只復(fù)制對象的引用地址,而不復(fù)制對象本身。因此,原始對象和拷貝對象共享同一份數(shù)據(jù)。在 Java 中,當我們對 ArrayList 進行淺拷貝時,我們只是復(fù)制了 ArrayList 中元素的引用,而不是元素本身。

ArrayList 淺拷貝的重要性

在日常開發(fā)中,我們經(jīng)常需要對 ArrayList 進行操作而不影響原集合。這時候,淺拷貝就能派上大用場了。下面我們來一起看看八種實現(xiàn)淺拷貝的方法吧!

方法一:使用構(gòu)造函數(shù)

使用 ArrayList 的構(gòu)造函數(shù)創(chuàng)建一個新的 ArrayList,并傳入原 ArrayList 作為參數(shù)。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = new ArrayList<>(originalList);

方法二:使用 addAll() 方法

通過將原 ArrayList 的所有元素添加到新 ArrayList 中來實現(xiàn)淺拷貝。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = new ArrayList<>();
shallowCopy.addAll(originalList);

方法三:使用 System.arraycopy()

雖然這個方法通常用于數(shù)組拷貝,但我們可以先將 ArrayList 轉(zhuǎn)換為數(shù)組,再進行拷貝,最后再轉(zhuǎn)換回 ArrayList。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
String[] array = originalList.toArray(new String[0]);
String[] shallowCopyArray = new String[array.length];
System.arraycopy(array, 0, shallowCopyArray, 0, array.length);
List<String> shallowCopy = new ArrayList<>(Arrays.asList(shallowCopyArray));

方法四:使用 Collections.copy()

這個方法非常方便,直接使用 Collections.copy() 方法即可完成淺拷貝。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = new ArrayList<>(originalList.size());
Collections.copy(shallowCopy, originalList);

方法五:使用 Java 8 Stream API

從 Java 8 開始,Stream API 提供了更簡潔的方式來實現(xiàn)淺拷貝。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = originalList.stream().collect(Collectors.toList());

方法六:使用 clone() 方法

如果 ArrayList 實現(xiàn)了 Cloneable 接口,我們可以直接使用 clone() 方法。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = null;
try {
    shallowCopy = (List<String>) originalList.clone();
} catch (CloneNotSupportedException e) {
    // Handle exception
}

注意:ArrayList 類默認實現(xiàn)了 Cloneable 接口,所以 clone() 方法可以直接使用。

方法七:使用 Arrays.asList() 方法

如果原 ArrayList 包含的是基本類型或者不可變對象,我們可以直接使用 Arrays.asList() 方法。

List<Integer> originalList = Arrays.asList(1, 2, 3);
List<Integer> shallowCopy = new ArrayList<>(Arrays.asList(originalList.toArray()));

方法八:使用 Guava 庫

Guava 庫提供了實用的集合工具類 Lists,可以輕松實現(xiàn)淺拷貝。

List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));
List<String> shallowCopy = Lists.newArrayList(originalList);

演練步驟

讓我們通過一個具體的例子來詳細了解這些淺拷貝的方法。

示例代碼

假設(shè)我們有一個原始的 ArrayList originalList,我們將使用上述方法對其進行淺拷貝。

import java.util.*;

public class ArrayListShallowCopyDemo {

    public static void main(String[] args) {
        List<String> originalList = new ArrayList<>(Arrays.asList("apple", "banana", "cherry"));

        // 方法一:使用構(gòu)造函數(shù)
        List<String> shallowCopy1 = new ArrayList<>(originalList);

        // 方法二:使用 addAll()
        List<String> shallowCopy2 = new ArrayList<>();
        shallowCopy2.addAll(originalList);

        // 方法三:使用 System.arraycopy()
        String[] array = originalList.toArray(new String[0]);
        String[] shallowCopyArray = new String[array.length];
        System.arraycopy(array, 0, shallowCopyArray, 0, array.length);
        List<String> shallowCopy3 = new ArrayList<>(Arrays.asList(shallowCopyArray));

        // 方法四:使用 Collections.copy()
        List<String> shallowCopy4 = new ArrayList<>(originalList.size());
        Collections.copy(shallowCopy4, originalList);

        // 方法五:使用 Java 8 Stream API
        List<String> shallowCopy5 = originalList.stream().collect(Collectors.toList());

        // 方法六:使用 clone()
        List<String> shallowCopy6 = null;
        try {
            shallowCopy6 = (List<String>) originalList.clone();
        } catch (CloneNotSupportedException e) {
            // Handle exception
        }

        // 方法七:使用 Arrays.asList() (適用于基本類型或不可變對象)
        List<Integer> originalIntList = Arrays.asList(1, 2, 3);
        List<Integer> shallowCopy7 = new ArrayList<>(Arrays.asList(originalIntList.toArray()));

        // 方法八:使用 Guava 庫
        List<String> shallowCopy8 = com.google.common.collect.Lists.newArrayList(originalList);

        // 輸出拷貝后的列表
        System.out.println("Original List: " + originalList);
        System.out.println("Shallow Copy 1: " + shallowCopy1);
        System.out.println("Shallow Copy 2: " + shallowCopy2);
        System.out.println("Shallow Copy 3: " + shallowCopy3);
        System.out.println("Shallow Copy 4: " + shallowCopy4);
        System.out.println("Shallow Copy 5: " + shallowCopy5);
        System.out.println("Shallow Copy 6: " + shallowCopy6);
        System.out.println("Shallow Copy 7: " + shallowCopy7);
        System.out.println("Shallow Copy 8: " + shallowCopy8);
    }
}

運行結(jié)果

當我們運行上面的程序后,可以看到所有拷貝后的列表都包含了原始列表的數(shù)據(jù)。

性能比較

每種淺拷貝方法都有其適用場景。例如,使用構(gòu)造函數(shù)或 addAll() 方法是最簡單且易于理解的;而使用 System.arraycopy() 或 Collections.copy() 在某些情況下可能更高效;使用 Java 8 的 Stream API 則提供了更簡潔的語法。

實際案例分析

讓我們通過一個實際的性能測試來看看不同淺拷貝方法的效果。

示例代碼

假設(shè)我們有一個包含大量數(shù)據(jù)的 ArrayList,我們將比較不同淺拷貝方法的性能差異。

總結(jié)

通過上述例子,我們可以總結(jié)出:

  • 不同的淺拷貝方法各有優(yōu)缺點,選擇合適的方法取決于具體的應(yīng)用場景。
  • 使用構(gòu)造函數(shù)或 addAll() 方法是最簡單直接的方式。
  • 使用 Java 8 Stream API 或 Guava 庫可以讓代碼看起來更加現(xiàn)代。

互動提問

你在項目中是如何實現(xiàn) ArrayList 的淺拷貝的?你更傾向于使用哪種方法呢?歡迎在評論區(qū)分享你的經(jīng)驗!

附錄

在實際使用中,還需要考慮以下幾點:

  • 性能考量:對于大型列表,某些方法可能更高效。
  • 內(nèi)存消耗:淺拷貝不會增加額外的對象內(nèi)存消耗。
  • 對象類型:對于可變對象,淺拷貝可能會導(dǎo)致意外的副作用。

附錄

為了進一步理解淺拷貝的過程,我們可以利用一些工具來輔助分析,例如使用 Java Profiler 來監(jiān)控內(nèi)存使用情況,以及使用 JUnit 測試框架來進行性能測試。

結(jié)語

希望這篇文章能幫助你更好地理解和運用 Java 中 ArrayList 的淺拷貝方法。

到此這篇關(guān)于Java中ArrayList的8種淺拷貝方式的文章就介紹到這了,更多相關(guān)Java中ArrayList淺拷貝方式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • mybatisPlus如何進行連接問題

    mybatisPlus如何進行連接問題

    MyBatisPlus提供了leftJoin方法支持左連接查詢,通過QueryWrapper構(gòu)建查詢條件,指定連接的表名和連接條件,通過select方法指定要查詢的字段
    2025-03-03
  • Spring Boot打開URL出現(xiàn)signin問題的解決

    Spring Boot打開URL出現(xiàn)signin問題的解決

    這篇文章主要介紹了Spring Boot打開URL出現(xiàn)signin問題的解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-12-12
  • SpringBoot啟動時自動執(zhí)行特定代碼的完整指南

    SpringBoot啟動時自動執(zhí)行特定代碼的完整指南

    Spring?Boot?提供了多種靈活的方式在應(yīng)用啟動時執(zhí)行初始化代碼,以下是所有可行方法的詳細說明和最佳實踐,大家可以根據(jù)自己的需求進行選擇
    2025-04-04
  • springboot+vue2+elementui實現(xiàn)時間段查詢方法

    springboot+vue2+elementui實現(xiàn)時間段查詢方法

    這篇文章主要介紹了springboot+vue2+elementui實現(xiàn)時間段查詢方法,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • idea添加數(shù)據(jù)庫圖文教程

    idea添加數(shù)據(jù)庫圖文教程

    這篇文章主要介紹了idea添加數(shù)據(jù)庫圖文教程,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • Java CountDownLatch完成異步回調(diào)實例詳解

    Java CountDownLatch完成異步回調(diào)實例詳解

    這篇文章主要介紹了Java CountDownLatch完成異步回調(diào)實例詳解的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • @WebFilter在SpringBoot無效的原因分析和解決方案

    @WebFilter在SpringBoot無效的原因分析和解決方案

    使用Ruoyi的demo部署成功后,發(fā)現(xiàn)js、css等靜態(tài)文件都進入了過濾器,但是發(fā)現(xiàn)靜態(tài)文件沒有使用瀏覽器緩存,新建BrowserCacheFilter.java并增加@WebFilter處理,應(yīng)用自動重啟后發(fā)現(xiàn)@WebFilter無效,所以本文給大家介紹了@WebFilter在SpringBoot無效的原因分析和解決方案
    2024-03-03
  • springboot項目如何引用公共模塊的bean

    springboot項目如何引用公共模塊的bean

    這篇文章主要介紹了springboot項目如何引用公共模塊的bean問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-08-08
  • Java設(shè)計模式之單例模式實例詳解【懶漢式與餓漢式】

    Java設(shè)計模式之單例模式實例詳解【懶漢式與餓漢式】

    這篇文章主要介紹了Java設(shè)計模式之單例模式,簡單說明了單例模式的原理并結(jié)合具體實例形式分析了單例模式中懶漢式與餓漢式的具體實現(xiàn)與使用技巧,需要的朋友可以參考下
    2017-09-09
  • Java?NIO中四大核心組件的使用詳解

    Java?NIO中四大核心組件的使用詳解

    Java?NIO(New?IO)是Java?1.4版本中引入的一套全新的IO處理機制,而NIO提供了四個核心組件:Channel、Buffer、Selector和SelectionKey,本文就來簡單講講這四大組件的使用吧
    2023-05-05

最新評論

黑龙江省| 祁连县| 潼关县| 蓬安县| 茂名市| 靖江市| 呼和浩特市| 个旧市| 怀集县| 皋兰县| 钦州市| 萝北县| 通山县| 泽普县| 濮阳县| 大英县| 通化县| 德州市| 石阡县| 都匀市| 稻城县| 安宁市| 保亭| 深水埗区| 闽侯县| 大石桥市| 乌兰浩特市| 镇江市| 桦甸市| 特克斯县| 抚远县| 日喀则市| 绵阳市| 武乡县| 漠河县| 伊通| 枣庄市| 迭部县| 夏邑县| 临沧市| 高雄县|