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

Java集合框架實(shí)戰(zhàn)應(yīng)用完全指南

 更新時(shí)間:2025年09月03日 08:53:38   作者:三水  
本文總結(jié)Java集合框架中ArrayList、LinkedList、HashSet、LinkedHashSet和TreeSet的使用場(chǎng)景,結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧

一、ArrayList在具體開發(fā)中的使用場(chǎng)景

1、動(dòng)態(tài)數(shù)據(jù)存儲(chǔ)

ArrayList常用于需要?jiǎng)討B(tài)增減數(shù)據(jù)的場(chǎng)景,比如讀取數(shù)據(jù)庫(kù)查詢結(jié)果時(shí),結(jié)果集數(shù)量不確定。其自動(dòng)擴(kuò)容特性避免了數(shù)組手動(dòng)擴(kuò)容的麻煩。

2、緩存實(shí)現(xiàn)

作為內(nèi)存緩存容器時(shí),ArrayList的隨機(jī)訪問(wèn)效率(O(1))比LinkedList更適合高頻讀取操作。例如電商系統(tǒng)中的商品分類列表緩存。

3、批量數(shù)據(jù)處理

處理CSV文件或Excel導(dǎo)入時(shí),ArrayList可臨時(shí)存儲(chǔ)解析后的數(shù)據(jù)記錄。其toArray()方法便于后續(xù)批量插入數(shù)據(jù)庫(kù)。

4、非線程安全場(chǎng)景

在Web應(yīng)用的單個(gè)請(qǐng)求生命周期內(nèi),如Controller層接收前端傳遞的JSON數(shù)組數(shù)據(jù),轉(zhuǎn)換為ArrayList進(jìn)行業(yè)務(wù)處理。

二、Java中LinkedList在開發(fā)中的具體使用場(chǎng)景

1、鏈表數(shù)據(jù)結(jié)構(gòu)的特點(diǎn)

LinkedList基于雙向鏈表實(shí)現(xiàn),插入和刪除操作的時(shí)間復(fù)雜度為O(1),但隨機(jī)訪問(wèn)需要O(n)時(shí)間。與ArrayList相比,更適合頻繁修改的場(chǎng)景,但空間開銷更大。

2、頻繁插入刪除操作

需要頻繁在列表中間進(jìn)行添加或刪除元素時(shí),LinkedList性能優(yōu)勢(shì)明顯。例如實(shí)現(xiàn)撤銷操作的歷史記錄功能,每次操作都需在特定位置插入新記錄。

LinkedList<String> history = new LinkedList<>();
history.addFirst("Action 1");  // 添加到頭部
history.addLast("Action 2");   // 添加到尾部
history.removeFirst();         // 移除頭部元素

3、實(shí)現(xiàn)隊(duì)列和雙端隊(duì)列

LinkedList實(shí)現(xiàn)了Deque接口,可以作為普通隊(duì)列或雙端隊(duì)列使用。這在任務(wù)調(diào)度、消息處理等場(chǎng)景非常實(shí)用。

Deque<Integer> queue = new LinkedList<>();
queue.offer(1);      // 入隊(duì)
queue.poll();        // 出隊(duì)
// 作為雙端隊(duì)列使用
queue.offerFirst(0); // 頭部插入
queue.offerLast(2);  // 尾部插入

4、內(nèi)存敏感場(chǎng)景

當(dāng)內(nèi)存碎片化嚴(yán)重或需要節(jié)省連續(xù)內(nèi)存空間時(shí),LinkedList的非連續(xù)存儲(chǔ)特性更具優(yōu)勢(shì)。每個(gè)元素獨(dú)立存儲(chǔ),只需通過(guò)指針連接。

5、LRU緩存實(shí)現(xiàn)

結(jié)合HashMap和LinkedList可以實(shí)現(xiàn)高效的LRU緩存。LinkedList維護(hù)訪問(wèn)順序,HashMap提供快速查找。

LinkedHashMap<String, Object> cache = new LinkedHashMap<>(16, 0.75f, true) {
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_SIZE;
    }
};

