জাভাতে সংগ্রহ সাজানো


161

আমি জাভাতে একজন শিক্ষানবিস জাভাতে বাছাই করা তালিকা বজায় রাখার জন্য কোন সংগ্রহ (গুলি) / ব্যবহার করতে হবে তা দয়া করে পরামর্শ দিন। আমি চেষ্টা করেছি Mapএবং Set, কিন্তু তারা আমি কি খুঁজছিলাম ছিলেন।

উত্তর:


187

এটি খুব দেরীতে আসে, তবে জেডিকেতে কেবল একটি বাছাই করা তালিকার উদ্দেশ্যে একটি ক্লাস রয়েছে। এটির নাম দেওয়া হয়েছে (অন্যান্য Sorted*ইন্টারফেসগুলির সাথে কিছুটা অর্ডারের বাইরে ) " java.util.PriorityQueue"। এটি হয় Comparable<?>গুলি বা একটি ব্যবহার করে বাছাই করতে পারেন Comparator

Listবাছাই করে ব্যবহারের সাথে পার্থক্য Collections.sort(...)হ'ল এটি সর্বদা আংশিক ক্রম বজায় রাখবে, ও (লগ (এন)) সন্নিবেশ কর্মক্ষমতা সহ, একটি হিপ ডেটা কাঠামো ব্যবহার করে, যেখানে সাজানোতে সন্নিবেশ করা ArrayListহবে ও (এন) (যেমন, বাইনারি অনুসন্ধান এবং সরানো ব্যবহার করে)।

তবে, এর বিপরীতে List, PriorityQueueসূচকযুক্ত অ্যাক্সেস ( get(5)) সমর্থন করে না , গাদা হয়ে আইটেমগুলি অ্যাক্সেস করার একমাত্র উপায় হ'ল একবারে এটি বের করে নেওয়া (এভাবে নাম PriorityQueue)।


4
ইমো এই উত্তরটি আরও অগ্রাধিকারের দাবি রাখে কারণ এটি জেডিকে-র সক্ষমতা রয়েছে এমন একমাত্র সংগ্রহের উল্লেখ করেছে
নিমক্যাপ

96
জাভাডোক থেকে: "পদ্ধতিটি পুনরাবৃত্তকারীগুলিতে সরবরাহ করা আইট্রেটারকে কোনও নির্দিষ্ট ক্রমে অগ্রাধিকারের কিউয়ের উপাদানগুলি অতিক্রম করার নিশ্চয়তা দেওয়া হয় না।"
ক্রিস্টোফার হামার্সট্রাম

10
@ জিরাফ: একটি অগ্রাধিকারের সারিটি কেবল এটিই, একটি ডেটা স্ট্রাকচার যা অগ্রাধিকারের সারিটি রাখতে খুব দক্ষ। আপনি সামনে থেকে পোল করতে পারেন এবং সাজানো ক্রমে ডেটা আইটেমগুলি পেতে পারেন। তবে স্তূপগুলি অভ্যন্তরীণভাবে সামগ্রীর সামগ্রিক ক্রম বজায় রাখে না (এজন্য এগুলি এত দক্ষ) তাই পোল অপারেশনটি সম্পাদন না করে উপাদানগুলিতে অ্যাক্সেসের কোনও উপায় নেই।
মার্টিন প্রোবস্ট

2
@ ক্রিস্পি এটি আপনার ডেটা কাঠামোর সাহায্যে ঠিক কী অর্জন করতে চান তার উপর কিছুটা নির্ভর করে। আইটেমের তালিকা বজায় রাখা এবং পরে অর্ডার করা ফ্যাশনে এগুলি পুনরুদ্ধার করার জন্য হিপগুলি একটি কার্যকর উপায় - পুনরুক্তি ব্যবহার করে কোনও কাজ হয় না, তবে আপনি যদি এটি থেকে পোল করেন তবে আপনি আপনার ডেটা যথাযথভাবে পাবেন। পুনরুদ্ধার ধ্বংসাত্মক, তবে এটি এখনও অনেক ক্ষেত্রে ঠিক হতে পারে। সুতরাং আমি মনে করি এই উত্তরটি ভাল।
মার্টিন প্রোবস্ট

