Java 程序清空 ArrayList

javaobject oriented programmingprogramming

Java 中的 ArrayList 是一个动态数组,其大小可以随着元素的添加或删除而增大或缩小。它是"java.util"包的一部分,是一种非常常用的集合。ArrayList 非常类似于数组,因为它将相同或同类类型的元素存储在连续的内存块中。在本文中,我们将介绍在 Java 中清空 ArrayList 的不同方法。

在 Java 中清空 ArrayList 主要有 4 种方法,如下所示 -

  • 使用 Naïve 方法

  • 使用 clear() 方法

  • 使用 removeAll() 方法

  • 分配新的 ArrayList 实例

现在让我们更详细地了解每种方法及其 Java 实现。

1. 使用 Naïve 方法

此方法不使用任何内置方法来删除 ArrayList 的元素,而是使用 while 循环。如果 ArrayList 为空,则 isEmpty() 方法返回 true 或 false。 while 循环一直执行,直到 isEmpty() 返回 false,并且每次都会在主体内部删除第一个元素或索引 0 处的元素。一旦 isEmpty() 返回 True,循环就会终止。它可以被视为一种手动且时间复杂的方法,它会从 ArrayList 中逐个删除每个元素。

示例

import java.util.ArrayList;
public class EmptyArrayListExample {
   public static void main(String[] args) {
   
    ArrayList<String> list_of_languages = new ArrayList<String>();
    
    // 填充 ArrayList
    list_of_languages.add("Java");
    list_of_languages.add("Python");
    list_of_languages.add("C++");
    list_of_languages.add("R");
    list_of_languages.add("C#");
    list_of_languages.add("JavaScript");
    
    System.out.println("Original Arraylist: " + list_of_languages);
    
    // 运行 while 循环直到它变为空
    while (!list_of_languages.isEmpty()) {
    list_of_languages.remove(0); // 删除第一个元素
    }
    // 尝试清空 ArrayList 后打印该列表
    System.out.println("Empty Arraylist: " + list_of_languages);
   }
}

输出

上述程序将产生以下输出 -

Original Arraylist: [Java, Python, C++, R, C#, JavaScript]
Empty Arraylist: []

2. Using the clear() Method

This approach involves the use of the ArrayList class’s in-built clear() method which doesn’t take in any parameters or return any values. It is the easiest way to empty an ArrayList.

示例

import java.util.ArrayList;
public class EmptyArrayListExample {
   public static void main(String[] args) {
    // 填充 arraylist
    ArrayList<String> list_of_languages = new ArrayList<String>();
    
    // 向 list_of_languages 中添加一些元素
    list_of_languages.add("Java");
    list_of_languages.add("Python");
    list_of_languages.add("C++");
    list_of_languages.add("R");
    list_of_languages.add("C#");
    list_of_languages.add("JavaScript");
       
    // 打印原始 list_of_languages
    System.out.println("Original Arraylist: " + list_of_languages);
    
    // 使用 clear() 方法清空 list_of_languages
    list_of_languages.clear();
    
    // 打印空的语言列表
    System.out.println("Empty Arraylist:" + list_of_languages);
   }
}

输出

上述程序将产生以下输出 -

Original Arraylist: [Java, Python, C++, R, C#, JavaScript]
Empty Arraylist: []

3. 使用 removeAll() 方法

removeAll() 方法也是 ArrayList 类的内置方法。此方法可以接受一个可选参数,该参数是要从 ArrayList 中删除的另一个元素集合或元素集。它返回一个布尔值,如果列表因函数调用而发生变化,则该值为 true。如果没有元素传递给它,它将删除列表中的所有元素。

示例

import java.util.ArrayList;
public class EmptyArrayListExample {
   public static void main(String[] args) {
   
      	ArrayList<String> list_of_languages = new ArrayList<String>();
   
        // 填充 ArrayList
        list_of_languages.add("Java");
        list_of_languages.add("Python");
        list_of_languages.add("C++");
        list_of_languages.add("R");
        list_of_languages.add("C#");
        list_of_languages.add("JavaScript");
        
        System.out.println("Original Arraylist: " + list_of_languages);
        
        // 使用 removeAll() 方法清空 list_of_languages
        list_of_languages.removeAll(list_of_languages);
        
        System.out.println("Empty Arraylist: " + list_of_languages);
   }
}

输出

上述程序将产生以下输出 -

Original Arraylist: [Java, Python, C++, R, C#, JavaScript]
Empty Arraylist: []

4. 分配新的 ArrayList 实例

此技术涉及创建 ArrayList 的新实例并将其再次分配给同一变量。但是,尽管此方法有效,但并不推荐使用,因为它会产生不必要的开销并可能导致潜在的内存泄漏。

当我们将新的 ArrayList 分配给同一现有 ArrayList 变量的实例时,旧的 ArrayList 对象将有资格进行垃圾收集。垃圾收集过程不会立即发生,可能需要一些时间才能将旧对象从内存中删除,这意味着我们可能在内存中拥有 2 个 ArrayList 对象,其中 1 个不再使用。

此外,旧的 ArrayList 对象在程序的其他地方仍然有对它的引用,即使不再使用旧对象,这些引用仍将指向旧对象。这可能是潜在内存泄漏的原因,导致程序消耗的内存超过实际需要。

示例

import java.util.ArrayList;
public class EmptyArrayListExample {
   public static void main(String[] args) {
   
    ArrayList<String> list_of_languages = new ArrayList<String>();
    
    // 填充 ArrayList
    list_of_languages.add("Java");
    list_of_languages.add("Python");
    list_of_languages.add("C++");
    list_of_languages.add("R");
    list_of_languages.add("C#");
    list_of_languages.add("JavaScript");
    
    System.out.println("Original Arraylist: " + list_of_languages);
    
    // 创建并将 ArrayList 的新实例分配给旧 arrayList 变量
    list_of_languages = new ArrayList<String>();
    
    System.out.println("Empty Arraylist: " + list_of_languages);
   }
}

输出

上述程序将产生以下输出 -

Original Arraylist: [Java, Python, C++, R, C#, JavaScript]
Empty Arraylist: []

结论

ArrayList 是存储同类数据的动态大小数组。ArrayList 类为我们提供了几种清空 ArrayList 的方法。这些方法包括 clear() 方法和 removeAll() 方法。除了内置函数外,还有另外 2 种方法可以清空 ArrayList。这些方法包括删除 ArrayList 的每个元素的简单方法和将 ArrayList 的新实例分配给同一变量。在上述 4 种方法中,最好始终使用 clear() 方法。第 4 种方法是重新分配 ArrayList 类的新实例,该类负责清空 ArrayList,这种方法是可能的,应该避免。 ArrayList 在 Java 中很常用,与数组相比更灵活。总体而言,清空 ArrayList 是一项简单的任务。


相关文章