দুটি স্ট্রিং অ্যারে থেকে সাধারণ (Common) এলিমেন্ট বের করে ListView-এ দেখানো
এই উদাহরণে দুটি অ্যারে থেকে সাধারণ মানগুলো বের করে একটি 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 - নেস্টেড লুপ পদ্ধতি (O(n×m))
package com.example.myapplication;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
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(names, 0, extended, 0, names.length); // extended = [A,B,C,D,E]
// কমন এলিমেন্ট বের করা (Nested Loop)
ArrayList<String> common = new ArrayList<>();
for (int i = 0; i < names.length; i++) {
for (int j = 0; j < extended.length; j++) {
if (names[i].equals(extended[j])) { // String তুলনা .equals() দিয়ে
common.add(names[i]);
}
}
}
ArrayAdapter<String> adapter = new ArrayAdapter<>(this,
android.R.layout.simple_list_item_1, common);
listView.setAdapter(adapter);
}
}
অপ্টিমাইজড পদ্ধতি: HashSet ব্যবহার (O(n+m))
// HashSet ব্যবহার করে দ্রুত কমন এলিমেন্ট বের করা
HashSet<String> set1 = new HashSet<>(Arrays.asList(names));
HashSet<String> set2 = new HashSet<>(Arrays.asList(extended));
// Intersection (সাধারণ এলিমেন্ট)
set1.retainAll(set2); // set1 এখন শুধু কমন এলিমেন্ট ধারণ করবে
ArrayList<String> common = new ArrayList<>(set1);
// অথবা Java 8 Stream API (API 24+)
List<String> commonStream = Arrays.stream(names)
.filter(s -> Arrays.asList(extended).contains(s))
.distinct()
.collect(Collectors.toList());
পারফরম্যান্স তুলনা
| পদ্ধতি | টাইম কমপ্লেক্সিটি | স্পেস | উপযুক্ত |
|---|---|---|---|
| Nested Loop | O(n×m) | O(min(n,m)) | ছোট অ্যারে (n,m < 100) |
| HashSet retainAll | O(n+m) | O(n+m) | বড় অ্যারে, ডুপ্লিকেট না থাকলে |
| Sort + Two Pointer | O(n log n + m log m) | O(1) | সোর্টেড অ্যারে, মেমরি সীমিত |
সতর্কতা
- String তুলনা
==দিয়ে না করে.equals()দিয়ে করুন - কেস-সেনসিটিভ: "A" != "a" - প্রয়োজনে
toLowerCase()ব্যবহার করুন - ডুপ্লিকেট এলিমেন্ট থাকলে
HashSetঅটোমেটিক্যালি হ্যান্ডেল করে
