Java的列表、集合、數(shù)組的添加一個元素各自用什么方法詳解
在Java中,列表(List)、集合(Set)和數(shù)組(Array)添加元素的方法有所不同,以下是具體說明及示例:
add() 添加元素
一、列表(List)
常用實現(xiàn)類包括ArrayList和LinkedList,核心方法為add():
末尾添加
add(Object o):List<String> list = new ArrayList<>(); list.add("Java"); // 添加元素到末尾指定位置插入
add(int index, Object o):list.add(1, "Python"); // 在索引1處插入元素,原元素后移
批量添加
addAll(Collection<?> c)或Collections.addAll():List<String> list2 = Arrays.asList("C++", "Go"); list.addAll(list2); // 批量添加集合元素
二、集合(Set)
常用實現(xiàn)類如HashSet、TreeSet,添加元素需滿足唯一性:
基本添加
add(Object o):Set<String> set = new HashSet<>(); set.add("Apple"); // 成功返回true,重復(fù)元素返回false有序集合的添加
如TreeSet會自動按自然順序排序:Set<Integer> sortedSet = new TreeSet<>(); sortedSet.add(3); sortedSet.add(1); // 最終順序為1, 3
對比總結(jié)
| 數(shù)據(jù)結(jié)構(gòu) | 添加方法 | 特點 |
|---|---|---|
| 數(shù)組 | Arrays.copyOf()或轉(zhuǎn)ArrayList | 固定長度,需手動擴(kuò)容或轉(zhuǎn)換容器 |
| 列表(List) | add()、addAll() | 支持動態(tài)擴(kuò)容和指定位置插入 |
| 集合(Set) | add() | 元素唯一,自動去重,無序(TreeSet有序) |
示例完整代碼
數(shù)組轉(zhuǎn)列表并添加元素:
int[] arr = {1, 2, 3};
List<Integer> list = new ArrayList<>(Arrays.asList(arr));
list.add(4);
list.add(1, 99); // 插入到索引1處
System.out.println(list); // 輸出[1, 99, 2, 3, 4]
集合去重示例:
Set<String> cities = new HashSet<>();
cities.add("Beijing");
cities.add("Shanghai");
cities.add("Beijing"); // 重復(fù)元素不會被添加
System.out.println(cities); // 輸出[Beijing, Shanghai]
如需動態(tài)處理大量元素,推薦優(yōu)先使用ArrayList(列表)或HashSet(集合)。
三、樹形結(jié)構(gòu)(Tree)
Java 標(biāo)準(zhǔn)庫未直接提供樹結(jié)構(gòu),但可通過 TreeSet 或 TreeMap 間接實現(xiàn)有序存儲:
TreeSet<Integer> treeSet = new TreeSet<>(); treeSet.add(5); // 自動按升序排列 treeSet.add(3); // 內(nèi)部順序變?yōu)?, 5
四、隊列(Queue)
隊列遵循 先進(jìn)先出(FIFO) 原則,常用實現(xiàn)類為 LinkedList 和 PriorityQueue。
普通隊列
使用add()或offer()方法在隊尾添加元素:Queue<Integer> queue = new LinkedList<>(); queue.add(10); // 添加元素,隊列滿時拋異常 queue.offer(20); // 添加元素,隊列滿時返回false
優(yōu)先級隊列
PriorityQueue根據(jù)元素自然順序或自定義比較器排序:Queue<Integer> pq = new PriorityQueue<>(); pq.add(5); // 添加元素并自動排序 pq.add(1); // 內(nèi)部順序變?yōu)?, 5
五、鏈表(LinkedList)
LinkedList 同時實現(xiàn)了 List 和 Deque,支持靈活插入:
- 任意位置插入
使用add(int index, E element):LinkedList<String> linkedList = new LinkedList<>(); linkedList.add(0, "First"); // 在索引0處插入 linkedList.add(1, "Second");
六、向量(Vector)
向量是線程安全的動態(tài)數(shù)組,使用 addElement() 或 add() 添加:
Vector<Integer> vector = new Vector<>(); vector.addElement(100); // 傳統(tǒng)方法 vector.add(200); // 與ArrayList兼容
其他數(shù)據(jù)結(jié)構(gòu)的添加方法
Java 中除了列表(List)、集合(Set)和數(shù)組(Array)之外,還有其他多種數(shù)據(jù)結(jié)構(gòu)支持元素的添加操作。以下是其他常見數(shù)據(jù)結(jié)構(gòu)及其添加元素的示例和方法:
雙端隊列(Deque)
雙端隊列支持從兩端添加元素,實現(xiàn)類為 ArrayDeque。
- 頭部/尾部添加
使用addFirst()和addLast():Deque<String> deque = new ArrayDeque<>(); deque.addFirst("Front"); // 頭部添加 deque.addLast("End"); // 尾部添加
put()-映射(Map)
映射存儲鍵值對,常用實現(xiàn)類為 HashMap 和 TreeMap。
- 添加鍵值對
使用put()方法:Map<String, Integer> map = new HashMap<>(); map.put("Apple", 10); // 鍵不存在時新增 map.put("Banana", 20);
push() -棧(Stack)
棧遵循 后進(jìn)先出(LIFO) 原則,實現(xiàn)類為 Stack(已過時)或 Deque 模擬。
- 使用 Deque 模擬棧
Deque<Integer> stack = new ArrayDeque<>(); stack.push(1); // 壓棧 stack.push(2); // 棧頂元素變?yōu)?
數(shù)組(Array)
數(shù)組是固定長度的數(shù)據(jù)結(jié)構(gòu),添加元素通常需要創(chuàng)建新數(shù)組或使用動態(tài)容器:
直接賦值
通過索引直接賦值,但需確保索引有效且數(shù)組已初始化:int[] arr = new int[3]; arr[0] = 1; // 直接賦值到索引0的位置
擴(kuò)容后添加
使用Arrays.copyOf()創(chuàng)建新數(shù)組并添加元素:int[] arr = {1, 2, 3}; arr = Arrays.copyOf(arr, arr.length + 1); // 擴(kuò)容 arr[arr.length - 1] = 4; // 添加新元素轉(zhuǎn)換為ArrayList動態(tài)添加
將數(shù)組轉(zhuǎn)為ArrayList,利用其add()方法:String[] arr = {"a", "b"}; List<String> list = new ArrayList<>(Arrays.asList(arr)); list.add("c"); // 添加新元素 arr = list.toArray(new String[0]); // 轉(zhuǎn)回數(shù)組
總結(jié)
| 數(shù)據(jù)結(jié)構(gòu) | 添加方法 | 示例類 | 適用場景 |
|---|---|---|---|
| 隊列(Queue) | add(), offer() | LinkedList | 任務(wù)調(diào)度、廣度優(yōu)先搜索 |
| 雙端隊列(Deque) | addFirst(), addLast() | ArrayDeque | 需要兩端操作的場景 |
| 映射(Map) | put() | HashMap | 鍵值對存儲、快速查找 |
| 棧(Stack) | push() | ArrayDeque | 函數(shù)調(diào)用棧、表達(dá)式求值 |
| 鏈表(LinkedList) | add(index, element) | LinkedList | 頻繁插入/刪除、中間操作 |
| 向量(Vector) | addElement() | Vector | 線程安全的動態(tài)數(shù)組需求 |
擴(kuò)展說明:
- 堆(Heap):Java 中通過
PriorityQueue實現(xiàn)堆結(jié)構(gòu),添加元素會自動調(diào)整堆結(jié)構(gòu)。 - 并發(fā)集合:如
ConcurrentHashMap和CopyOnWriteArrayList,適用于多線程環(huán)境,但添加方法類似普通集合。
如果需要更具體的實現(xiàn)細(xì)節(jié)或線程安全方案,可進(jìn)一步查看相關(guān)類的官方文檔或源碼實現(xiàn)。
到此這篇關(guān)于Java的列表、集合、數(shù)組的添加一個元素各自用什么方法的文章就介紹到這了,更多相關(guān)Java列表、集合、數(shù)組添加元素內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法
這篇文章主要給大家介紹了關(guān)于微服務(wù)領(lǐng)域Spring Boot自動伸縮的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細(xì),對大家學(xué)習(xí)或者使用spring boot具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-10-10
java Map轉(zhuǎn)Object與Object轉(zhuǎn)Map實現(xiàn)代碼
這篇文章主要介紹了 java Map轉(zhuǎn)Object與Object轉(zhuǎn)Map實現(xiàn)代碼的相關(guān)資料,需要的朋友可以參考下2017-02-02
java中@JSONField和@JsonProperty注解的使用說明及對比
@JSONField與@JsonProperty隸屬兩個不同的包,前者是阿里系的fastjson包,后者是spring?boot官方使用的jackson包,本文主要介紹了java中@JSONField和@JsonProperty注解的使用說明及對比,感興趣的可以了解一下2023-11-11
spring在service層的方法報錯事務(wù)不會回滾的解決
這篇文章主要介紹了spring在service層的方法報錯事務(wù)不會回滾的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-02-02
解決MyBatisPlus的updateBatchById()批量修改失效問題
這篇文章主要介紹了解決MyBatisPlus的updateBatchById()批量修改失效問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-08-08

