Java 集合:單列集合和雙列集合的深度剖析

引言

????????在 Java 編程中,集合是一個非常重要的概念。它就像是一個容器,能夠存儲多個數據元素,幫助我們更方便地管理和操作數據。Java 集合框架主要分為單列集合和雙列集合兩大類,它們各自有著獨特的特點和適用場景。接下來,讓我們深入探究這兩種集合。

單列集合

單列集合就像是一列整齊排列的數據隊伍,每個元素都是獨立的個體,按照一定的規則存儲和組織。在 Java 中,單列集合的根接口是?java.util.Collection,它派生了多個子接口和實現類。

1.?List?接口

List?接口的特點是元素有序且可重復。這意味著我們可以通過索引來訪問集合中的元素,就像在書架上按照編號查找書籍一樣。常見的?List?實現類有?ArrayList?和?LinkedList

ArrayList

ArrayList?基于數組實現,它在內存中是連續存儲的。這使得它在隨機訪問元素時非常高效,就像在一本裝訂好的書中快速翻到指定頁碼一樣。以下是一個簡單的示例:

import java.util.ArrayList;
import java.util.List;public class ArrayListExample {public static void main(String[] args) {List<String> list = new ArrayList<>();list.add("apple");list.add("banana");list.add("cherry");System.out.println(list.get(1)); // 輸出: banana}
}

不過,ArrayList?在插入和刪除元素時可能會比較低效,因為需要移動后續的元素。

LinkedList

LinkedList?基于鏈表實現,元素之間通過引用相互連接。這使得它在插入和刪除元素時非常高效,就像在一列火車中添加或移除車廂一樣。但隨機訪問元素時效率較低,因為需要從頭開始遍歷鏈表。示例如下:

import java.util.LinkedList;
import java.util.List;public class LinkedListExample {public static void main(String[] args) {List<String> list = new LinkedList<>();list.add("apple");list.add("banana");list.add("cherry");list.add(1, "date");System.out.println(list); // 輸出: [apple, date, banana, cherry]}
}

2.?Set?接口

Set?接口的特點是元素無序且不可重復。這就好比一個裝滿不同顏色氣球的袋子,每個氣球都是獨一無二的,并且沒有固定的排列順序。常見的?Set?實現類有?HashSet?和?TreeSet

HashSet

HashSet?基于哈希表實現,它通過哈希值來存儲和查找元素。這使得它在添加、刪除和查找元素時具有較高的效率。示例如下:

import java.util.HashSet;
import java.util.Set;public class HashSetExample {public static void main(String[] args) {Set<String> set = new HashSet<>();set.add("apple");set.add("banana");set.add("apple"); // 重復元素,不會被添加System.out.println(set); // 輸出: [apple, banana]}
}
TreeSet

TreeSet?基于紅黑樹實現,它可以對元素進行排序。這就像一個按照字母順序排列的字典,方便我們查找和比較元素。示例如下:

import java.util.TreeSet;
import java.util.Set;public class TreeSetExample {public static void main(String[] args) {Set<Integer> set = new TreeSet<>();set.add(3);set.add(1);set.add(2);System.out.println(set); // 輸出: [1, 2, 3]}
}

雙列集合

雙列集合就像是一個表格,每一行都包含兩個部分:鍵(Key)和值(Value)。鍵是唯一的,就像表格的索引,通過鍵可以快速找到對應的值。在 Java 中,雙列集合的根接口是?java.util.Map

1.?HashMap

HashMap?基于哈希表實現,它通過鍵的哈希值來存儲和查找元素。這使得它在添加、刪除和查找元素時具有較高的效率。示例如下:

import java.util.HashMap;
import java.util.Map;public class HashMapExample {public static void main(String[] args) {Map<String, Integer> map = new HashMap<>();map.put("apple", 1);map.put("banana", 2);map.put("cherry", 3);System.out.println(map.get("banana")); // 輸出: 2}
}

需要注意的是,HashMap?不保證元素的順序。

2.?TreeMap

TreeMap?基于紅黑樹實現,它可以根據鍵的自然順序或指定的比較器對元素進行排序。這就像一個按照字母順序排列的電話簿,方便我們查找和比較元素。示例如下:

import java.util.TreeMap;
import java.util.Map;public class TreeMapExample {public static void main(String[] args) {Map<String, Integer> map = new TreeMap<>();map.put("banana", 2);map.put("apple", 1);map.put("cherry", 3);System.out.println(map); // 輸出: {apple=1, banana=2, cherry=3}}
}

3.?LinkedHashMap

LinkedHashMap?是?HashMap?的子類,它不僅具有?HashMap?的高效性,還能保持元素的插入順序。示例如下:

import java.util.LinkedHashMap;
import java.util.Map;public class LinkedHashMapExample {public static void main(String[] args) {Map<String, Integer> map = new LinkedHashMap<>();map.put("banana", 2);map.put("apple", 1);map.put("cherry", 3);System.out.println(map); // 輸出: {banana=2, apple=1, cherry=3}}
}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/71689.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/71689.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/71689.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

layui 遠程搜索下拉選擇組件(多選)

模板使用&#xff08;lay-module/searchSelect&#xff09;&#xff0c;依賴于 jquery、layui.dist 中的 dropdown 模塊實現&#xff08;所以data 格式請參照 layui文檔&#xff09; <link rel"stylesheet" href"layui-v2.5.6/dist/css/layui.css" /&g…

通俗易懂的DOM1級標準介紹

前言 在前端開發中&#xff0c;DOM&#xff08;文檔對象模型&#xff09;是我們操作網頁內容的核心工具。前面的文章我們介紹了DOM0級、DOM2級事件模型&#xff0c;沒有DOM1級事件模型這種概念&#xff0c;但有DOM1級標準。今天我們就來討論DOM1級標準&#xff0c;看看它到底做…

python~http的請求參數中攜帶map

背景 調試 http GET請求的 map 參數&#xff0c;鏈路攜帶參數一直有問題&#xff0c;最終采用如下方式攜帶map 解決 user{"demo":"true","info":"王者"}url encode之后的效果如下所示 user%7B%22demo%22:%22true%22,%22info%22:%22…

(java/Spring boot)使用火山引擎官方推薦方法向大模型發送請求

首先在maven里面引入官方依賴 <dependency><groupId>com.volcengine</groupId><artifactId>volcengine-java-sdk-ark-runtime</artifactId><version>LATEST</version></dependency>然后我們編寫測試類 package com.volcengin…

Scrum方法論指導下的Deepseek R1醫療AI部署開發

一、引言 1.1 研究背景與意義 在當今數智化時代&#xff0c;軟件開發方法論對于項目的成功實施起著舉足輕重的作用。Scrum 作為一種廣泛應用的敏捷開發方法論&#xff0c;以其迭代式開發、快速反饋和高效協作的特點&#xff0c;在軟件開發領域占據了重要地位。自 20 世紀 90 …

LeetCode 熱題 100_搜索插入位置(63_35_簡單_C++)(二分查找)(”>>“ 與 “/” 對比)

LeetCode 熱題 100_搜索插入位置&#xff08;63_35&#xff09; 題目描述&#xff1a;輸入輸出樣例&#xff1a;題解&#xff1a;解題思路&#xff1a;思路一&#xff08;二分查找&#xff09;&#xff1a; 代碼實現代碼實現&#xff08;思路一&#xff08;二分查找&#xff09…

藍橋與力扣刷題(藍橋 交換瓶子)

題目&#xff1a;有 N 個瓶子&#xff0c;編號 1 ~ N&#xff0c;放在架子上。 比如有 5 個瓶子&#xff1a; 2 1 3 5 4 要求每次拿起 2 個瓶子&#xff0c;交換它們的位置。 經過若干次后&#xff0c;使得瓶子的序號為&#xff1a; 1 2 3 4 5 對于這么簡單的情況&#x…

HTTPS 通信流程

HTTPS 通信流程時序圖&#xff1a; #mermaid-svg-HWoTbFvfih6aYUu6 {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-icon{fill:#552222;}#mermaid-svg-HWoTbFvfih6aYUu6 .error-text{fill:#…

Spring AutoWired與Resource區別?

大家好&#xff0c;我是鋒哥。今天分享關于【Spring AutoWired與Resource區別?】面試題。希望對大家有幫助&#xff1b; Spring AutoWired與Resource區別? 1000道 互聯網大廠Java工程師 精選面試題-Java資源分享網 在 Spring 中&#xff0c;Autowired 和 Resource 都是用于…

什么是HTTP/2協議?NGINX如何支持HTTP/2并提升網站性能?

HTTP/2是一種用于在Web瀏覽器和服務器之間進行通信的協議&#xff0c;旨在提高網站性能和加載速度。它是HTTP/1.1的繼任者&#xff0c;引入了許多優化和改進&#xff0c;以適應現代Web應用的需求。HTTP/2的主要目標是減少延遲、提高效率&#xff0c;以及更好地支持并發請求。 …

【Bluedroid】AVRCP 連接源碼分析(一)

一、AVRCP協議簡介 AVRCP(Audio/Video Remote Control Profile)是藍牙協議棧中的一個重要部分,它定義了藍牙設備之間的音視頻傳輸控制的流程和特點。AVRCP使得用戶可以通過一個藍牙設備(如手機)遠程控制另一個藍牙設備(如藍牙耳機或音箱)上的音視頻播放,如播放、暫停、…

【QT中的一些高級數據結構,持續更新中...】

QT中有一些很精妙、便捷的設計&#xff0c;在了解這些數據的同時&#xff0c;我們可以學到如何更好的設計代碼。本貼持續更新中&#xff0c;歡迎關注和收藏 一 QScopedPointer主要特點&#xff1a;示例代碼 二 Q_DISABLE_COPY 一 QScopedPointer QScopedPointer 是 Qt 中的一種…

行業分析---對自動駕駛規控算法的思考

1 前言 隨著自動駕駛端到端大模型的興起&#xff0c;小鵬、華為、理想、蔚來、小米等公司都對自動駕駛業務部進行了組織架構的調整&#xff0c;準備應對新的或者更高級別的自動駕駛研發任務。 近幾年由于自動駕駛技術的快速發展&#xff0c;不少從業者覺得相關職業的未來充滿了…

C++ 設計模式-模板方法模式

文件處理 #include <iostream>// 抽象基類&#xff1a;定義模板方法和抽象步驟 class DataProcessor { public:// 模板方法&#xff08;固定流程&#xff09;void Process() {OpenFile();ProcessData(); // 由子類實現CloseFile();}protected:virtual void ProcessData…

Deepseek快速做PPT

背景: DeepSeek大綱生成 → Kimi結構化排版 → 數據審查,細節調整 DeepSeek 擁有深度思考能力,擅長邏輯構建與內容生成,它會根據我們的問題進行思考,其深度思考能力當前測試下來,不愧為國內No.1,而且還會把中間的思考過程展示出來,大多時候會給出很多我們意想不到的思…

【多語言生態篇一】【DeepSeek×Java:Spring Boot微服務集成全棧指南 】

(手把手帶你從零實現AI能力調用,萬字長文預警,建議收藏實操) 一、環境準備:別輸在起跑線上 1.1 硬件軟件全家桶 JDK版本:必須 ≥17(Spring Boot 3.2+強制要求,低版本直接報錯)IDE推薦:IntelliJ IDEA終極版(社區版缺Spring AI插件支持)構建工具:Maven 3.9+ / Grad…

【YOLOv8】損失函數

學習視頻&#xff1a; yolov8 | 損失函數 之 5、類別損失_嗶哩嗶哩_bilibili yolov8 | 損失函數 之 6、定位損失 CIoU DFL_嗶哩嗶哩_bilibili 2.13、yolov8損失函數_嗶哩嗶哩_bilibili YOLOv8 的損失函數由類別損失和定位損失構成 類別損失&#xff1a;BCE Loss 定位損失…

DEMF模型賦能多模態圖像融合,助力肺癌高效分類

目錄 論文創新點 實驗設計 1. 可視化的研究設計 2. 樣本選取和數據處理 3. 集成分類模型 4. 實驗結果 5. 可視化結果 圖表總結 可視化知識圖譜 在肺癌早期篩查中,計算機斷層掃描(CT)和正電子發射斷層掃描(PET)作為兩種關鍵的影像學手段,分別提供了豐富的解剖結構…

小魚深度評測 | 通義靈碼2.0,不僅可跨語言編碼,自動生成單元測試等,更炸裂的是集成DeepSeek模型且免費使用,太炸裂了。

小魚深度評測 通義靈碼2.0 1、引言2、通義靈碼 更新與安裝2.1 IDE插件更新2.1.1 PyCharm 更新2.1.2 VSCode 更新 2.2 官網下載更新 3、 使用體驗3.1生成單元測試3. 2 跨語言編程3.3靈碼2.0 與1.0 對比 4、總結 1、引言 通義靈碼&#xff0c; 我一直使用的編碼協助工具&#xf…

《微軟量子芯片:開啟量子計算新紀元》:此文為AI自動生成

量子計算的神秘面紗 在科技飛速發展的今天,量子計算作為前沿領域,正逐漸走進大眾的視野。它宛如一把神秘的鑰匙,有望開啟未來科技變革的大門,而微軟量子芯片則是這把鑰匙上一顆璀璨的明珠。 量子計算,簡單來說,是一種遵循量子力學規律調控量子信息單元進行計算的新型計算…