欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java按照添加順序的集合幾種方法詳解

 更新時間:2024年12月05日 10:23:28   作者:飛滕人生TYF  
這篇文章主要介紹了Java按照添加順序的集合幾種方法的相關(guān)資料,文中介紹了Java中五種常用的數(shù)據(jù)結(jié)構(gòu)(ArrayList、LinkedList、LinkedHashSet、LinkedHashMap、Stream)及其特點,適合不同的應(yīng)用場景,需要的朋友可以參考下

在 Java 中,若需要按照添加順序存儲和操作元素,有以下幾種數(shù)據(jù)結(jié)構(gòu)可供選擇。這些結(jié)構(gòu)在保留元素插入順序的同時提供了不同的功能特性。

1. 使用 ArrayList

特點

  • 有序性ArrayList 會按添加順序存儲元素。
  • 允許重復(fù):可以存儲重復(fù)的元素。
  • 隨機(jī)訪問:支持快速的按索引訪問操作,時間復(fù)雜度為 O(1)。
  • 線程不安全:默認(rèn)情況下非線程安全,需手動同步。

示例

import java.util.ArrayList;

public class ArrayListExample {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        System.out.println("ArrayList: " + list); // 輸出: [Apple, Banana, Cherry]
    }
}

2. 使用 LinkedList

特點

  • 有序性LinkedList 按照插入順序存儲元素。
  • 允許重復(fù):支持重復(fù)的元素。
  • 高效插入和刪除:在頭部或尾部插入、刪除操作時間復(fù)雜度為 O(1),但隨機(jī)訪問性能較差(時間復(fù)雜度 O(n))。
  • 雙向鏈表實現(xiàn):支持隊列、棧等功能操作。

示例

import java.util.LinkedList;

public class LinkedListExample {
    public static void main(String[] args) {
        LinkedList<String> list = new LinkedList<>();
        list.add("Apple");
        list.add("Banana");
        list.add("Cherry");

        System.out.println("LinkedList: " + list); // 輸出: [Apple, Banana, Cherry]
    }
}

3. 使用 LinkedHashSet

特點

  • 有序性LinkedHashSet 會按照元素的插入順序存儲。
  • 去重:不允許存儲重復(fù)元素。
  • 底層實現(xiàn):基于 HashMap 和雙向鏈表。
  • 適用場景:需要保留插入順序,同時需要去重的場景。

示例

import java.util.LinkedHashSet;

public class LinkedHashSetExample {
    public static void main(String[] args) {
        LinkedHashSet<String> set = new LinkedHashSet<>();
        set.add("Apple");
        set.add("Banana");
        set.add("Cherry");
        set.add("Apple"); // 重復(fù)元素將被忽略

        System.out.println("LinkedHashSet: " + set); // 輸出: [Apple, Banana, Cherry]
    }
}

4. 使用 LinkedHashMap

特點

  • 有序性LinkedHashMap 按照插入順序存儲鍵值對。
  • 允許重復(fù)值:鍵不能重復(fù),但值可以重復(fù)。
  • 快速訪問:支持通過鍵快速訪問值(時間復(fù)雜度為 O(1))。
  • 底層實現(xiàn):基于 HashMap 和雙向鏈表。
  • 適用場景:需要保留鍵值對的插入順序。

示例

import java.util.LinkedHashMap;

public class LinkedHashMapExample {
    public static void main(String[] args) {
        LinkedHashMap<Integer, String> map = new LinkedHashMap<>();
        map.put(1, "Apple");
        map.put(2, "Banana");
        map.put(3, "Cherry");

        System.out.println("LinkedHashMap: " + map); // 輸出: {1=Apple, 2=Banana, 3=Cherry}
    }
}

5. 使用 Stream 收集為有序集合

如果數(shù)據(jù)來源是無序的,例如 HashSet 或原始數(shù)組,Java 的 Stream API 提供了一種方式,將數(shù)據(jù)按插入順序轉(zhuǎn)換為有序集合。

示例:收集為 List

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamOrderedExample {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Cherry", "Apple", "Banana");

        List<String> orderedList = list.stream()
                                       .collect(Collectors.toList()); // 保持原始順序

        System.out.println("Ordered List: " + orderedList); // 輸出: [Cherry, Apple, Banana]
    }
}

示例:收集為 LinkedHashSet

import java.util.Arrays;
import java.util.LinkedHashSet;
import java.util.Set;
import java.util.stream.Collectors;

public class StreamToOrderedSet {
    public static void main(String[] args) {
        List<String> list = Arrays.asList("Apple", "Banana", "Cherry", "Apple");

        Set<String> orderedSet = list.stream()
                                     .collect(Collectors.toCollection(LinkedHashSet::new));

        System.out.println("Ordered Set: " + orderedSet); // 輸出: [Apple, Banana, Cherry]
    }
}