6、大數(shù)據(jù)量分塊處理

處理超長(zhǎng)列表時(shí),LinkedList的迭代器可以配合分頁(yè)機(jī)制逐塊處理數(shù)據(jù),避免一次性加載全部數(shù)據(jù)導(dǎo)致內(nèi)存溢出。

Iterator<T> iterator = bigList.iterator();
int batchSize = 1000;
while(iterator.hasNext()) {
    List<T> batch = new ArrayList<>(batchSize);
    for(int i=0; i<batchSize && iterator.hasNext(); i++) {
        batch.add(iterator.next());
    }
    processBatch(batch);
}

7、緩存去重

HashSet常用于緩存系統(tǒng)中快速判斷元素是否已存在。例如在用戶行為分析中,避免重復(fù)記錄相同操作。其O(1)時(shí)間復(fù)雜度的contains()方法比遍歷列表更高效。

Set<String> userActions = new HashSet<>();
if (!userActions.contains(actionId)) {
    userActions.add(actionId);
    // 記錄新行為
}

三、Java中HashSet在開發(fā)中的具體使用場(chǎng)景

1、數(shù)據(jù)過(guò)濾

處理批量數(shù)據(jù)時(shí)用于快速剔除重復(fù)項(xiàng)。比如從數(shù)據(jù)庫(kù)查詢結(jié)果中提取唯一值,或合并多個(gè)列表時(shí)自動(dòng)去重。相比手動(dòng)比較,HashSet能顯著減少代碼量。

List<Integer> rawData = Arrays.asList(1,2,2,3);
Set<Integer> uniqueData = new HashSet<>(rawData); // 自動(dòng)去重

2、關(guān)系判斷

用于快速判斷集合關(guān)系,如檢測(cè)兩個(gè)數(shù)據(jù)集的交集、并集或差集。通過(guò)retainAll()/addAll()等方法,可以高效實(shí)現(xiàn)集合運(yùn)算。

Set<String> setA = new HashSet<>(Arrays.asList("a","b"));
Set<String> setB = new HashSet<>(Arrays.asList("b","c"));
setA.retainAll(setB); // 取交集后setA=["b"]

3、臨時(shí)唯一標(biāo)識(shí)存儲(chǔ)

在事務(wù)處理中臨時(shí)存儲(chǔ)唯一標(biāo)識(shí)符,如訂單號(hào)、會(huì)話ID等。利用HashSet的快速查找特性,能夠立即驗(yàn)證標(biāo)識(shí)是否已被使用。

4、圖算法輔助

在圖算法中記錄已訪問(wèn)節(jié)點(diǎn),避免重復(fù)處理。相比列表查詢,HashSet的contains()方法能在常數(shù)時(shí)間內(nèi)完成節(jié)點(diǎn)存在性檢查。

Set<Node> visited = new HashSet<>();
dfs(Node current) {
    if (visited.contains(current)) return;
    visited.add(current);
    // 處理節(jié)點(diǎn)邏輯
}

四、Java中LinkedHashSet在開發(fā)中的具體使用場(chǎng)景

1、LinkedHashSet 的特點(diǎn)

LinkedHashSet 是 HashSet 的子類,底層基于 LinkedHashMap 實(shí)現(xiàn)。它保留了元素插入的順序,同時(shí)具備 HashSet 的去重特性。LinkedHashSet 的迭代順序與插入順序一致,而普通 HashSet 的迭代順序是不確定的。

2、具體使用場(chǎng)景

(1)需要保持插入順序的去重集合 當(dāng)業(yè)務(wù)邏輯要求數(shù)據(jù)既要去重,又要保留原始插入順序時(shí),LinkedHashSet 是最佳選擇。例如用戶操作日志的記錄,需要按時(shí)間順序展示但避免重復(fù)記錄。

(2)緩存最近訪問(wèn)的數(shù)據(jù) 實(shí)現(xiàn) LRU(Least Recently Used)緩存時(shí),LinkedHashSet 可以自然地維護(hù)訪問(wèn)順序。結(jié)合重寫 removeEldestEntry 方法,能夠高效地淘汰最久未使用的數(shù)據(jù)。

