আমি আসলে 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
এবং আরও আকারে আক্রমণাত্মকভাবে বৃদ্ধি পায়, প্রতিটি আকারে দ্বিগুণ। 1000000
C # এর ব্যবহারের জন্য উপরে থেকে উদাহরণস্বরূপ যোগ করা 3097084
অপারেশন।
তথ্যসূত্র