6. 各種數(shù)據(jù)結(jié)構(gòu)的性能對比

數(shù)據(jù)結(jié)構(gòu)插入順序允許重復(fù)時間復(fù)雜度:插入時間復(fù)雜度:查找時間復(fù)雜度:刪除備注
ArrayList保持插入順序允許O(1)(尾部)O(1)(按索引)O(n)(中間元素)適合頻繁訪問,但插入刪除較慢
LinkedList保持插入順序允許O(1)(頭/尾)O(n)(隨機(jī)訪問)O(1)(頭/尾)插入和刪除效率高,適合隊列場景
LinkedHashSet保持插入順序不允許O(1)O(1)O(1)適合需要順序且去重的場景
LinkedHashMap保持插入順序鍵不能重復(fù)O(1)O(1)O(1)適合需要順序且鍵值對存儲的場景
Stream按數(shù)據(jù)源的順序處理可控與數(shù)據(jù)源有關(guān)與數(shù)據(jù)源有關(guān)與數(shù)據(jù)源有關(guān)靈活,但主要用于一次性操作

總結(jié)

在 Java 中,以下集合可以按添加順序存儲數(shù)據(jù):

  • ArrayList 和 LinkedList:適合需要頻繁增刪、按順序訪問的場景。
  • LinkedHashSet 和 LinkedHashMap:適合需要順序存儲并去重或鍵值對操作的場景。
  • Stream:用于一次性操作,將無序數(shù)據(jù)轉(zhuǎn)為有序集合。

根據(jù)實際需求,選擇適合的數(shù)據(jù)結(jié)構(gòu)以滿足性能和功能需求。例如,若需要保留插入順序且去重,選擇 LinkedHashSet;若需要高效隨機(jī)訪問,則選擇 ArrayList。

到此這篇關(guān)于Java按照添加順序的集合幾種方法的文章就介紹到這了,更多相關(guān)Java按照添加順序的集合內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java多線程編程實現(xiàn)下雪效果

    java多線程編程實現(xiàn)下雪效果

    這篇文章主要介紹了java多線程編程實現(xiàn)下雪效果的相關(guān)資料,需要的朋友可以參考下
    2015-11-11
  • 淺談Java泛型讓聲明方法返回子類型的方法

    淺談Java泛型讓聲明方法返回子類型的方法

    下面小編就為大家?guī)硪黄獪\談Java泛型讓聲明方法返回子類型的方法。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • Springboot項目的搭建教程(分離出common父依賴)

    Springboot項目的搭建教程(分離出common父依賴)

    這篇文章主要介紹了Springboot項目的搭建教程(分離出common父依賴),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-01-01
  • java簡單模仿win10計算器

    java簡單模仿win10計算器

    這篇文章主要為大家詳細(xì)介紹了java簡單模仿win10計算器de,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • VSCode+Gradle搭建Java開發(fā)環(huán)境實現(xiàn)

    VSCode+Gradle搭建Java開發(fā)環(huán)境實現(xiàn)

    這篇文章主要介紹了VSCode+Gradle搭建Java開發(fā)環(huán)境實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-07-07
  • java爬蟲Jsoup主要類及功能使用詳解

    java爬蟲Jsoup主要類及功能使用詳解

    這篇文章主要為大家介紹了java爬蟲Jsoup主要類及功能使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-12-12
  • Spring體系的各種啟動流程詳解

    Spring體系的各種啟動流程詳解

    這篇文章主要給大家介紹了關(guān)于Spring體系的各種啟動流程,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-03-03
  • springboot實現(xiàn)SSE(Server?Sent?Event)的示例代碼

    springboot實現(xiàn)SSE(Server?Sent?Event)的示例代碼

    SSE?全稱Server?Sent?Event,直譯一下就是服務(wù)器發(fā)送事件,本文主要為大家詳細(xì)介紹了springboot實現(xiàn)SSE的相關(guān)知識,需要的可以參考一下
    2024-04-04
  • springboot2.x只需兩步快速整合log4j2的方法

    springboot2.x只需兩步快速整合log4j2的方法

    這篇文章主要介紹了springboot2.x只需兩步快速整合log4j2的方法,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-05-05
  • Spring RedisTemplate 批量獲取值的2種方式小結(jié)

    Spring RedisTemplate 批量獲取值的2種方式小結(jié)

    這篇文章主要介紹了Spring RedisTemplate 批量獲取值的2種方式小結(jié),具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06

最新評論