Java基础语法的问题及部分使用方法

笔者之前学习过Spring系列的使用,但是对Java的初始语法一直不太明白。在leetcode刷题过程,发现很多Java基础的方法都不会,因此通过写这个文档来进行初始语法的学习。注意:本文中大部分使用方法均通过通义千问搜索得到。

Java中语法的问题

Java如何向数组中插入元素?

Java中的数组中长度是固定的,一旦创建,就不能改变大小

方法1:创建一个更大的数组,并手动复制插入

int[] oldArray = {1, 2, 4};
int newValue = 3;
int insertIndex = 2;

// 创建新数组,长度+1
int[] newArray = new int[oldArray.length + 1];

// 复制前面的元素
System.arraycopy(oldArray, 0, newArray, 0, insertIndex);

// 插入新值
newArray[insertIndex] = newValue;

// 复制后面的元素
System.arraycopy(oldArray, insertIndex, newArray, insertIndex + 1, oldArray.length - insertIndex);

输出的结果:{1,2,3,4}

方法2:使用ArrayList(推荐用于频繁增删)

import java.util.ArrayList;

ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(1, 10); // 在索引1处插入10 → [1, 10, 2]

// 如果非要转回数组
Integer[] arr = list.toArray(new Integer[0]);
// 或者 int[] (需要额外转换)

ArrayList支持动态扩容,是恶化需要频繁插入/删除的场景。

在 Java 中,Map 接口提供了丰富的常用方法,用于操作键值对(key-value pairs)。以下是 Map 最常用的函数及其详细说明、用法和示例。


Java中List<List<String>>如何初始化

List<list<String>>是一个双层列表,实际上是一个二维数组

Java中对于这种数组的创建,一般采用先创建外层的空列表,后续依据需求添加内层列表

List<List<String>> result = new ArrayList<>();

