Clear ArrayList trong java với ví dụ cụ thể

Trong ArrayList chúng ta có 2 method để xoá tất cả các phần tử:

  • clear()
  • removeAll()

public void clear()

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {

        ArrayList<Integer> arr = new ArrayList<Integer>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        System.out.println("Size truoc khi xoa: " + arr.size());
        arr.clear();
        System.out.println("Size sau khi clear: " + arr.size());
    }
}

Output:

Size truoc khi xoa: 3
Size sau khi clear: 0

public boolean removeAll(Collection<?> c)

Method removeAll() sẽ xoá ArrayList với các phần tử xuất hiện trong collection c. Để xoá hết tất cả các phần tử chúng ta chỉ cần truyền ArrayList mà chúng ta cần xoá.

import java.util.ArrayList;

public class Main {
    public static void main(String[] args) {

        ArrayList<Integer> arr = new ArrayList<Integer>();
        arr.add(1);
        arr.add(2);
        arr.add(3);
        System.out.println("Size truoc khi xoa: " + arr.size());
        arr.removeAll(arr);
        System.out.println("Size sau khi clear: " + arr.size());
    }
}

Output: 

Size truoc khi xoa: 3
Size sau khi clear: 0

Cơ chế hoạt động của clear() của removeAll()

Như các bạn biết thì các method được java xây dựng sẵn nhằm mục đích hỗ trợ chúng ta code nhanh chóng. Vậy đâu là code thực sự nó được chạy. 

Clear() 

Dưới đây là code bên dưới hàm clear(), nghe ghê ghớm vậy thôi những dòng code dưới đây cực kỳ quen thuộc luôn các bạn.

public void clear() {
    // clear to let GC do its work
    for (int i = 0; i < size; i++)
        elementData[i] = null;
    size = 0;
}

removeAll()

public boolean removeAll(Collection c) {
    boolean ismodified = false;
    Iterator iterator = iterator();
    while (iterator.hasNext()) {
        if (c.contains(iterator.next())) {
            iterator.remove();
            ismodified = true;
        }
    }
    return ismodified;
}

Phân tích một chút, chúng ta thấy removeAll() nó duyệt từng phần tử trong collection truyền vào và sử dụng thêm hàm contains(). Như vậy độ phức tạp của nó là O(n^2) trong khi clear() chỉ tốn O(n).

Nên sử dụng clear() khi bạn muốn xoá toàn bộ phần tử trong ArrayList, và chỉ sử dụng removeAll() khi bạn muốn xoá một tập các phần tử xác định.

‹Previous Next›

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x