আমি আসলে 2 মাস আগে এই বিষয়ে একটি ব্লগ পোস্ট লিখেছিলাম । নিবন্ধটি সি # এর জন্য List<T>তবে জাভাটির ArrayListখুব একই রকম বাস্তবায়ন রয়েছে। যেহেতু ArrayListএকটি গতিশীল অ্যারে ব্যবহার করে প্রয়োগ করা হয়, তাই এটি চাহিদা অনুযায়ী আকারে বৃদ্ধি পায়। সুতরাং সক্ষমতা নির্মাতার কারণটি অপ্টিমাইজেশনের উদ্দেশ্যে।
যখন এই আকারগুলির পুনরায় ক্রিয়াকলাপগুলির মধ্যে একটি ঘটে তখন অ্যারেলিস্ট অ্যারের সামগ্রীগুলি একটি নতুন অ্যারেতে অনুলিপি করে যা পুরানোটির ক্ষমতার দ্বিগুণ। এই অপারেশনটি ও (এন) সময়ে চলে।
উদাহরণ
ArrayListআকারটি কীভাবে বাড়বে তার একটি উদাহরণ এখানে দেওয়া হয়েছে :
10
16
25
38
58
... 17 resizes ...
198578
297868
446803
670205
1005308
সুতরাং তালিকার ক্ষমতা দিয়ে শুরু হয় 10, যখন 11 তম আইটেমটি যোগ করা হয় এটি দ্বারা বৃদ্ধি 50% + 1করতে 16। 17 তম আইটেমটিতে ArrayListআবার আবার বাড়ানো হয় 25। এখন উদাহরণটি বিবেচনা করুন যেখানে আমরা একটি তালিকা তৈরি করছি যেখানে পছন্দসই ক্ষমতা ইতিমধ্যে হিসাবে পরিচিত 1000000। ArrayListআকার বিন্যাস ছাড়াই তৈরি করা ArrayList.add 1000000সময়গুলিতে কল করবে যা সাধারণত ও (1) বা পুনরায় আকারে ও (এন) লাগে ।
1000000 + 16 + 25 + ... + 670205 + 1005308 = 4015851 অপারেশন
কনস্ট্রাক্টর ব্যবহার করে এটির তুলনা করুন এবং তারপরে কল করুন ArrayList.addযা হে (1) এ চালানোর গ্যারান্টিযুক্ত ।
1000000 + 1000000 = 2000000 অপারেশন
জাভা বনাম সি #
জাভা উপরের মত, 10প্রতিটি পুনরায় আকারে শুরু এবং বাড়ানো 50% + 1। সি # শুরু হয় 4এবং আরও আকারে আক্রমণাত্মকভাবে বৃদ্ধি পায়, প্রতিটি আকারে দ্বিগুণ। 1000000C # এর ব্যবহারের জন্য উপরে থেকে উদাহরণস্বরূপ যোগ করা 3097084অপারেশন।
তথ্যসূত্র