সুতরাং মূলত, আমার এই কোডটি ছিল:
import java.util.*;
public class sandbox {
public static void main(String[] args) {
HashSet<Integer> hashSet = new HashSet<>();
for (int i = 0; i < 100_000; i++) {
hashSet.add(i);
}
long start = System.currentTimeMillis();
for (int i = 0; i < 100_000; i++) {
for (Integer val : hashSet) {
if (val != -1) break;
}
hashSet.remove(i);
}
System.out.println("time: " + (System.currentTimeMillis() - start));
}
}
আমার কম্পিউটারে লুপের জন্য নেস্টেড চালাতে প্রায় 4s সময় লাগে এবং কেন এত দিন লাগল তা আমি বুঝতে পারি না। বাহ্যিক লুপটি ১,০০,০০০ বার চলবে, লুপের অভ্যন্তরীণটি 1 বার চলবে (কারণ হ্যাশসেটের কোনও মান কখনই -1 হবে না) এবং হ্যাশসেট থেকে কোনও আইটেম সরানো ও (1) হয়, সুতরাং প্রায় 200,000 ক্রিয়াকলাপ হওয়া উচিত। যদি এক সেকেন্ডে সাধারণত 100,000,000 অপারেশন হয় তবে আমার কোডটি চালাতে 4s কীভাবে আসবে?
অতিরিক্তভাবে, যদি লাইনটি hashSet.remove(i);
মন্তব্য করা হয়, কোডটি কেবল 16 মিমি নেয়। লুপের জন্য অভ্যন্তরটি যদি মন্তব্য করা হয় (তবে তা নয় hashSet.remove(i);
), কোডটি কেবলমাত্র 8 এসএম লাগে।
for val
লুপটি সময় গ্রহণ করার জিনিস। remove
এখনও খুব দ্রুত। সেটটি সংশোধন করার পরে কোনও ধরণের ওভারহেড নতুন আইট্রেটর স্থাপন করছে ...?
for val
লুপ ধীর। তবে লক্ষ করুন যে লুপটি মোটেই প্রয়োজন হয় না। আপনি যদি সেটটিতে -1 থেকে কোনও মান আলাদা আছে কিনা তা পরীক্ষা করতে চান তবে এটি পরীক্ষা করা আরও কার্যকর হবে hashSet.size() > 1 || !hashSet.contains(-1)
।