System.arraycopy() ব্যবহার করে ফিক্সড সাইজ অ্যারে এক্সটেন্ড করা
Java-এ অ্যারে একবার ইনিশিয়ালাইজ হলে এর সাইজ পরিবর্তন করা যায় না। কিন্তু বড় আকারের নতুন অ্যারে তৈরি করে System.arraycopy() দিয়ে পুরনো ডেটা কপি করা যায়। এই টিউটোরিয়ালে তা ListView-এ দেখানো হলো।
লেআউট (activity_main.xml)
<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" />
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.Arrays;
public class MainActivity extends AppCompatActivity {
ListView listView;
String[] names = new String[]{"A", "B", "C"};
String[] extended = new String[5]; // নতুন বড় অ্যারে (সাইজ ৫)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
listView = findViewById(R.id.list);
// নতুন এলিমেন্ট যোগ
extended[3] = "D";
extended[4] = "E";
// পুরনো অ্যারে থেকে নতুন অ্যারেতে কপি
// System.arraycopy(src, srcPos, dest, destPos, length)
System.arraycopy(names, 0, extended, 0, names.length);
// ফলাফল: extended = ["A", "B", "C", "D", "E"]
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, extended);
listView.setAdapter(adapter);
}
}
System.arraycopy() প্যারামিটার ব্যাখ্যা
System.arraycopy(
Object src, // উৎস অ্যারে (names)
int srcPos, // উৎস থেকে শুরু ইনডেক্স (0)
Object dest, // গন্তব্য অ্যারে (extended)
int destPos, // গন্তব্যে শুরু ইনডেক্স (0)
int length // কপি করার এলিমেন্ট সংখ্যা (names.length = 3)
);
আধুনিক ও সহজ বিকল্পসমূহ
১. Arrays.copyOf() - নতুন অ্যারে রিটার্ন করে
String[] extended = Arrays.copyOf(names, 5); // সাইজ ৫-এ রিসাইজ
extended[3] = "D";
extended[4] = "E";
২. ArrayList - ডাইনামিক সাইজ (প্রস্তাবিত)
ArrayList<String> list = new ArrayList<>(Arrays.asList("A", "B", "C"));
list.add("D");
list.add("E");
// ListView-এ ব্যবহার: new ArrayAdapter<>(this, layout, list)
৩. Java 8+ Stream API
String[] extended = Stream.concat(
Arrays.stream(names),
Stream.of("D", "E")
).toArray(String[]::new);
পারফরম্যান্স টিপস
- System.arraycopy() নেটিভ কোডে লেখা থাকায় সবচেয়ে ফাস্ট
- বারবার রিসাইজ করতে হলে
ArrayListব্যবহার করুন (Amortized O(1) add) - Primitive array (int[], double[]) এর জন্য
Arrays.copyOf()ব্যবহার করুন
দৃশ্যমান ফলাফল
ListView-এ ৫টি আইটেম দেখাবে: A, B, C, D, E