4
@ মার্টিনপ্রোবস্ট দয়া করে আপনার উত্তরটি পরিষ্কারভাবে সংশোধন করুন নির্দেশ করুন যে সংগ্রহটি প্রত্যাশিত ক্রমের সাথে সংযুক্ত হতে পারে না। অনেকে বলেছে, এটি চরমভাবে বিভ্রান্তিকর!
জর্জি গ্যালভানো

53

TreeMap এবং TreeSet আপনাকে সাজানো ক্রমে সামগ্রীর উপর একটি পুনরাবৃত্তি দেবে। অথবা আপনি একটি অ্যারেলিস্ট ব্যবহার করতে পারেন এবং এটি বাছাই করতে কালেকশন.সোর্ট () ব্যবহার করতে পারেন। এই সমস্ত ক্লাস java.util এ রয়েছে


27
যদিও এটিতে দুটি বড় ত্রুটি রয়েছে, প্রথমটি যে কোনও সেটের সদৃশ থাকতে পারে না। দ্বিতীয়টি হ'ল যদি আপনি একটি তালিকা এবং সংগ্রহগুলি.সোর্ট () ব্যবহার করেন তবে আপনি ক্রমাগত বিশাল তালিকা বাছাই করে প্রবণতা প্রদর্শন করেন। নিশ্চিত যে আপনি একটি 'নোংরা' পতাকা ব্যবহার করতে পারেন তবে এটি একেবারে এক নয়।
Jeach

এটি একটি প্রশ্ন এনেছে যে আমাদের জাভাতে একটি বিকল্প আছে যা ডুপ্লিয়াটকে অনুমতি দেয় এবং সেট (ব্যালেন্সড বাইনারি ট্রি) এর মতো পারফরম্যান্সও দেয়
মানকডনন্দন

32

যদি আপনি একটি সাজানো তালিকা বজায় রাখতে চান যা আপনি প্রায়শই সংশোধন করবেন (যেমন একটি কাঠামো যা সাজানো ছাড়াও ডুপ্লিকেটকে অনুমতি দেয় এবং যার উপাদানগুলি সূচক দ্বারা দক্ষতার সাথে উল্লেখ করা যেতে পারে), তবে একটি অ্যারেলিস্ট ব্যবহার করুন তবে যখন আপনাকে কোনও উপাদান সন্নিবেশ করা দরকার , আপনি যে সূচকটিতে কোনও প্রদত্ত উপাদান যুক্ত করেছেন তা নির্ধারণ করতে সর্বদা কালেকশনস.বাইনারি অনুসন্ধান () ব্যবহার করুন। পরের পদ্ধতিটি আপনাকে সূচিটি বলেছে যাতে আপনার তালিকাটি বাছাই করে রাখতে sertোকাতে হবে।


11
n সন্নিবেশগুলি O (n ^ 2) হবে। একটি ট্রিসেট আপনাকে ক্লিনার কোড এবং ও (এন লগ এন) দেবে। OTOH জন্য বিরল একটি অ্যারের পরিবর্তন বাইনারি অনুসন্ধান দ্রুততর হবে এবং (তাই কম জিসি ওভারহেড) কম মেমরি ব্যবহার করা হবে।
টম হাটিন -

কোডটি পরিষ্কার রাখার জন্য এবং অনুলিপিগুলির জন্য অনুমতি দেওয়ার জন্য একটি সাজানো তালিকাগুলি তৈরি করা যথেষ্ট সহজ হবে যা সাজানো ক্রমে মান সন্নিবেশ করে।
মিঃ শাইনি এবং নিউ 安

ইমো, যদি আপনি @ টমহাউটিন-ট্যাকলাইন দ্বারা উল্লিখিত সতর্কতার সাথে বেঁচে থাকতে পারেন তবে এটি সর্বাধিক উত্সাহিত উত্তরের চেয়ে একটি উপায় উত্তম উত্তর। যে পুনরাবৃত্তি প্রত্যাশিত হিসাবে কাজ করে বেশিরভাগ ক্ষেত্রে এটি অত্যন্ত গুরুত্বপূর্ণ।
ডুনিগেট

