Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Android

Chuyển mảng (Array) thành ArrayList trong Android

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áchCodeƯ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 forfor (T item : array) list.add(item)Kiểm soát chi tiết, hiệu năng cao.

Kết quả

Chuyển mảng (Array) thành ArrayList trong Android

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().