Tại sao cần chuyển Array → ArrayList?
Array có kích thước cố định, ArrayList động, hỗ trợ thêm/xóa/sắp xếp dễ dàng. Thường dùng khi làm việc với ListView/RecyclerView.
activity_main.xml
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:padding="16dp">
<EditText
android:id="@+id/name"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Nhập tên" />
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:layout_marginTop="8dp">
<Button android:id="@+id/save" android:text="Lưu" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/>
<Button android:id="@+id/refresh" android:text="Làm mới" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight="1"/>
</LinearLayout>
<ListView
android:id="@+id/listView"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:layout_marginTop="8dp"/>
</LinearLayout>
MainActivity.java - Chuyển Array → ArrayList
public class MainActivity extends AppCompatActivity {
private EditText edtName;
private ListView listView;
private ArrayAdapter<String> adapter;
private ArrayList<String> dataList;
private Set<String> nameSet = new HashSet<>();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
edtName = findViewById(R.id.name);
listView = findViewById(R.id.listView);
dataList = new ArrayList<>();
// Khởi tạo adapter với layout đơn giản
adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, dataList);
listView.setAdapter(adapter);
findViewById(R.id.save).setOnClickListener(v -> addName());
findViewById(R.id.refresh).setOnClickListener(v -> adapter.notifyDataSetChanged());
}
private void addName() {
String name = edtName.getText().toString().trim();
if (name.isEmpty()) {
edtName.setError("Nhập tên");
return;
}
nameSet.add(name); // Set tự loại trùng
edtName.setText("");
// Mảng mẫu
String[] techArray = {"ANDROID", "JSP", "JAVA", "STRUTS", "HADOOP", "JSF"};
// CÁCH 1: Arrays.asList() + ArrayList constructor (khuyên dùng)
ArrayList<String> fromArray = new ArrayList<>(Arrays.asList(techArray));
// CÁCH 2: Collections.addAll()
ArrayList<String> list2 = new ArrayList<>();
Collections.addAll(list2, techArray);
// CÁCH 3: Vòng lặp (cũ)
ArrayList<String> list3 = new ArrayList<>();
for (String s : techArray) list3.add(s);
// Gộp dữ liệu: mảng mẫu + tên người dùng nhập
dataList.clear();
dataList.addAll(fromArray);
dataList.addAll(nameSet);
// Sắp xếp A-Z
Collections.sort(dataList);
// Cập nhật ListView
adapter.notifyDataSetChanged();
Toast.makeText(this, "Đã thêm: " + name, Toast.LENGTH_SHORT).show();
}
}
So sánh các cách chuyển đổi
| Cách | Code | Ưu/nhược điểm |
|---|---|---|
| Arrays.asList() | new ArrayList<>(Arrays.asList(array)) | Ngắn gọn, phổ biến. Trả về fixed-size list nếu không wrap ArrayList. |
| Collections.addAll() | Collections.addAll(list, array) | Hiệu năng tốt, thêm vào list đã có sẵn. |
| Stream API (Java 8+) | Arrays.stream(array).collect(Collectors.toList()) | Hiện đại, hỗ trợ filter/map. Cần minSdk 24+. |
| Vòng lặp for | for (T item : array) list.add(item) | Kiểm soát chi tiết, hiệu năng cao. |
Kết quả

Danh sách hiển thị: 6 item mảng mẫu + tên người dùng nhập, đã sắp xếp.
Lưu ý
- Arrays.asList() trả về List có kích thước cố định, không add/remove được → phải wrap trong new ArrayList<>().
- Dùng HashSet để loại trùng lặp trước khi add vào ArrayList.
- ArrayAdapter tự cập nhật UI khi gọi notifyDataSetChanged().