ঘটনাচক্রে, টম ঠিক সেই নির্দিষ্ট আচরণের উপরেই রয়েছে: একটি ট্রি সেট আপনাকে আরও দক্ষ পরিবর্তন দেবে। তবে একটি ট্রি সেট কোনও তালিকা নয় (সূচকের দ্বারা উপাদানগুলি রেফারেন্স করা এবং নকলকে অনুমতি দেওয়ার কঠোর অর্থে) এবং পোস্টারটি জানিয়েছে যে তারা একটি তালিকা চায় wanted
নীল কফি

আপনাকে ধন্যবাদ নীল, এটি ছিল রক্তাক্ত দুর্দান্ত!
ভাইকিংস্টিভ

31

গুগল পেয়ারার ট্রিমলটিসেট ক্লাস ব্যবহার করুন । পেয়ারাতে দর্শনীয় সংগ্রহের এপিআই রয়েছে।

বাছাই করা অর্ডার বজায় রাখে তালিকার একটি বাস্তবায়ন সরবরাহের ক্ষেত্রে একটি সমস্যা হ'ল add()পদ্ধতির জাভডোকগুলিতে করা প্রতিশ্রুতি ।


মাল্টিসেটের পরামর্শের জন্য
কুডোস

5
প্রয়োজনীয়তা উল্লেখ করার জন্য +1 যা Listসর্বদা শেষে যুক্ত হয়।
রোল্যান্ড ইলিগ

