Mục tiêu
Tương tự bài trước nhưng lưu trữ mảng int[] (hoặc bất kỳ mảng nào) trong Singleton, truy cập bằng global context.
Các bước thực hiện
Bước 1: Tạo dự án mới
Android Studio → File → New Project → Empty Activity.
Bước 2: Layout (activity_main.xml)
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="https://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:gravity="center"
android:padding="24dp">
<Button
android:id="@+id/btnSaveArray"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lưu mảng vào Singleton" />
</LinearLayout>
Bước 3: SingleTonExample.java (lưu int[])
package com.example.singletonarray;
import android.content.Context;
import java.util.Arrays;
public class SingleTonExample {
private static final SingleTonExample INSTANCE = new SingleTonExample();
private Context appContext;
private int[] storedArray;
private SingleTonExample() {}
public static synchronized SingleTonExample getInstance() {
return INSTANCE;
}
public void init(Context context) {
if (appContext == null) {
this.appContext = context.getApplicationContext();
}
}
public static Context getGlobalContext() {
return getInstance().appContext;
}
public void storeArray(int[] array) {
this.storedArray = array != null ? array.clone() : new int[0]; // Defensive copy
}
public int[] getArray() {
return storedArray != null ? storedArray.clone() : new int[0];
}
public String getArrayString() {
return Arrays.toString(storedArray);
}
}
Bước 4: MainActivity.java
package com.example.singletonarray;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
public class MainActivity extends AppCompatActivity {
private Button btnSave;
private SingleTonExample singleton;
private final int[] sampleArray = {33, 12, 98, 45, 67};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnSave = findViewById(R.id.btnSave);
singleton = SingleTonExample.getInstance();
singleton.init(getApplicationContext());
btnSave.setOnClickListener(v -> {
singleton.storeArray(sampleArray);
Toast.makeText(
SingleTonExample.getGlobalContext(),
"Mảng đã lưu: " + singleton.getArrayString(),
Toast.LENGTH_LONG
).show();
});
}
}
Kết quả
Toast hiển thị: Mảng đã lưu: [33, 12, 98, 45, 67]


Lưu ý quan trọng
- Defensive copy:
array.clone()khi set/get để tránh caller sửa đổi mảng nội bộ - Với
String[],Object[]: dùngArrays.copyOf() - Với
ArrayList:new ArrayList<>(list)để copy - Global context cho phép hiển thị Toast từ bất kỳ đâu (không cần Activity context)
So sánh: HashMap vs Array trong Singleton
| Đặc điểm | HashMap | Array |
|---|---|---|
| Truy cập | O(1) bằng key | O(1) bằng index |
| Kích thước | Động | Cố định (khởi tạo) |
| Phù hợp | Key-value, lookup nhanh | Danh sách có thứ tự, index cố định |
| Thread-safe | Không (dùng ConcurrentHashMap) | Không (dùng copy hoặc sync) |