কম্পিউটার টিউটোরিয়াল

অ্যান্ড্রয়েড ListView-এ বাইনারি সার্চ (Binary Search) ব্যবহার

Collections.binarySearch() কী?

Collections.binarySearch() একটি সাজানো (sorted) লিস্টে কোনো এলিমেন্ট দ্রুত খুঁজে বের করার জন্য বাইনারি সার্চ অ্যালগরিদম ব্যবহার করে। এটি O(log n) টাইম কমপ্লেক্সিটিতে কাজ করে। শর্ত: লিস্টটি অবশ্যই সাজানো থাকতে হবে।

উদাহরণ: ListView-এ বাইনারি সার্চ বাস্তবায়ন

এই উদাহরণে ArrayList-এ "sairam" স্ট্রিং খুঁজে বের করার জন্য বাইনারি সার্চ ব্যবহার করা হয়েছে। পাওয়া গেলে সকল এলিমেন্ট "sairam" দিয়ে প্রতিস্থাপন করা হয়েছে।

ধাপ ১-২: প্রজেক্ট ও লেআউট

পূর্বের উদাহরণের মতো activity_main.xml ব্যবহার করুন।

ধাপ ৩: MainActivity.java - Binary Search বাস্তবায়ন

package com.example.binarysearchdemo;

import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.EditText;
import android.widget.ListView;
import android.widget.Toast;
import androidx.appcompat.app.AppCompatActivity;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

public class MainActivity extends AppCompatActivity {
    EditText name;
    ArrayAdapter<String> arrayAdapter;
    ArrayList<String> arrayList;
    Set<String> nameSet = new HashSet<>();
    ListView listView;

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

        arrayList = new ArrayList<>();
        arrayList.ensureCapacity(20);
        
        name = findViewById(R.id.name);
        listView = findViewById(R.id.listView);

        findViewById(R.id.refresh).setOnClickListener(v -> {
            if (arrayAdapter != null) {
                arrayAdapter.notifyDataSetChanged();
                listView.invalidateViews();
                listView.refreshDrawableState();
            }
        });

        findViewById(R.id.save).setOnClickListener(v -> {
            String inputName = name.getText().toString().trim();
            if (!inputName.isEmpty()) {
                nameSet.add(inputName);
                arrayList.clear();
                
                if (arrayList.isEmpty()) {
                    arrayList.addAll(nameSet);
                    
                    // বাইনারি সার্চের জন্য লিস্টটি সাজানো আবশ্যক
                    Collections.sort(arrayList);
                    
                    // বাইনারি সার্চ: "sairam" খুঁজুন
                    int index = Collections.binarySearch(arrayList, "sairam");
                    
                    if (index >= 0) {
                        // পাওয়া গেলে সকল এলিমেন্ট "sairam" দিয়ে ফিল করুন
                        Collections.fill(arrayList, "sairam");
                    }
                    
                    arrayList.trimToSize();
                    arrayAdapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, arrayList);
                    listView.setAdapter(arrayAdapter);
                } else {
                    listView.setVisibility(View.GONE);
                }
                Toast.makeText(this, "সংরক্ষণ সফল", Toast.LENGTH_LONG).show();
            } else {
                name.setError("নাম লিখুন");
            }
        });
    }
}

বাইনারি সার্চের শর্তাবলী

  1. লিস্টটি অবশ্যই সাজানো (sorted) থাকতে হবে - Collections.sort(list) ব্যবহার করুন।
  2. অসাজানো লিস্টে বাইনারি সার্চ ব্যবহার করলে ভুল ফলাফল আসবে।
  3. রিটার্ন মান: ≥ 0 হলে এলিমেন্টের ইনডেক্স, < 0 হলে এলিমেন্ট নেই (ইনসারশন পয়েন্ট = -(return + 1))।

চলাচল ও ফলাফল

অ্যাপ রান করুন। প্রথমে কিছু নাম ইনপুট দিন (যেমন: "apple", "banana", "sairam", "zebra")। Save দিলে সাজানো লিস্ট দেখাবে। তারপর "sairam" লিখে আবার Save দিন। বাইনারি সার্চ "sairam" খুঁজে পাবে এবং সকল এলিমেন্ট "sairam" হয়ে যাবে।

অ্যান্ড্রয়েড ListView-এ বাইনারি সার্চ (Binary Search) ব্যবহার

অ্যান্ড্রয়েড ListView-এ বাইনারি সার্চ (Binary Search) ব্যবহার

প্রথম ছবিতে সাজানো লিস্ট, দ্বিতীয় ছবিতে বাইনারি সার্চ পাওয়া গেলে সকল মান "sairam" হয়ে গেছে।

  1. অ্যান্ড্রয়েড লিস্টভিউতে স্ট্রিং অ্যারে সর্ট করা

  2. অ্যান্ড্রয়েডে ListView ডাইনামিকভাবে আপডেট করার পদ্ধতি

  3. অ্যান্ড্রয়েড ListView-এ ফুটার যোগ করার পদ্ধতি

  4. অ্যান্ড্রয়েড এলার্ট ডায়ালগে ListView প্রদর্শনের পদ্ধতি