LinkedHashSet<String> cache = new LinkedHashSet<>(MAX_ENTRIES) {
    @Override
    protected boolean removeEldestEntry(Map.Entry eldest) {
        return size() > MAX_ENTRIES;
    }
};

(3)需要可預(yù)測(cè)迭代順序的集合 某些場(chǎng)景下如生成測(cè)試用例或序列化數(shù)據(jù)時(shí),需要保證每次運(yùn)行時(shí)的元素順序一致。LinkedHashSet 的有序特性比 HashSet 更適合這種需求。

(4)去重且保持原始順序的數(shù)據(jù)處理 在處理文件行、數(shù)據(jù)庫(kù)查詢結(jié)果等數(shù)據(jù)流時(shí),既要過(guò)濾重復(fù)項(xiàng)又要維持原始順序。例如從多個(gè)數(shù)據(jù)源合并數(shù)據(jù)時(shí):

LinkedHashSet<String> mergedData = new LinkedHashSet<>();
mergedData.addAll(source1Data);
mergedData.addAll(source2Data); // 自動(dòng)去重且保持添加順序

五、Java中TreeSet在開發(fā)中的具體使用場(chǎng)景

1、TreeSet 的基本特性

TreeSet 是 Java 中基于 TreeMap 實(shí)現(xiàn)的有序集合,底層使用紅黑樹數(shù)據(jù)結(jié)構(gòu)存儲(chǔ)元素。其核心特性包括:

自動(dòng)排序:元素默認(rèn)按自然順序(Comparable)或自定義比較器(Comparator)排序。
去重:不允許重復(fù)元素。
高效操作:插入、刪除、查找的時(shí)間復(fù)雜度為 O(log n)。

2、具體使用場(chǎng)景

(1)需要有序且去重的數(shù)據(jù)集合

適用于需要維護(hù)元素順序并避免重復(fù)的場(chǎng)景,例如存儲(chǔ)用戶積分排行榜:

TreeSet<Integer> scores = new TreeSet<>();
scores.add(95);
scores.add(80);
scores.add(100); // 自動(dòng)排序?yàn)?[80, 95, 100]

(2)范圍查詢(如查找區(qū)間內(nèi)的數(shù)據(jù))

利用 subSet()、headSet()、tailSet() 方法快速獲取子集:

TreeSet<Integer> numbers = new TreeSet<>(Arrays.asList(1, 3, 5, 7, 9));
// 獲取 [3, 7) 范圍內(nèi)的元素
SortedSet<Integer> subset = numbers.subSet(3, 7); // 結(jié)果為 [3, 5]

(3)快速獲取極值(最小/最大值)

通過(guò) first() 和 last() 方法直接訪問(wèn)首尾元素:

TreeSet<String> names = new TreeSet<>(Arrays.asList("Alice", "Bob", "Zoe"));
String first = names.first(); // "Alice"
String last = names.last();   // "Zoe"

(4)自定義排序規(guī)則

通過(guò) Comparator 實(shí)現(xiàn)靈活排序,例如按字符串長(zhǎng)度排序:

TreeSet<String> words = new TreeSet<>(
    (a, b) -> a.length() - b.length()
);
words.add("apple");
words.add("banana");
words.add("cat"); // 順序?yàn)?["cat", "apple", "banana"]

(5)事件調(diào)度系統(tǒng)

適用于需要按時(shí)間順序處理任務(wù)的場(chǎng)景,例如定時(shí)任務(wù)隊(duì)列:

