যদিও অ্যারেলিস্ট ব্যবহারের প্রস্তাব দেওয়ার উত্তরগুলি বেশিরভাগ দৃশ্যে উপলব্ধি করে, আপেক্ষিক পারফরম্যান্সের আসল প্রশ্নের সত্যই উত্তর দেওয়া যায় নি।
অ্যারে দিয়ে আপনি করতে পারেন এমন কয়েকটি জিনিস রয়েছে:
- এটি তৈরি করুন
- একটি আইটেম সেট করুন
- একটি আইটেম পেতে
- এটি ক্লোন / অনুলিপি করুন
সাধারণ উপসংহার
যদিও গেট অ্যান্ড সেট অপারেশনগুলি অ্যারেলিস্টে সামান্য ধীরে ধীরে (আমার মেশিনে কল প্রতি 1 এবং 3 ন্যানোসেকেন্ড), কোনও অ-নিবিড় ব্যবহারের জন্য অ্যারেলিস্ট বনাম একটি অ্যারে ব্যবহার করার খুব কম ওভারহেড রয়েছে। কিছু বিষয় মনে রাখা উচিত:
- একটি তালিকার পুনরায় আকার দেওয়ার ক্রিয়াকলাপগুলি (কল করার সময়
list.add(...)
) ব্যয়বহুল এবং যখন সম্ভব হয় পর্যাপ্ত পর্যায়ে প্রাথমিক ক্ষমতা সেট করার চেষ্টা করা উচিত (দ্রষ্টব্য যে অ্যারে ব্যবহারের সময় একই সমস্যা দেখা দেয়)
- আদিমদের সাথে কাজ করার সময় অ্যারেগুলি উল্লেখযোগ্যভাবে দ্রুততর হতে পারে কারণ তারা কাউকে অনেকগুলি বক্সিং / আনবক্সিং রূপান্তর এড়াতে দেয় will
- একটি অ্যাপ্লিকেশন যা কেবলমাত্র অ্যারেলিস্টে মানগুলি সেট / সেট করে (খুব সাধারণ নয়!) একটি অ্যারেতে স্যুইচ করে 25%-রও বেশি পারফরম্যান্স লাভ দেখতে পারে
বিস্তারিত ফলাফল
মানক x86 ডেস্কটপ মেশিনে জেডিকে 7 সহ জেএমএইচ বেঞ্চমার্কিং লাইব্রেরি (ন্যানোসেকেন্ডে সময়) ব্যবহার করে সেই তিনটি অপারেশনের জন্য আমি ফলাফলগুলি পরিমাপ করেছি । নোট করুন যে ফলাফলগুলি তুলনামূলক হয় তা নিশ্চিত করার জন্য অ্যারেলিস্টকে কখনই পরীক্ষায় পুনরায় আকার দেওয়া হয় না। বেঞ্চমার্ক কোড এখানে উপলব্ধ ।
অ্যারে / অ্যারেলিস্ট ক্রিয়েশন
নিম্নলিখিত বিবৃতিগুলি কার্যকর করে আমি 4 টি পরীক্ষা চালিয়েছি:
- createArray1:
Integer[] array = new Integer[1];
- createList1:
List<Integer> list = new ArrayList<> (1);
- createArray10000:
Integer[] array = new Integer[10000];
- createList10000:
List<Integer> list = new ArrayList<> (10000);
ফলাফল (কল প্রতি ন্যানোসেকেন্ডে, 95% আত্মবিশ্বাস):
a.p.g.a.ArrayVsList.CreateArray1 [10.933, 11.097]
a.p.g.a.ArrayVsList.CreateList1 [10.799, 11.046]
a.p.g.a.ArrayVsList.CreateArray10000 [394.899, 404.034]
a.p.g.a.ArrayVsList.CreateList10000 [396.706, 401.266]
উপসংহার: কোন লক্ষণীয় পার্থক্য ।
অপারেশন পেতে
আমি নিম্নলিখিত পরীক্ষাগুলি সম্পাদন করে 2 টি পরীক্ষা চালিয়েছি:
- getList:
return list.get(0);
- getArray:
return array[0];
ফলাফল (কল প্রতি ন্যানোসেকেন্ডে, 95% আত্মবিশ্বাস):
a.p.g.a.ArrayVsList.getArray [2.958, 2.984]
a.p.g.a.ArrayVsList.getList [3.841, 3.874]
উপসংহার: একটি অ্যারে থেকে পাওয়া একটি অ্যারেলিস্ট থেকে পাওয়ার চেয়ে প্রায় 25% দ্রুত , যদিও পার্থক্যটি কেবল একটি ন্যানোসেকেন্ডের ক্রম অনুসারে।
অপারেশন সেট করুন
আমি নিম্নলিখিত পরীক্ষাগুলি সম্পাদন করে 2 টি পরীক্ষা চালিয়েছি:
- setlist:
list.set(0, value);
- setArray:
array[0] = value;
ফলাফল (প্রতি কল প্রতি ন্যানোসেকেন্ডে):
a.p.g.a.ArrayVsList.setArray [4.201, 4.236]
a.p.g.a.ArrayVsList.setList [6.783, 6.877]
উপসংহার: অ্যারেগুলিতে সেট অপারেশন তালিকাগুলির তুলনায় প্রায় 40% দ্রুত , তবে প্রাপ্ত হিসাবে প্রতিটি সেট অপারেশন কয়েক ন্যানো সেকেন্ড নেয় - সুতরাং পার্থক্যটি 1 সেকেন্ডে পৌঁছানোর জন্য, তালিকায় / অ্যারে শত শত আইটেম সেট করতে হবে কয়েক মিলিয়ন বার!
ক্লোন / কপি
অ্যারেলিস্টের অনুলিপি নির্মাণকারীর প্রতিনিধিত্ব করা Arrays.copyOf
যাতে পারফরম্যান্সে অ্যারে অনুলিপি (একটি অ্যারের মাধ্যমে অনুলিপি করা clone
, Arrays.copyOf
বা System.arrayCopy
কোনও উপাদান পার্থক্য কর্মক্ষমতা অনুযায়ী তৈরি করে না ) হিসাবে সমান ।