2
দ্রষ্টব্য যে ট্রিমুলটিসেট এখনও সদৃশ উপাদানগুলিকে (তুলনামূলকভাবে (0) ফেরত দেয় 0 টি সমান নয় () পরীক্ষা করে না allow যদি আপনি একই অগ্রাধিকারের একাধিক আইটেম যুক্ত করার ঝোঁক করেন তবে এটি কেবল প্রথম যুক্ত হওয়াটির গণনা বাড়িয়ে তুলবে, অন্যকে ছাড়িয়ে দেবে এবং কার্যকরভাবে একটি ভাল কাউন্টিং ব্যাগ বাস্তবায়ন হবে।
বেকস

12

আপনি চাইলে বাছাই করা সেট বাস্তবায়ন করতে পারেন , যেমন ট্রিসেট


10
অগত্যা নয়; সেটের সদৃশ মান থাকতে পারে না। এটি ওপি'র প্রয়োজনীয়তার উপর নির্ভর করে।
জাচ ল্যাংলি 13

12

কয়েকটি অপশন আছে। আমি ট্রিসেটের পরামর্শ দিচ্ছি যদি আপনি সদৃশ না চান এবং যে জিনিসগুলি আপনি সন্নিবেশ করিয়েছেন তা তুলনামূলক হয়।

এটি করার জন্য আপনি সংগ্রহ শ্রেণীর স্থিত পদ্ধতিগুলিও ব্যবহার করতে পারেন।

আরও তথ্যের জন্য সংগ্রহ # সাজানোর (java.util.List) এবং ট্রিসেট দেখুন।


10

আপনি যদি কেবল একটি তালিকা বাছাই করতে চান তবে যে কোনও ধরণের তালিকা ব্যবহার করুন এবং সংগ্রহ.সোর্ট () ব্যবহার করুন । আপনি তালিকার মধ্যে নিশ্চিত উপাদান অনন্য এবং সবসময় সাজানো হয় করতে চাই, তাহলে একটি ব্যবহার SortedSet


5

আমি যা করেছি তা হ'ল তালিকাটি বাস্তবায়িত করা হ'ল সমস্ত পদ্ধতি নির্ধারণের সাথে অভ্যন্তরীণ উদাহরণ রয়েছে।

 public class ContactList implements List<Contact>, Serializable {
    private static final long serialVersionUID = -1862666454644475565L;
    private final List<Contact> list;

public ContactList() {
    super();
    this.list = new ArrayList<Contact>();
}

public ContactList(List<Contact> list) {
    super();
    //copy and order list
    List<Contact>aux= new ArrayList(list);
    Collections.sort(aux);

    this.list = aux;
}

public void clear() {
    list.clear();
}

public boolean contains(Object object) {
    return list.contains(object);
}

এর পরে, আমি একটি নতুন পদ্ধতি "পুটআর্ডার্ড" প্রয়োগ করেছি যা উপাদান উপস্থিত না থাকলে সঠিক অবস্থানে সন্নিবেশ করে বা কেবল এটি উপস্থিত থাকলে প্রতিস্থাপন করে।

public void putOrdered(Contact contact) {
    int index=Collections.binarySearch(this.list,contact);
    if(index<0){
        index= -(index+1);
        list.add(index, contact);
    }else{
        list.set(index, contact);
    }
}

আপনি যদি পুনরাবৃত্ত উপাদানগুলিকে মঞ্জুরি দিতে চান তবে পরিবর্তে (বা উভয়) অ্যাডঅর্ডার্ড প্রয়োগ করুন।

public void addOrdered(Contact contact) {
    int index=Collections.binarySearch(this.list,contact);
    if(index<0){
        index= -(index+1);
    }
    list.add(index, contact);
}

আপনি যদি সন্নিবেশগুলি এড়াতে চান তবে আপনি "অ্যাড" এবং "সেট" পদ্ধতিতে অপ্রয়োজনীয় অপারেশনটিও ছুঁড়ে ফেলতে এবং অপসারণ করতে পারেন।

public boolean add(Contact object) {
    throw new UnsupportedOperationException("Use putOrdered instead");
}

... এবং এছাড়াও আপনাকে তালিকাভুক্তকারী পদ্ধতিগুলির সাথে যত্নবান হতে হবে কারণ তারা আপনার অভ্যন্তরীণ তালিকাকে সংশোধন করতে পারে। এই ক্ষেত্রে আপনি অভ্যন্তরীণ তালিকার একটি অনুলিপি ফিরিয়ে দিতে বা আবার একটি ব্যতিক্রম ছুঁড়ে ফেলতে পারেন।

public ListIterator<Contact> listIterator() {
    return (new ArrayList<Contact>(list)).listIterator();
}

সমস্যাটি হ'ল এটি Listচুক্তি লঙ্ঘন করে । শুধুমাত্র এটি প্রয়োগ করা ভাল হবে Collection। এবং যদি ContactListবাছাই করা হয় তবে আরও কার্যকর হওয়ার সাথে সাথে contains()ব্যবহার করে প্রয়োগ করা যেতে পারে can binarySearch
Marcono1234

5

আপনার পছন্দ অনুসারে বাছাই করা তালিকা কার্যকর করার সর্বাধিক দক্ষ উপায় হ'ল এখানে হিসাবে ইনডেক্সযোগ্য স্কিপলিস্ট প্রয়োগ করা: উইকিপিডিয়া: ইনডেক্সেবল স্কিপলিস্ট । এটি ও (লগ (এন)) এ সন্নিবেশ / অপসারণের অনুমতি দেবে এবং একই সাথে সূচিকৃত অ্যাক্সেসের অনুমতি দেবে। এবং এটি সদৃশও অনুমতি দেয়।

স্কিপলিস্ট একটি আকর্ষণীয় এবং আমি বলব, আন্ডাররেটেড ডেটা স্ট্রাকচার। দুর্ভাগ্যক্রমে জাভা বেস লাইব্রেরিতে কোনও সূচিবদ্ধ স্কিপলিস্ট বাস্তবায়ন নেই তবে আপনি ওপেন সোর্স বাস্তবায়নগুলির একটি ব্যবহার করতে পারেন বা এটি নিজেই প্রয়োগ করতে পারেন। মত নিয়মিত Skiplist বাস্তবায়নের হয় ConcurrentSkipListSet এবং ConcurrentSkipListMap


4

ট্রিসেট কাজ করবে না কারণ তারা সদৃশদের অনুমতি দেয় না এবং তারা নির্দিষ্ট অবস্থানে উপাদান আনতে পদ্ধতি সরবরাহ করে না। অগ্রাধিকারের কিউ কাজ করবে না কারণ এটি নির্দিষ্ট অবস্থানে থাকা উপাদানগুলি আনতে দেয় না যা তালিকার একটি প্রাথমিক প্রয়োজন। আমি মনে করি আপনার জাভির ওপ (লগন) সন্নিবেশের সময় সহ জাভাতে বাছাই করা তালিকা বজায় রাখতে আপনার নিজের অ্যালগরিদমটি প্রয়োগ করা দরকার, যদি না আপনি ডুপ্লিকেটগুলির প্রয়োজন না হন। কোনও সমাধানটি একটি ট্রিআম্যাপ ব্যবহার করতে পারে যেখানে কীটি সমান পদ্ধতিটিকে ওভাররাইড করে আইটেমটির একটি সাবক্লাস হয় যাতে নকলকে অনুমতি দেওয়া হয়।


4

ল্যাম্বদাজে ব্যবহার করা হচ্ছে

আপনি যদি জাভা 8 এর পূর্ববর্তী সংস্করণ ব্যবহার করেন তবে ল্যাম্বডজে দিয়ে এই কাজগুলি সমাধান করার চেষ্টা করতে পারেন আপনি এখানে এটি খুঁজে পেতে পারেন: http://code.google.com/p/lambdaj/

এখানে আপনার একটি উদাহরণ রয়েছে:

সাজান Iterative

List<Person> sortedByAgePersons = new ArrayList<Person>(persons);
Collections.sort(sortedByAgePersons, new Comparator<Person>() {
        public int compare(Person p1, Person p2) {
           return Integer.valueOf(p1.getAge()).compareTo(p2.getAge());
        }
}); 

ল্যাম্বদাজে দিয়ে বাছাই করুন

List<Person> sortedByAgePersons = sort(persons, on(Person.class).getAge()); 

অবশ্যই, পারফরম্যান্সে এই ধরণের সৌন্দর্যের প্রভাব রয়েছে (গড়ে ২ বার), তবে আপনি আরও পাঠযোগ্য কোড খুঁজে পেতে পারেন?

ল্যাবদা এক্সপ্রেশন ব্যবহার করে জাভা 8 দিয়ে বাছাই করুন

Collections.sort(persons, (p1, p2) -> p1.getAge().compareTo(p2.getAge()));
//or
persons.sort((p1, p2) -> p1.getAge().compareTo(p2.getAge()));

জাভা 8 ল্যাম্বদা এক্সপ্রেশন সহ আপনার শেষ উদাহরণে, কীভাবে বিপরীত বাছাই করা যায়?
রজত শাহ

1
@ রাজতশাহ আমি অনুমান করি যে আপনি ঠিক করতে পারবেন-(p1.getAge().compareTo(p2.getAge()))
ফেদেরিকো পিয়াজা

@ রাজতশাহ সাহায্য করতে পেরে খুশি
ফেদেরিকো পিয়াজা

2

অগ্রাধিকারের কিউয়ের সমস্যাটি হ'ল এটিকে একটি সাধারণ অ্যারে দ্বারা ব্যাক আপ করা হয়, এবং যুক্তিগুলি যে ক্রমে উপাদানগুলি পায় তা "কাতারে [2 * এন + 1] এবং কাতারে [2 * (এন + 1)]" আইটকি দ্বারা সম্পন্ন হয়। আপনি যদি কেবল মাথা থেকে টানেন তবে এটি দুর্দান্ত কাজ করে তবে আপনি যদি কোনও সময়ে .toArray এ কল করার চেষ্টা করছেন তবে এটিকে অকেজো করে তোলে।

আমি com.google.common.collect.TreeM Multimamap ব্যবহার করে এই সমস্যাটি ঘুরে দেখি, তবে আমি মানগুলির জন্য একটি কাস্টম তুলক সরবরাহ করি, একটি আদেশে মোড়ানো, যা কখনই 0 দেয় না।

প্রাক্তন। ডাবল জন্য:

private static final Ordering<Double> NoEqualOrder = Ordering.from(new Comparator<Double>() {

    @Override
    public int compare(Double d1, Double d2)
    {
        if (d1 < d2) {
            return -1;
        }
        else {
            return 1;
        }
    }
});

আমি .toArray () এ কল করার সময় এই মানগুলি যথাযথভাবে পেয়েছি এবং এতে সদৃশও রয়েছে।


1

আপনি যা চান তা বাইনারি অনুসন্ধানের গাছ। অনুসন্ধান, অপসারণ এবং সন্নিবেশগুলির জন্য লগারিদমিক অ্যাক্সেসের প্রস্তাব দেওয়ার সময় এটি বাছাই করা ক্রম বজায় রাখে (যদি না আপনার অবনমিত গাছ থাকে - তবে এটি লিনিয়ার)। এটি বাস্তবায়ন করা বেশ সহজ এবং আপনি এমনকি এটি তালিকা ইন্টারফেস প্রয়োগ করতে পারেন তবে সূচী-অ্যাক্সেস জটিল হয়ে যায়।

দ্বিতীয় পদ্ধতির একটি অ্যারেলিস্ট এবং তারপরে একটি বুদ্বুদ সাজানোর বাস্তবায়ন implementation আপনি একবারে একটি উপাদান সন্নিবেশ করানো বা অপসারণ করার কারণে, সন্নিবেশ এবং অপসারণের অ্যাক্সেসের সময়গুলি লিনিয়ার। অনুসন্ধানগুলি লোগারিথমিক এবং সূচক অ্যাক্সেস ধ্রুবক (লিঙ্কডলিস্টের জন্য সময়গুলি বিভিন্ন হতে পারে)। আপনার কেবলমাত্র কোডটি 5 টি, সম্ভবত বুদ্বুদ সাজানোর 6 লাইন।


1

আপনি অ্যারেলিস্ট এবং ট্রিম্যাপ ব্যবহার করতে পারেন, যেমন আপনি বলেছিলেন যে আপনি পুনরাবৃত্তি মানগুলি চান তবে আপনি ট্রিসেট ব্যবহার করতে পারবেন না, যদিও এটি পাশাপাশি বাছাই করা হয়েছে তবে আপনাকে তুলনাকারী নির্ধারণ করতে হবে।


1

সেটের জন্য আপনি ট্রিসেট ব্যবহার করতে পারেন। ট্রিসেট প্রাকৃতিক অর্ডারিং বা কোনও নির্দিষ্ট বাছাইয়ের আদেশের ভিত্তিতে উপাদানটিকে আদেশ করে যে নির্দিষ্ট বস্তুর তুলনায় তুলনামূলকভাবে পাস হয়েছে। মানচিত্রের জন্য ট্রিম্যাপ ব্যবহার করুন। TreeMap কী বাছাই উপর কী সরবরাহ করে। ট্রিম্যাপে কী হিসাবে কোনও বস্তু যুক্ত করার জন্য শ্রেণীর তুলনামূলক ইন্টারফেস প্রয়োগ করা উচিত যা পরিবর্তনের আদেশের সংজ্ঞা সংযুক্ত () পদ্ধতির সাথে তুলনামূলক প্রয়োগ করতে বাধ্য করে। http://techmastertutorial.in/java-collection-impl.html


0

নীচে হিসাবে তালিকাটি সাজানোর জন্য বাছাই () পদ্ধতিটি ব্যবহার করুন:

List list = new ArrayList();

//add elements to the list

Comparator comparator = new SomeComparator();

Collections.sort(list, comparator);

রেফারেন্সের জন্য লিঙ্কটি দেখুন: http://tutorials.jenkov.com/java-collections/sorting.html


0

TreeSetসাজান ক্রমে উপাদান দেয় যা ব্যবহার করুন । বা এর Collection.sort()সাথে বাহ্যিক বাছাইয়ের জন্য ব্যবহার করুন Comparator()


ট্রিসেট উপাদানগুলির নকলকরণের অনুমতি দেয় না। কখনও কখনও এটি একটি পছন্দসই বৈশিষ্ট্য, অন্যরা না। ওপি সেটগুলি চেষ্টা করে বিবেচনা করে, অনুমান করি
-মার্কিন-স্থানীয়-ΕΨΗΕΛΩΝ

এর অর্থ হবেন না, ট্রিম্যাপটিও খুব ইশারা করুন
হাকন ল্যাটভিট


0

জাভা 8 কম্পেটারের সাথে যদি আমরা তালিকাটি বাছাই করতে চাই তবে এখানে বিশ্বের 10 জনবহুল শহর রয়েছে এবং আমরা এটি নাম অনুসারে বাছাই করতে চাই, সময় অনুসারে। ওসাকা, জাপান ... মেক্সিকো সিটি, মেক্সিকো. ... বেইজিং, চীন. ... সাও পাওলো, ব্রাজিল. ... মুম্বই, ভারত। ... সাংহাই, চীন. ... দিল্লি, ভারত। ... টোকিও, জাপান.

 import java.util.Arrays;
 import java.util.Comparator;
 import java.util.List;

public class SortCityList {

    /*
     * Here are the 10 most populated cities in the world and we want to sort it by
     * name, as reported by Time. Osaka, Japan. ... Mexico City, Mexico. ...
     * Beijing, China. ... São Paulo, Brazil. ... Mumbai, India. ... Shanghai,
     * China. ... Delhi, India. ... Tokyo, Japan.
     */
    public static void main(String[] args) {
        List<String> cities = Arrays.asList("Osaka", "Mexico City", "São Paulo", "Mumbai", "Shanghai", "Delhi",
                "Tokyo");
        System.out.println("Before Sorting List is:-");
        System.out.println(cities);
        System.out.println("--------------------------------");

        System.out.println("After Use of List sort(String.CASE_INSENSITIVE_ORDER) & Sorting List is:-");
        cities.sort(String.CASE_INSENSITIVE_ORDER);
        System.out.println(cities);
        System.out.println("--------------------------------");
        System.out.println("After Use of List sort(Comparator.naturalOrder()) & Sorting List is:-");
        cities.sort(Comparator.naturalOrder());
        System.out.println(cities);

    }

}

0

ব্যবহারকারীর সংজ্ঞায়িত মানদণ্ড অনুসারে একটি অ্যারেলিস্ট বাছাই করা।

মডেল ক্লাস

 class Student 
 { 
     int rollno; 
     String name, address; 

     public Student(int rollno, String name, String address) 
     { 
         this.rollno = rollno; 
         this.name = name; 
         this.address = address; 
     }   

     public String toString() 
     { 
         return this.rollno + " " + this.name + " " + this.address; 
     } 
 } 

বাছাই ক্লাস

 class Sortbyroll implements Comparator<Student> 
 {         
     public int compare(Student a, Student b) 
     { 
         return a.rollno - b.rollno; 
     } 
 } 

মেইন ক্লাস

 class Main 
 { 
     public static void main (String[] args) 
     { 
         ArrayList<Student> ar = new ArrayList<Student>(); 
         ar.add(new Student(111, "bbbb", "london")); 
         ar.add(new Student(131, "aaaa", "nyc")); 
         ar.add(new Student(121, "cccc", "jaipur")); 

         System.out.println("Unsorted"); 
         for (int i=0; i<ar.size(); i++) 
             System.out.println(ar.get(i)); 

         Collections.sort(ar, new Sortbyroll()); 

         System.out.println("\nSorted by rollno"); 
         for (int i=0; i<ar.size(); i++) 
             System.out.println(ar.get(i)); 
     } 
 } 

আউটপুট

 Unsorted
 111 bbbb london
 131 aaaa nyc
 121 cccc jaipur

 Sorted by rollno
 111 bbbb london
 121 cccc jaipur
 131 aaaa nyc
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.