প্রাক জাভা 8 আপনার ব্যবহার করা উচিত:
tourists.removeAll(Collections.singleton(null));
জাভা-পরবর্তী 8 ব্যবহার:
tourists.removeIf(Objects::isNull);
এখানে কারণ সময় জটিলতা। অ্যারেগুলির সাথে সমস্যাটি হ'ল একটি অপসারণ অপারেশন সম্পূর্ণ করতে O (n) সময় নিতে পারে। সত্যিই জাভাতে এটি খালি জায়গা প্রতিস্থাপনের জন্য সরানো হচ্ছে এমন উপাদানগুলির একটি অ্যারে অনুলিপি। এখানে দেওয়া আরও অনেকগুলি সমাধান এই সমস্যাটিকে ট্রিগার করবে। পূর্বেরটি টেকনিক্যালি ও (এন * মি) যেখানে মিটার 1 কারণ এটি সিঙ্গলটন নাল: তাই ও (এন)
আপনার সিঙ্গলটনের সমস্তটি অপসারণ করা উচিত, অভ্যন্তরীণভাবে এটি একটি ব্যাচআরমোভ () করে যা একটি পড়ার অবস্থান এবং লেখার অবস্থান রাখে। এবং তালিকা পুনরাবৃত্তি। যখন এটি একটি নালকে আঘাত করে, এটি কেবল 1 দ্বারা পঠনের অবস্থানকে পুনরাবৃত্তি করে they যখন তারা একই হয় এটি পাস হয়, যখন তারা আলাদা হয় তখন মানগুলি অনুলিপি করার সাথে সাথে চলতে থাকে। তারপরে শেষে এটি আকারে ছাঁটাই হয়।
এটি কার্যকরভাবে অভ্যন্তরীণভাবে এটি করে:
public static <E> void removeNulls(ArrayList<E> list) {
int size = list.size();
int read = 0;
int write = 0;
for (; read < size; read++) {
E element = list.get(read);
if (element == null) continue;
if (read != write) list.set(write, element);
write++;
}
if (write != size) {
list.subList(write, size).clear();
}
}
যা আপনি স্পষ্টভাবে দেখতে পাচ্ছেন এটি একটি ও (এন) অপারেশন।
আপনি যদি উভয় প্রান্ত থেকে তালিকাটি পুনরাবৃত্তি করেন তবে কেবলমাত্র দ্রুততর হতে পারে এবং আপনি যদি একটি শূন্য দেখতে পান তবে আপনি এর মানটি শেষে পাওয়া মানের সমানতে সেট করে, এবং সেই মানটি হ্রাস পেয়েছিলেন। দুটি মানের মিল না হওয়া পর্যন্ত এবং পুনরাবৃত্তি হয়েছিল। আপনি অর্ডার জগাখিচুড়ি করতে চাইবেন, তবে আপনি একা রেখে যাওয়া বনাম নির্ধারণ করা মানগুলির সংখ্যা হ্রাস করবে। যা জানার জন্য একটি ভাল পদ্ধতি তবে .set () মূলত নিখরচায় এহেতু এখানে খুব বেশি সহায়তা করবে না তবে মুছে ফেলার সেই ফর্মটি আপনার বেল্টের জন্য একটি দরকারী সরঞ্জাম।
for (Iterator<Tourist> itr = tourists.iterator(); itr.hasNext();) {
if (itr.next() == null) { itr.remove(); }
}
যদিও এটি যথেষ্ট যুক্তিসঙ্গত বলে মনে হচ্ছে, পুনরাবৃত্তির উপর .remove () অভ্যন্তরীণভাবে কল করে:
ArrayList.this.remove(lastRet);
যা আবার অপসারণের মধ্যে ও (এন) অপারেশন। এটি একটি System.arraycopy () করে যা আপনি যা চান তা আবার নয়, যদি আপনি গতি সম্পর্কে চিন্তা করেন। এটি এটিকে n ^ 2 করে তোলে।
এছাড়াও আছে:
while(tourists.remove(null));
যা ও (এম * এন ^ 2)। এখানে আমরা কেবল তালিকাটি পুনরাবৃত্তি করি না। আমরা পুরো তালিকাটির পুনরাবৃত্তি করি, প্রতিবার আমরা শূন্যের সাথে মেলে। তারপরে আমরা অপসারণটি সম্পাদন করতে System.arraycopy () করতে n / 2 (গড়) অপারেশন করি। আপনি বেশ আক্ষরিকভাবে, মানগুলি এবং শূন্য মানগুলির সাথে আইটেমগুলির মধ্যে পুরো সংগ্রহটি বাছাই করতে পারেন এবং কম সময়ে শেষটি ছাঁটাই করতে পারেন। আসলে, এটি সমস্ত ভাঙ্গাগুলির জন্য সত্য। কমপক্ষে তত্ত্বের ক্ষেত্রে, আসল system.arraycopy আসলে অনুশীলনে একটি এন অপারেশন নয়। তত্ত্বের ক্ষেত্রে তত্ত্ব এবং অনুশীলন একই জিনিস; অনুশীলনে তারা হয় না।
Iterator
? জাভা-ডক খনন করুন। download.oracle.com/javase/6/docs/api/java/util/…