ตัวอย่าง: การใช้ unmodifiableSet ใน Android
ตัวอย่างนี้สาธิตวิธีใช้ Collections.unmodifiableSet() เพื่อสร้าง Set ที่อ่านอย่างเดียว (Read-only) ไม่สามารถแก้ไขได้
ขั้นตอนที่ 1: สร้างโปรเจกต์ใหม่ใน Android Studio
ไปที่ File → New Project แล้วกรอกรายละเอียดที่จำเป็น
ขั้นตอนที่ 2: เพิ่มโค้ดใน 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"
tools:context = ".MainActivity"
android:orientation = "vertical">
<EditText
android:id = "@+id/name"
android:layout_width = "match_parent"
android:hint = "Enter Name"
android:layout_height = "wrap_content" />
<LinearLayout
android:layout_width = "wrap_content"
android:layout_height = "wrap_content">
<Button
android:id = "@+id/save"
android:text = "Save"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
<Button
android:id = "@+id/refresh"
android:text = "Refresh"
android:layout_width = "wrap_content"
android:layout_height = "wrap_content" />
</LinearLayout>
<ListView
android:id = "@+id/listView"
android:layout_width = "match_parent"
android:layout_height = "wrap_content">
</ListView>
</LinearLayout>
โค้ดข้างต้นใช้ EditText สำหรับชื่อ กด Save เพื่อเก็บข้อมูลใน ArrayList กด Refresh เพื่อแสดงการเปลี่ยนแปลงของ ListView
ขั้นตอนที่ 3: เพิ่มโค้ดใน src/MainActivity.java
package com.example.andy.myapplication;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import java.util.Collections;
import java.util.Set;
import java.util.ArrayList;
import java.util.SortedSet;
import java.util.TreeSet;
import java.util.Vector;
public class MainActivity extends AppCompatActivity {
EditText name;
ArrayAdapter arrayAdapter;
ArrayList<String> array_list;
SortedSet set = new TreeSet();
private ListView listView;
@Override
protected void onCreate(Bundle readdInstanceState) {
super.onCreate(readdInstanceState);
setContentView(R.layout.activity_main);
array_list = new ArrayList<String>();
name = findViewById(R.id.name);
listView = findViewById(R.id.listView);
findViewById(R.id.refresh).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
arrayAdapter.notifyDataSetChanged();
listView.invalidateViews();
listView.refreshDrawableState();
}
});
findViewById(R.id.save).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!name.getText().toString().isEmpty()) {
set.add(name.getText().toString());
Set syncSet = Collections.unmodifiableSet(set);
array_list.clear();
array_list.addAll(syncSet);
arrayAdapter = new ArrayAdapter(MainActivity.this, android.R.layout.simple_list_item_1, array_list);
listView.setAdapter(arrayAdapter);
Toast.makeText(MainActivity.this, "Inserted", Toast.LENGTH_LONG).show();
} else {
name.setError("Enter NAME");
}
}
});
}
}
การทดสอบแอปพลิเคชัน
รันแอปพลิเคชันจาก Android Studio เลือกอุปกรณ์มือถือ แล้วตรวจสอบหน้าจอเริ่มต้น

ในผลลัพธ์ข้างต้น เราเพิ่มชื่อของสมาชิก TreeSet เข้า Adapter
สรุป
Collections.unmodifiableSet() ใช้สร้างมุมมอง (View) ของ Set ที่ไม่สามารถแก้ไขได้ (Immutable View) หากพยายามเพิ่ม ลบ หรือเปลี่ยนแปลงข้อมูลใน Set ที่ได้จากเมธอดนี้ จะเกิด UnsupportedOperationException ขึ้น ในตัวอย่างนี้ เราใช้ TreeSet (ซึ่งจัดเรียงข้อมูลอัตโนมัติ) แล้วห่อด้วย unmodifiableSet ก่อนนำไปแสดงใน ListView ซึ่งเป็นแนวทางปฏิบัติที่ดี (Best Practice) เมื่อต้องการส่งคืน Set ให้โค้ดภายนอกโดยไม่ต้องการให้แก้ไขข้อมูลต้นฉบับได้