Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> Android

วิธีขยายอาร์เรย์หลังจาก Initialization ใน Android ListView

ภาพรวม

ตัวอย่างนี้สาธิตวิธี ขยายขนาดอาร์เรย์ (Extend Array) หลังจากสร้างแล้วใน Android โดยใช้ System.arraycopy() และแสดงผลใน ListView

ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่

เปิด Android Studio ไปที่ File → New Project กรอกรายละเอียดที่จำเป็นทั้งหมดเพื่อสร้างโปรเจกต์ใหม่

ขั้นตอนที่ 2: จัดทำ Layout (res/layout/activity_main.xml)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
    xmlns:tools="https://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:gravity="center_horizontal"
    android:layout_marginTop="30dp"
    tools:context=".MainActivity">
    <ListView
        android:id="@+id/list"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content">
    </ListView>
</LinearLayout>

ขั้นตอนที่ 3: เขียนโค้ดหลัก (src/MainActivity.java)

package com.example.myapplication;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class MainActivity extends AppCompatActivity {
    ListView list;
    String[] names = new String[]{"A", "B", "C"};
    String[] extended = new String[5]; // ขยายเป็นขนาด 5

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        list = findViewById(R.id.list);

        // กำหนดค่าในตำแหน่งที่ขยาย
        extended[3] = "D";
        extended[4] = "E";

        // คัดลอก names เข้า extended เริ่มที่ index 0
        System.arraycopy(names, 0, extended, 0, names.length);
        // extended = ["A", "B", "C", "D", "E"]

        // แปลงเป็น List เพื่อความยืดหยุ่น (แนะนำ)
        List<String> extendedList = new ArrayList<>(Arrays.asList(extended));

        ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
                android.R.layout.simple_list_item_1, extendedList);
        list.setAdapter(adapter);
    }
}

การทดสอบ

รันแอป จะแสดง ListView มีรายการ A, B, C, D, E

วิธีขยายอาร์เรย์ใน Java/Android

วิธีโค้ดข้อดีข้อเสีย
System.arraycopySystem.arraycopy(src, 0, dest, 0, src.length)เร็วที่สุด เป็น Nativeต้องสร้างอาร์เรย์ใหม่ขนาดใหญ่ก่อน
Arrays.copyOfString[] newArr = Arrays.copyOf(oldArr, newSize)สร้างอาร์เรย์ใหม่อัตโนมัติช้ากว่า arraycopy นิดหน่อย
ArrayList (แนะนำ)List<String> list = new ArrayList<>(Arrays.asList(arr))ขยายได้ไม่จำกัด มีเมธอดครบใช้หน่วยความจำมากกว่าเล็กน้อย
Collections.addAllCollections.addAll(list, newItems)เพิ่มหลายค่าพร้อมกันต้องมี List อยู่แล้ว

ตัวอย่าง Arrays.copyOf (สะดวกกว่า)

String[] names = {"A", "B", "C"};
// ขยายจาก 3 เป็น 5 ช่อง
names = Arrays.copyOf(names, 5);
names[3] = "D";
names[4] = "E";
// names = ["A", "B", "C", "D", "E"]

ตัวอย่าง ArrayList (Best Practice)

List<String> names = new ArrayList<>(Arrays.asList("A", "B", "C"));
names.add("D");
names.add("E");
names.addAll(Arrays.asList("F", "G"));
// names = ["A", "B", "C", "D", "E", "F", "G"]

เมื่อไหร่ควรใช้ Array vs ArrayList

  • Array: ขนาดคงที่ ประสิทธิภาพสูงสุด สำหรับ Primitive types (int[], byte[])
  • ArrayList: ขนาดเปลี่ยนแปลงได้ API Rich สำหรับ Objects (String, Custom Class)
  • ใน Android: แนะนำใช้ ArrayList/Vector สำหรับ Adapter และ UI Components

การแปลงระหว่าง Array และ List

// Array → List
List<String> list = Arrays.asList(array); // Fixed-size list
List<String> mutableList = new ArrayList<>(Arrays.asList(array)); // Modifiable

// List → Array
String[] array = list.toArray(new String[0]); // Java 8+
// หรือ
String[] array = list.toArray(new String[list.size()]);