// 添加第一组
result.add(Arrays.asList("a","b");

// 添加第二组可变列表
List<String> group2 = new ArrayList<>();
group2.add("c");
group2.add("d");
result.add(group2);

Java中Map的常用实现类

该部分由通义千问生成

在 Java 中,Map 是一个非常重要的接口,用于存储 键值对(key-value pairs),即通过一个“键”来查找对应的“值”。它类似于数学中的映射关系。


📚 一、Map 的常用实现类(核心)

以下是 Java 中最常用的 Map 实现类及其特点:

实现类是否有序线程安全允许 null 键/值性能适用场景
HashMap❌ 无序❌ 不安全✅ 允许一个 null 键,多个 null 值⭐⭐⭐⭐ 平均 O(1)默认首选,高性能
LinkedHashMap✅ 按插入/访问顺序❌ 不安全✅ 允许⭐⭐⭐ 稍慢于 HashMap需要顺序输出
TreeMap✅ 按键自然排序或自定义排序❌ 不安全❌ 不允许 null 键(会抛异常),值可为 null⭐⭐ O(log n)需要排序的场景
Hashtable❌ 无序✅ 安全(方法加锁)❌ 不允许 null 键或值⭐⭐ 较慢(同步开销)老旧,基本被取代
ConcurrentHashMap❌ 无序(Java 8+)✅ 高并发安全❌ 不允许 null 键或值⭐⭐⭐⭐ 高并发下性能好多线程环境

🔍 二、详细说明每个实现类

1. HashMap<K, V>最常用

  • 特点
    • 基于哈希表实现,查找、插入、删除平均时间复杂度为 O(1)
    • 不保证顺序(遍历顺序可能变化)。
    • 允许 一个 null任意多个 null
    • 非线程安全,多线程环境下可能出错。
  • 使用场景
    • 绝大多数单线程场景下的键值映射。
    • 如缓存、计数器、Two Sum 算法等。
Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
System.out.println(map.get("Alice")); // 25

2. LinkedHashMap<K, V>

  • 特点
    • 继承自 HashMap,但内部维护了一个双向链表。
    • 保持 插入顺序访问顺序(可通过构造函数设置)。
    • 允许 null 键和 null 值。
    • 性能略低于 HashMap(因维护链表)。
    • 非线程安全。
  • 使用场景
    • 需要按插入顺序遍历的场景。
    • 实现 LRU 缓存(最近最少使用)。
Map<String, Integer> map = new LinkedHashMap<>();
map.put("First", 1);
map.put("Second", 2);
// 遍历时顺序 = 插入顺序

💡 实现 LRU 示例(简化):

// accessOrder=true 表示按访问顺序排序
LinkedHashMap<Integer, Integer> cache = new LinkedHashMap<>(16, 0.75f, true);

3. TreeMap<K, V>

  • 特点
    • 基于红黑树(自平衡二叉搜索树)实现。
    • 键(key)会自动按 自然顺序自定义 Comparator 排序。
    • 不允许 null 键(会抛 NullPointerException),值可以为 null
    • 时间复杂度为 O(log n)
    • 非线程安全。
  • 使用场景
    • 需要按键排序的场景。
    • 范围查询(如查找 10~50 之间的键)。
Map<Integer, String> sortedMap = new TreeMap<>();
sortedMap.put(3, "Three");
sortedMap.put(1, "One");
sortedMap.put(2, "Two");
// 遍历输出:1, 2, 3(有序)

4. Hashtable已过时(不推荐)

  • 特点
    • 早期的线程安全哈希表。
    • 方法都加了 synchronized 关键字,性能较差。
    • 不允许 null 键或 null(否则抛 NullPointerException)。
    • 无序。
  • 替代方案ConcurrentHashMapCollections.synchronizedMap()
Map<String, String> map = new Hashtable<>(); // 不推荐

5. ConcurrentHashMap<K, V>高并发首选

  • 特点
    • 专为并发环境设计。
    • 使用 分段锁(Java 7)CAS + synchronized(Java 8+) 实现高效并发。
    • 不允许 null 键或 null 值(避免歧义)。
    • 性能在高并发下远优于 HashtablesynchronizedMap
  • 使用场景
    • 多线程环境下共享的缓存、计数器等。
Map<String, Long> counter = new ConcurrentHashMap<>();
counter.put("requests", 100L);

🛠 三、如何选择合适的 Map 实现?

需求推荐实现类
单线程,高性能,无序HashMap
需要保持插入顺序LinkedHashMap
需要按键排序TreeMap
多线程,高性能并发ConcurrentHashMap
老项目兼容Hashtable(不推荐)

🧩 四、其他相关工具

1. Collections.synchronizedMap()

将普通 Map 包装成线程安全的:

Map<String, String> syncMap = Collections.synchronizedMap(new HashMap<>());

2. Map.of() (Java 9+)

创建不可变的小 Map:

Map<String, Integer> map = Map.of("A", 1, "B", 2); // 最多 10 对

3. Map.ofEntries() (Java 9+)

创建更灵活的不可变 Map:

Map<String, Integer> map = Map.ofEntries(
    Map.entry("A", 1),
    Map.entry("B", 2)
);

✅ 总结

实现类推荐程度关键词
HashMap⭐⭐⭐⭐⭐高性能、无序、默认选择
LinkedHashMap⭐⭐⭐⭐☆保持顺序、LRU
TreeMap⭐⭐⭐☆☆排序、范围查询
ConcurrentHashMap⭐⭐⭐⭐⭐高并发、线程安全
Hashtable⭐☆☆☆☆过时、不推荐

📌 一句话建议

日常开发用 HashMap,需要顺序用 LinkedHashMap,要排序用 TreeMap,多线程用 ConcurrentHashMap

如果你有具体使用场景(比如缓存、排序、并发),我可以帮你推荐最合适的 Map 实现!


Java中Map的常用函数及使用

该部分由通义千问生成

📚 一、Map 的常用函数(方法)一览

方法作用返回类型是否修改 Map
put(K, V)添加或更新键值对V(旧值,若存在)✅ 是
get(Object)根据键获取值V❌ 否
containsKey(Object)检查是否包含某个键boolean❌ 否
containsValue(Object)检查是否包含某个值boolean❌ 否
remove(Object)删除指定键的映射V(被删除的值)✅ 是
size()获取键值对的数量int❌ 否
isEmpty()判断是否为空boolean❌ 否
clear()清空所有映射void✅ 是
keySet()获取所有键的集合Set<K>❌ 否(但集合是视图)
values()获取所有值的集合Collection<V>❌ 否(但集合是视图)
entrySet()获取所有键值对的集合Set<Map.Entry<K,V>>❌ 否(但集合是视图)
getOrDefault(Object, V)获取值,若键不存在则返回默认值V❌ 否
putIfAbsent(K, V)若键不存在才添加V(当前值)✅ 可能
computeIfAbsent(K, Function)若键不存在,用函数生成值并放入V✅ 可能
forEach(BiConsumer)遍历所有键值对void❌ 否

🔍 二、详细说明与示例

我们以 HashMap<String, Integer> 为例:

Map<String, Integer> map = new HashMap<>();
map.put("Alice", 25);
map.put("Bob", 30);
map.put("Charlie", 35);

1. put(K key, V value)

添加或更新一个键值对。

map.put("David", 28); // 添加新键值对
map.put("Alice", 26); // 更新已有键的值

返回值:如果键已存在,返回旧值;否则返回 null


2. get(Object key)

根据键获取对应的值。

Integer age = map.get("Alice"); // 返回 26
Integer unknown = map.get("Eve"); // 返回 null(键不存在)

⚠️ 如果键不存在,返回 null。建议配合 containsKey 使用,或用 getOrDefault


3. containsKey(Object key)

检查是否包含某个键。

boolean hasAlice = map.containsKey("Alice"); // true
boolean hasEve = map.containsKey("Eve");     // false

4. containsValue(Object value)

检查是否包含某个值。

boolean hasAge30 = map.containsValue(30); // true (Bob)
boolean hasAge50 = map.containsValue(50); // false

⚠️ 性能较差(O(n)),因为要遍历所有值。


5. remove(Object key)

删除指定键的映射。

Integer removed = map.remove("Bob"); // 返回 30,并删除
System.out.println(map.containsKey("Bob")); // false

6. size()

返回键值对的数量。

int count = map.size(); // 3(Alice, Charlie, David)

7. isEmpty()

判断 Map 是否为空。

boolean isEmpty = map.isEmpty(); // false

8. clear()

清空所有键值对。

map.clear();
System.out.println(map.size()); // 0

9. keySet()

返回所有键的集合(Set<K>)。

Set<String> keys = map.keySet();
for (String key : keys) {
    System.out.println(key);
}
// 输出:Alice, Bob, Charlie, David

🔔 返回的是视图(view),修改 keys 会影响原 map


10. values()

返回所有值的集合(Collection<V>)。

Collection<Integer> values = map.values();
for (Integer value : values) {
    System.out.println(value);
}
// 输出:26, 30, 35, 28

11. entrySet()

返回所有键值对的集合(Set<Map.Entry<K,V>>),用于遍历。

for (Map.Entry<String, Integer> entry : map.entrySet()) {
    System.out.println(entry.getKey() + " -> " + entry.getValue());
}
// 输出:
// Alice -> 26
// Bob -> 30
// ...

✅ 这是遍历 Map 的推荐方式


12. getOrDefault(Object key, V defaultValue)

获取值,如果键不存在,返回默认值。

Integer age = map.getOrDefault("Eve", 18); // 返回 18
Integer aliceAge = map.getOrDefault("Alice", 0); // 返回 26

✅ 避免 null 值带来的空指针异常。


13. putIfAbsent(K key, V value)

只有当键不存在时才插入。

map.putIfAbsent("Alice", 20); // Alice 已存在,不更新
map.putIfAbsent("Eve", 22);   // Eve 不存在,插入

返回当前值(可能是旧值或新插入的值)。


14. computeIfAbsent(K key, Function<K,V> mappingFunction)

如果键不存在,使用函数计算值并放入。

map.computeIfAbsent("Frank", k -> k.length()); // k="Frank" → 长度=5
// 相当于:如果 Frank 不存在,就 put("Frank", 5)

✅ 常用于延迟初始化、缓存等场景。


15. forEach(BiConsumer<K,V> action)

遍历所有键值对(Java 8+)。

map.forEach((key, value) -> {
    System.out.println(key + " = " + value);
});

✅ 简洁的 Lambda 写法。


🧩 三、Map.Entry<K,V> 常用方法

当你使用 entrySet() 时,会得到 Map.Entry 对象:

Map.Entry<String, Integer> entry = ...;
entry.getKey();    // 获取键
entry.getValue();  // 获取值
entry.setValue(40); // 修改值(允许)

✅ 四、总结:最常用的方法(Top 10)

排名方法用途
1️⃣put(K,V)添加/更新
2️⃣get(K)查找值
3️⃣containsKey(K)判断键是否存在
4️⃣getOrDefault(K, default)安全获取值
5️⃣entrySet() + forEach遍历所有键值对
6️⃣keySet()获取所有键
7️⃣values()获取所有值
8️⃣remove(K)删除
9️⃣size() / isEmpty()判断大小
🔟computeIfAbsent(K, func)懒加载、避免重复创建

💡 小贴士

  • 使用 Map.of()(Java 9+)创建不可变小 Map:
Map<String, Integer> map = Map.of("A", 1, "B", 2);
  • 使用 Map.ofEntries() 创建更灵活的不可变 Map。
  • 多线程环境下优先使用 ConcurrentHashMap

如果你有具体使用场景(如缓存、计数、分组),我可以告诉你该用哪个方法组合!欢迎继续提问 😊

Java中List的实现类

在 Java 中,List 是一个非常重要的接口,属于 java.util 包,是 Collection 框架的一部分。它表示一个有序的集合(也称为序列),允许重复元素,并且可以通过索引(下标)访问元素。


📚 一、List 的核心特点

特性说明
✅ 有序元素按插入顺序排列(或指定顺序)
✅ 可重复允许存储相同的元素多次
✅ 可索引访问可以通过 get(index) 获取指定位置的元素
✅ 动态大小大多数实现支持动态扩容

🔍 二、List 的主要实现类

Java 中最常用的 List 实现类有以下几种:

实现类底层结构是否可变线程安全性能特点适用场景
ArrayList动态数组✅ 可变❌ 不安全随机访问快 O(1),插入/删除慢 O(n)默认首选
LinkedList双向链表✅ 可变❌ 不安全插入/删除快 O(1),随机访问慢 O(n)频繁增删
Vector动态数组✅ 可变✅ 安全(方法同步)慢(同步开销)老旧,基本被取代
Stack继承 Vector✅ 可变✅ 安全后进先出(LIFO)已过时,建议用 Deque
CopyOnWriteArrayList写时复制数组✅ 可变✅ 安全读快写慢,适合读多写少并发场景

🧩 三、详细解析每个实现类

1. ArrayList<E>最常用

  • 底层结构:动态数组(基于 Object[]
  • 优点
    • 支持快速随机访问(get(index) 时间复杂度 O(1))
    • 遍历效率高
  • 缺点
    • 在中间插入或删除元素较慢(需要移动元素,O(n))
    • 扩容时会创建新数组并复制数据
  • 默认初始容量:10(首次添加元素时扩容)
  • 扩容机制:每次增长约 50%(oldCapacity + (oldCapacity >> 1)

推荐作为 List 的默认选择,除非你有特殊需求。

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
System.out.println(list.get(0)); // "A"

2. LinkedList<E> 🔄 链表结构

  • 底层结构:双向链表(每个节点包含前驱和后继指针)
  • 优点
    • 在头部/尾部/中间插入、删除效率高(O(1),如果已有节点引用)
    • 无需扩容
  • 缺点
    • 随机访问慢(必须从头或尾遍历,O(n))
    • 占用更多内存(每个节点要存指针)

✅ 适合频繁在中间插入/删除的场景。

List<String> list = new LinkedList<>();
list.addFirst("A"); // 头部插入
list.addLast("C");  // 尾部插入
list.add(1, "B");   // 中间插入

💡 注意:LinkedList 还实现了 Deque 接口,可以用作队列或栈。


3. Vector<E> ⚠️ 已过时(不推荐)

  • 底层结构:动态数组(类似 ArrayList
  • 特点
    • 方法都是 synchronized 的,线程安全
    • 性能较差(同步开销大)
    • 默认扩容翻倍(比 ArrayList 浪费空间)

不推荐使用,除非维护老代码。

✅ 替代方案:

  • 需要线程安全 → Collections.synchronizedList(new ArrayList<>())
  • 或使用 CopyOnWriteArrayList
List<String> list = Collections.synchronizedList(new ArrayList<>());

4. Stack<E> ⚠️ 已过时

  • **继承自 **Vector
  • 提供 push()pop()peek() 等栈操作
  • 问题
    • 基于 Vector,性能差
    • 设计不合理(应该用组合而不是继承)

推荐替代:使用 Deque 实现栈

Deque<String> stack = new ArrayDeque<>();
stack.push("A");
stack.push("B");
String top = stack.pop(); // "B"

5. CopyOnWriteArrayList<E> ✅ 高并发场景

  • 特点
    • “写时复制”机制:每次修改都创建新数组,读操作不加锁
    • 线程安全
    • 读操作非常快,写操作较慢(因为要复制数组)
  • 适用场景
    • 读多写少的并发环境(如监听器列表、观察者模式)
List<String> list = new CopyOnWriteArrayList<>();
list.add("A");
// 多个线程可以安全地读取

⚠️ 不适合写频繁的场景,否则性能很差。


🛠 四、如何选择合适的 List 实现?

需求推荐实现类
一般用途,随机访问多ArrayList
频繁在头部/中间插入删除LinkedList
多线程环境,读多写少CopyOnWriteArrayList
多线程环境,读写均衡Collections.synchronizedList(new ArrayList<>())
实现栈(LIFO)ArrayDeque(用 push/pop
实现队列(FIFO)ArrayDequeLinkedList

🧪 五、创建不可变 List(Java 9+)

如果你不需要修改,可以创建不可变列表:

// Java 9+
List<String> list = List.of("A", "B", "C"); // 不可变

// 或使用 Arrays.asList(固定大小,不可 add/remove)
List<String> fixed = Arrays.asList("X", "Y");

⚠️ List.of()Arrays.asList() 返回的列表都不能添加或删除元素。


✅ 六、总结:推荐使用指南

实现类推荐程度一句话总结
ArrayList⭐⭐⭐⭐⭐默认首选,性能好,使用最广泛
LinkedList⭐⭐⭐☆☆仅在频繁插入/删除时使用
CopyOnWriteArrayList⭐⭐⭐⭐☆并发读多写少场景
Vector / Stack⭐☆☆☆☆已过时,避免使用

📌 一句话建议

日常开发用 ArrayList,并发读多写少用 CopyOnWriteArrayList,实现栈/队列用 ArrayDeque

如果你有具体场景(比如“我要实现一个缓存”或“高频增删的列表”),我可以帮你推荐最合适的 List 实现!

在 Java 中,List 接口继承自 Collection,提供了比普通集合更丰富的操作方法,特别是基于索引(下标)的操作。它是开发中最常用的集合类型之一。


Java中List中的常用方法

📚 一、List 的核心特点回顾

  • 有序:元素按插入顺序排列
  • 可重复:允许存储相同的元素
  • 可索引访问:可以通过 index(下标)获取或修改元素
  • 动态大小:大多数实现支持自动扩容

🔍 二、List 的常用方法一览表

方法作用返回类型是否修改 List
add(E e)在末尾添加元素boolean✅ 是
add(int index, E element)在指定位置插入元素void✅ 是
get(int index)获取指定位置的元素E❌ 否
set(int index, E element)替换指定位置的元素E(旧值)✅ 是
remove(int index)删除指定位置的元素E(被删除的元素)✅ 是
remove(Object o)删除第一个匹配的元素boolean✅ 是
size()获取元素个数int❌ 否
isEmpty()判断是否为空boolean❌ 否
contains(Object o)判断是否包含某个元素boolean❌ 否
indexOf(Object o)返回首次出现的索引int(-1 表示不存在)❌ 否
lastIndexOf(Object o)返回最后一次出现的索引int❌ 否
clear()清空所有元素void✅ 是
subList(int from, int to)截取子列表(视图)List<E>✅ 视图可修改原 list
toArray()转为数组Object[]❌ 否
equals(Object o)比较两个 List 是否相等boolean❌ 否
toString()返回字符串表示String❌ 否

💡 所有方法都定义在 java.util.List<E> 接口中,ArrayListLinkedList 等实现类都会提供这些方法。


🧩 三、详细说明与代码示例

我们以 ArrayList<String> 为例:

List<String> list = new ArrayList<>();
list.add("A");
list.add("B");
list.add("C");
list.add("B"); // 允许重复

1. add(E e) —— 添加到末尾

list.add("D"); // [A, B, C, B, D]

2. add(int index, E element) —— 插入到指定位置

list.add(1, "X"); // 在索引1处插入 "X"
// 结果:[A, X, B, C, B, D]

⚠️ 如果 index 超出范围(index < 0 || index > size()),抛 IndexOutOfBoundsException


3. get(int index) —— 获取元素

String elem = list.get(0); // 返回 "A"

4. set(int index, E element) —— 修改元素

String old = list.set(0, "Z"); // 将索引0的元素改为 "Z",返回旧值 "A"
// 结果:[Z, X, B, C, B, D]

5. remove(int index) —— 按索引删除

String removed = list.remove(1); // 删除索引1的元素 "X",返回它
// 结果:[Z, B, C, B, D]

6. remove(Object o) —— 按对象删除

boolean isRemoved = list.remove("B"); // 删除第一个 "B"
// 结果:[Z, C, B, D],返回 true

⚠️ 只删除第一个匹配项


7. size() —— 获取大小

int count = list.size(); // 4

8. isEmpty() —— 判断是否为空

boolean empty = list.isEmpty(); // false

9. contains(Object o) —— 判断是否包含

boolean hasC = list.contains("C"); // true
boolean hasX = list.contains("X"); // false

使用 equals() 判断相等性。


10. indexOf(Object o)lastIndexOf(Object o)

list.indexOf("B");     // 返回第一次出现的索引 → 2
list.lastIndexOf("B"); // 返回最后一次出现的索引 → 2(只有一个)

如果找不到,返回 -1


11. clear() —— 清空

list.clear();
System.out.println(list.size()); // 0

12. subList(int from, int to) —— 截取子列表

List<String> sub = list.subList(1, 3); // 左闭右开 [1,3) → 索引1和2
// sub = ["X", "B"]

🔔 重要subList 返回的是原 List视图(view),修改 sub 会影响原 list

sub.remove(0); // 删除 "X"
// 原 list 变为:["A", "B", "C", "B"]

13. toArray() —— 转为数组

Object[] arr = list.toArray();

或者指定类型(推荐):

String[] arr = list.toArray(new String[0]);

14. equals(Object o) —— 比较两个 List

List<String> a = Arrays.asList("A", "B");
List<String> b = Arrays.asList("A", "B");
System.out.println(a.equals(b)); // true(内容相同即相等)

Listequals 比较的是元素内容和顺序,不是引用。


15. toString() —— 查看内容

System.out.println(list); 
// 输出:[A, B, C, B]

方便调试,自动调用。


🔄 四、遍历 List 的 4 种方式

方式 1:增强 for 循环(最常用)

for (String s : list) {
    System.out.println(s);
}

方式 2:普通 for 循环(适合需要索引)

for (int i = 0; i < list.size(); i++) {
    System.out.println(i + ": " + list.get(i));
}

方式 3:迭代器(Iterator)

Iterator<String> it = list.iterator();
while (it.hasNext()) {
    System.out.println(it.next());
}

⚠️ 遍历时不能用 list.remove(),要用 it.remove()

方式 4:forEach + Lambda(Java 8+)

list.forEach(System.out::println);
// 或
list.forEach(item -> System.out.println("Item: " + item));

⚠️ 五、常见错误与注意事项

错误正确做法
list.get(100) 索引越界先判断 index < list.size()
遍历时用 list.remove()改用 Iterator.remove()
认为 Arrays.asList() 返回可变列表它返回固定大小列表,不能 add/remove
直接比较两个 List 引用应使用 list1.equals(list2) 比较内容

✅ 六、总结:最常用方法 Top 10

排名方法使用频率
1️⃣add(E)⭐⭐⭐⭐⭐
2️⃣get(int)⭐⭐⭐⭐⭐
3️⃣size()⭐⭐⭐⭐☆
4️⃣remove(int) / remove(Object)⭐⭐⭐⭐☆
5️⃣set(int, E)⭐⭐⭐☆☆
6️⃣contains(Object)⭐⭐⭐☆☆
7️⃣indexOf(Object)⭐⭐☆☆☆
8️⃣subList(...)⭐⭐☆☆☆
9️⃣clear()⭐⭐☆☆☆
🔟toArray()⭐☆☆☆☆

📌 一句话建议

日常开发中,addgetremovesize 是最常用的方法,配合增强 for 循环即可完成大部分操作。

如果你有具体需求(比如“如何删除所有偶数”或“找出重复元素”),我可以给出对应的 List 方法组合!欢迎继续提问 😊

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值