class Task implements Comparable<Task> {
    LocalDateTime time;
    String name;
    // 按時(shí)間排序
    @Override
    public int compareTo(Task o) {
        return this.time.compareTo(o.time);
    }
}
TreeSet<Task> schedule = new TreeSet<>();
schedule.add(new Task(LocalDateTime.now(), "Task1"));
?```

到此這篇關(guān)于Java集合框架實(shí)戰(zhàn)應(yīng)用指南的文章就介紹到這了,更多相關(guān)Java集合框架實(shí)戰(zhàn)應(yīng)用指南內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • MyBatis-Plus常見面試題和答案大全

    MyBatis-Plus常見面試題和答案大全

    Mybatis-Plus是一個(gè)基于Mybatis的增強(qiáng)工具,它簡(jiǎn)化了Mybatis的開發(fā)流程,提供了許多實(shí)用的功能,如自動(dòng)生成代碼、分頁(yè)查詢、條件構(gòu)造器、性能分析等,這篇文章主要給大家介紹了關(guān)于MyBatis-Plus常見面試題和答案的相關(guān)資料,需要的朋友可以參考下
    2023-06-06
  • Java用單向環(huán)形鏈表來(lái)解決約瑟夫環(huán)Josepfu問(wèn)題

    Java用單向環(huán)形鏈表來(lái)解決約瑟夫環(huán)Josepfu問(wèn)題

    如果把單鏈表的最后一個(gè)節(jié)點(diǎn)的指針指向鏈表頭部,而不是指向NULL,那么就構(gòu)成了一個(gè)單向循環(huán)鏈表,通俗講就是把尾節(jié)點(diǎn)的下一跳指向頭結(jié)點(diǎn)
    2021-10-10
  • Spring Boot集成Sorl搜索客戶端的實(shí)現(xiàn)代碼

    Spring Boot集成Sorl搜索客戶端的實(shí)現(xiàn)代碼

    本篇文章主要介紹了Spring Boot集成Sorl搜索客戶端的實(shí)現(xiàn)代碼,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件

    Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件

    這篇文章主要為大家詳細(xì)介紹了Java基于JavaMail實(shí)現(xiàn)向QQ郵箱發(fā)送郵件的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-01-01
  • Java開發(fā)中為什么要使用單例模式詳解

    Java開發(fā)中為什么要使用單例模式詳解

    單例對(duì)于大家來(lái)說(shuō)并不陌生,但是在什么時(shí)候用單例呢?為什么要用呢?本文就帶大家了解一下為什么要使用單例,文中有非常詳細(xì)的介紹,需要的朋友可以參考下
    2021-06-06
  • MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法

    MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法

    這篇文章主要介紹了MyBatis批量添加數(shù)據(jù)2種實(shí)現(xiàn)方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-06-06
  • Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法

    Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法

    這篇文章主要介紹了Spring Boot 配置 Quartz 定時(shí)任務(wù)的方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-09-09
  • SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的完整指南

    SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的完整指南

    這篇文章主要為大家詳細(xì)介紹了SpringBoot中9個(gè)內(nèi)置過(guò)濾器用法的相關(guān)知識(shí),文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一
    2025-08-08
  • java實(shí)現(xiàn)航空用戶管理系統(tǒng)

    java實(shí)現(xiàn)航空用戶管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了java實(shí)現(xiàn)航空用戶管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • Java 中的vector和list的區(qū)別和使用實(shí)例詳解

    Java 中的vector和list的區(qū)別和使用實(shí)例詳解

    在大家還沒有了解vector,list,deque的知識(shí)之前,我先給大家介紹下stl,本文重點(diǎn)給大家介紹vector和list的區(qū)別及使用,感興趣的的朋友一起看看吧
    2017-09-09

最新評(píng)論

隆德县| 赤峰市| 诏安县| 奈曼旗| 五河县| 柞水县| 达拉特旗| 新乡市| 育儿| 新建县| 云梦县| 仪陇县| 弥渡县| 丹寨县| 永善县| 察雅县| 汨罗市| 汝城县| 重庆市| 隆化县| 邯郸县| 定西市| 循化| 婺源县| 江山市| 行唐县| 柯坪县| 东乡| 本溪| 抚宁县| 澄城县| 边坝县| 龙海市| 宜兰市| 伊吾县| 郯城县| 海门市| 科技| 高要市| 芦溪县| 越西县|