List集合的clear方法

本文介绍了Java中List接口的不同实现类如ArrayList和LinkedList的clear()方法的内部实现原理。通过释放集合中的所有对象并清空集合,使得这些集合能够被重复利用,避免了频繁创建新对象带来的性能开销。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在使用list 结合的时候习惯了 list=null ;在创建这样的方式,但是发现使用list的clear 方法很不错,尤其是有大量循环的时候

1、list 接口  的ArrayList 类的clear() 方法源码如下:

/**
     * Removes all of the elements from this list.  The list will
     * be empty after this call returns.
     */
    public void clear() {
        modCount++;

        // Let gc do its work
        for (int i = 0; i < size; i++)
            elementData[i] = null;

        size = 0;
    }

我们从中可以发现就是将list集合中的所有对象都释放了,而且集合也都空了,所以我们没必要多次创建list 集合而只需要调用一下 clear() 方法就可以了。


2、list 接口  的LinkedList类的clear() 方法源码如下:

 public void clear() {
        // Clearing all of the links between nodes is "unnecessary", but:
        // - helps a generational GC if the discarded nodes inhabit
        //   more than one generation
        // - is sure to free memory even if there is a reachable Iterator
        for (Node<E> x = first; x != null; ) {
            Node<E> next = x.next;
            x.item = null;
            x.next = null;
            x.prev = null;
            x = next;
        }
        first = last = null;
        size = 0;
        modCount++;
    }

从上面我们可以看到,不管是哪个实现类的clear 方式都是将里面的所有元素都释放了并且清空里面的属性  ,这样我们就不用在释放 创建新对象来保存内容而是可以直接将现有的集合制空再次使用。


### Java ArrayList 常用方法汇总 在 Java 中,`ArrayList` 是一种动态数组结构,支持灵活的元素添加、删除和访问操作。以下是 `ArrayList` 的常用方法及其功能: #### 1. 添加元素 - **add(E e)**: 在列表末尾添加一个元素。 - **add(int index, E element)**: 在指定位置插入一个元素。 ```java ArrayList<String> list = new ArrayList<>(); list.add("a"); // 添加到末尾 list.add(0, "b"); // 在索引 0 处插入 ``` #### 2. 删除元素 - **remove(int index)**: 根据索引删除元素。 - **remove(Object o)**: 根据对象值删除第一个匹配的元素。 ```java list.remove(0); // 删除索引为 0 的元素 list.remove("a"); // 删除值为 "a" 的第一个元素 ``` #### 3. 修改元素 - **set(int index, E element)**: 替换指定索引处的元素。 ```java list.set(0, "c"); // 将索引 0 处的元素替换为 "c" ``` #### 4. 访问元素 - **get(int index)**: 获取指定索引处的元素。 ```java String element = list.get(0); // 获取索引为 0 的元素 ``` #### 5. 判断条件 - **contains(Object o)**: 判断列表是否包含某个元素。 - **isEmpty()**: 判断列表是否为空。 - **size()**: 返回列表中元素的数量。 ```java boolean containsA = list.contains("a"); // 判断是否包含 "a" boolean isEmpty = list.isEmpty(); // 判断列表是否为空 int size = list.size(); // 获取列表大小 ``` #### 6. 转换操作 - **toArray()**: 将列表转换为数组。 - **toString()**: 将列表转换为字符串。 ```java Object[] array = list.toArray(); // 转换为数组 String str = list.toString(); // 转换为字符串 ``` #### 7. 清空列表 - **clear()**: 移除列表中的所有元素。 ```java list.clear(); // 清空列表 ``` #### 8. 遍历列表 可以使用传统的 `for` 循环或增强型 `for` 循环进行遍历[^1]。 ```java for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i)); } for (String s : list) { System.out.println(s); } ``` #### 9. 流式操作 利用 `Stream API` 对列表进行筛选、映射、排序等操作[^2]。 ```java List<String> filteredList = list.stream() .filter(s -> s.startsWith("a")) .collect(Collectors.toList()); ``` #### 10. 比较操作 - **equals(Object o)**: 判断两个列表是否相等。 - **hashCode()**: 返回列表的哈希码值。 ```java boolean isEqual = list.equals(otherList); // 比较两个列表 int hashCode = list.hashCode(); // 获取哈希码 ``` #### 11. 其他工具类方法 通过工具类如 `CollUtil` 可以简化集合操作[^1]。 ```java List<String> newList = CollUtil.newArrayList("a", "b", "c"); String joinStr = CollUtil.join(newList, ","); ``` ### 注意事项 - 使用 `remove(Object o)` 方法时,如果列表中存在重复元素,只会移除第一个匹配的元素[^3]。 - 确保索引范围有效,否则会抛出 `IndexOutOfBoundsException`。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值