Giới thiệu
Ví dụ này minh họa việc sử dụng ensureCapacity(int minCapacity) để đặt trước dung lượng (capacity) của ArrayList, tránh chi phí resize liên tục khi thêm phần tử, cải thiện hiệu năng ListView.
Bước 1 & 2: Tạo dự án và Giao diện
Giao diện: EditText, nút Lưu, Làm mới, ListView.
Bước 3: MainActivity.java
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter<String> arrayAdapter;
ArrayList<String> array_list;
Set<String> set = new HashSet<>();
ListView listView;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
array_list = new ArrayList<>();
// QUAN TRỌNG: Đặt dung lượng tối thiểu 20 phần tử
array_list.ensureCapacity(20);
name = findViewById(R.id.name);
listView = findViewById(R.id.listView);
findViewById(R.id.refresh).setOnClickListener(v -> {
if (arrayAdapter != null) {
arrayAdapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
}
});
findViewById(R.id.save).setOnClickListener(v -> {
String input = name.getText().toString();
if (!input.isEmpty()) {
set.add(input);
array_list.clear();
array_list.addAll(set);
Collections.sort(array_list, new Comparator<String>() {
@Override
public int compare(String o1, String o2) {
return o1.compareTo(o2);
}
});
arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
Toast.makeText(this, "Đã thêm", Toast.LENGTH_LONG).show();
} else {
name.setError("Nhập tên");
}
});
}
}
Giải thích ensureCapacity()
- Mặc định: ArrayList khởi tạo capacity = 10 (hoặc 0 trong Java 8+).
- Khi đầy: Tự động mở rộng gấp 1.5 lần (newCapacity = oldCapacity * 3/2 + 1).
- Chi phí: Mở rộng mảng tốn O(n) copy dữ liệu.
- ensureCapacity(n): Đảm bảo capacity ≥ n, tránh resize nhiều lần.
Khi nào nên dùng?
- Biết trước số lượng phần tử ước lượng (ví dụ: load 1000 item từ DB).
- Thêm nhiều phần tử trong vòng lặp.
- Ứng dụng nhạy cảm hiệu năng (game, real-time).
Đối 비교: trimToSize()
ensureCapacity(): Tăng capacity LÊN.trimToSize(): Giảm capacity XUỐNG = size hiện tại (giải phóng bộ nhớ).
Chạy ứng dụng

ListView hiển thị danh sách đã sắp xếp, hiệu năng tốt hơn khi thêm nhiều item.