অ্যারেলিস্ট এবং ভেক্টরের মধ্যে পার্থক্য কী?


352

অ্যারেলিস্ট এবং ভেক্টর দুটি ডেটা স্ট্রাকচারের মধ্যে পার্থক্য কী এবং আপনি সেগুলির প্রতিটি কোথায় ব্যবহার করবেন?


5
আমি এখানে সঠিক সদৃশটি দেখছি না।
জেফ আতউড

2
ঠিক আছে, আপনি Vector v = new Vector(3, 2);
জাভাতেও

কখনও ব্যবহার Vector, ব্যবহার ArrayListবা LinkedListবাArrayDeque

উত্তর:


365

পার্থক্য

  • ভেক্টরগুলি সিঙ্ক্রোনাইজ করা হয়, অ্যারেলিস্টগুলি নেই।
  • ডেটা বৃদ্ধি পদ্ধতি

ভেক্টরগুলি ব্যবহারের জন্য নির্দিষ্ট কোনও প্রয়োজনীয়তা না থাকলে অ্যারেলিস্টগুলি ব্যবহার করুন।

সিংক্রোনাইজ

যদি একাধিক থ্রেড একই সাথে একটি অ্যারেলিস্টে অ্যাক্সেস করে তবে আমাদের অবশ্যই কোডের ব্লকটিকে বাহ্যিকভাবে সিঙ্ক্রোনাইজ করতে হবে যা তালিকাটিকে কাঠামোগতভাবে পরিবর্তন করে বা কেবল কোনও উপাদানকে সংশোধন করে। কাঠামোগত পরিবর্তন মানে তালিকা থেকে উপাদান (গুলি) যোগ করা বা মোছা। বিদ্যমান উপাদানের মান নির্ধারণ কোনও কাঠামোগত পরিবর্তন নয়।

Collections.synchronizedList সাধারণত তালিকা তৈরির সময় তালিকায় কোনও দুর্ঘটনাক্রমে অযৌক্তিক অ্যাক্সেস এড়ানোর জন্য ব্যবহৃত হয়।

উল্লেখ

ডেটা বৃদ্ধি

অভ্যন্তরীণভাবে, অ্যারেলিস্ট এবং ভেক্টর উভয়ই একটি অ্যারে ব্যবহার করে তাদের বিষয়বস্তু ধরে রাখে। যখন কোনও উপাদান একটি অ্যারেলিস্ট বা ভেক্টরের মধ্যে .োকানো হয় তখন ঘরটি বাইরে চলে গেলে অবজেক্টটির অভ্যন্তরীণ অ্যারেটি প্রসারিত করতে হবে। একজন ভেক্টর তার অ্যারের আকার দ্বিগুণ করতে ডিফল্ট, যখন অ্যারেলিস্ট তার অ্যারের আকার 50 শতাংশ বৃদ্ধি করে।

উল্লেখ


7
@Rei তিনি ঠিক কি বলল, একাধিক থ্রেড ( docs.oracle.com/javase/tutorial/essential/concurrency/... )
RecursiveExceptionException

মাল্টিথ্রেডেড পদ্ধতিতে অ্যারেলিস্ট থেকে পড়া সম্পর্কে কী? এটা কি সুতো নিরাপদ?
জুনি

@ সুনি অ্যারেলিস্ট বা অন্যান্য সংগ্রহের ক্লাস থেকে পড়া কখনই সমস্যা হয় না। আপনি যখন অ্যারেলিস্ট বা সংগ্রহে বিদ্যমান মানগুলি যুক্ত বা সরিয়ে বা সংশোধন করছেন তখন সমস্যা দেখা দেয়।
সাইনাথ রেড্ডি

85

ডকুমেন্টেশন যেমন বলে, a Vectorএবং an ArrayListপ্রায় সমতুল্য। পার্থক্যটি হ'ল Vectorএকটিতে অ্যাক্সেস সিঙ্ক্রোনাইজ করা হয়, যেখানে একটিতে অ্যাক্সেস ArrayListহয় না। এর অর্থ হ'ল Vectorএকবারে কেবলমাত্র একটি থ্রেড পদ্ধতিতে কল করতে পারে এবং লকটি অর্জনের ক্ষেত্রে সামান্য ওভারহেড থাকে; আপনি যদি এটি ব্যবহার করেন তবে ArrayListএটি কেস নয়। সাধারণত, আপনি একটি ব্যবহার করতে চাইবেন ArrayList; একক থ্রেডযুক্ত ক্ষেত্রে এটি আরও ভাল পছন্দ, এবং বহু-থ্রেড ক্ষেত্রে আপনি লকিংয়ের উপর আরও ভাল নিয়ন্ত্রণ পেতে পারেন। সমবর্তী পাঠের অনুমতি দিতে চান? ফাইন। দশটি ব্যাচের ব্যাচের জন্য একটি সিঙ্ক্রোনাইজেশন সম্পাদন করতে চান? ঠিক আছে। এটি আপনার শেষ দিকে আরও একটু যত্ন প্রয়োজন, তবে সম্ভবত আপনি যা চান তা সম্ভবত। এছাড়াও মনে রাখবেন যে আপনার যদি অ্যারেলিস্ট থাকে তবে আপনি এটিটি ব্যবহার করতে পারেনCollections.synchronizedListএকটি সিঙ্ক্রোনাইজড তালিকা তৈরি করতে ফাংশন, এভাবে আপনাকে একটি এর সমতুল্য করে Vector


53

Vectorএটি একটি ভাঙা শ্রেণি যা থ্রেডসেফ নয় , যদিও এটি "সিঙ্ক্রোনাইজড" হওয়া সত্ত্বেও এটি কেবলমাত্র শিক্ষার্থী এবং অন্যান্য অনভিজ্ঞ প্রোগ্রামার দ্বারা ব্যবহৃত হয়।

ArrayList পেশাদার এবং অভিজ্ঞ প্রোগ্রামারদের দ্বারা ব্যবহৃত গো-টু তালিকা বাস্তবায়ন।

থ্রেডসেফের তালিকা বাস্তবায়ন চায় এমন পেশাদাররা ক CopyOnWriteArrayList


10
সিঙ্ক্রোনাইজড কিন্তু থ্রেডসেফ নয়? এর মানে কী? [আমি শিক্ষানবিশ]
দীনেশকুমার

13
@ দিনেশকুমার থ্রেডসেফ Vectorহওয়ার উদ্দেশ্য নিয়েছিলেন, তবে এটির ডিজাইনের ত্রুটি রয়েছে যা এটিকে * থ্রেডস্যাফ আসলে নয়, এটি মূলত অবহেলিত শ্রেণি। কোন কারণে, বিশ্ববিদ্যালয় ইত্যাদি এই সংবাদ সম্পর্কে শোনেনি এবং এখনও এর ব্যবহারের পক্ষে রয়েছে।
বোহেমিয়ান


3
@ দিনেশকুমার দুঃখিত - এটি একটি ভাল লিঙ্ক ছিল না। এখানে এর চূড়ান্ত উত্তর । সংক্ষেপে, এর সিঙ্ক্রোনাইজেশন অকেজো।
বোহেমিয়ান

7
মজার ঘটনা: জাভা 1.7 এর স্ট্যাক ভেক্টর শ্রেণি ব্যবহার করে।
টবি

26

ArrayList আরও নতুন এবং 20-30% দ্রুত।

আপনার যদি কিছু স্পষ্টতই আপাতভাবে প্রকাশিত প্রয়োজন হয় না Vector, ব্যবহার করুনArrayList


32
আপনি কি তার প্রমাণ দিয়ে দাবীটি সমর্থন করতে পারবেন 20-30% faster?
ব্যবহারকারী

5
@ ব্যবহারকারীর সময় বিশাল অ্যারে আটকে দেওয়া থেকে এটি কেবল ব্যক্তিগত অভিজ্ঞতা ছিল। এখন থেকে তিন বছরেরও বেশি সময় ধরে, আমি আপনাকে ঠিক কী বিষয়ে কথা বলছিলাম তা নির্দেশ করতে পারি না তবে সেখানে প্রচুর মানদণ্ড রয়েছে। এটি থ্রেডিংয়ের আগেই নয় যেখানে আপনি সবচেয়ে বড় লাফান দেখেন
অলি ২

20-30% কেবল মিলছে, আপনি যদি পড়েন এবং ভেক্টর / অ্যারেলিস্টে লিখেন, যেহেতু বৃদ্ধির কাজটি সবচেয়ে বেশি প্রভাব ফেলবে। আপনার যদি এমন একটি মাপদণ্ড থাকে যা কেবল একবার লিখে এবং তারপরে কেবল পাঠগুলি সম্পাদন করে তবে অন্যরকম ফলাফল সরবরাহ করা হবে
টবি

2
দয়া করে আপনার ডেটাতে একটি প্রমাণ দিন
ওয়্যারডমার্ক

যেহেতু ভেক্টর সিঙ্ক্রোনাইজড এবং অ্যারেলিস্ট সিঙ্ক্রোনাইজড নয়, এটি কারণ হতে পারে, অ্যারেলিস্টটি ভেক্টরের চেয়ে দ্রুত than
জিজ্ঞাসা

23

ভেক্টর এবং অ্যারেলিস্টের মধ্যে দুটি প্রধান পার্থক্য রয়েছে।

  1. ভেক্টর ডিফল্ট দ্বারা সিঙ্ক্রোনাইজ হয় এবং অ্যারেলিস্ট হয় না। দ্রষ্টব্য: আপনি সংগ্রহগুলি.সিনক্রোনাইজডলিস্ট () পদ্ধতিতে অ্যারেলিস্ট বস্তুটি পাস করে অ্যারেলিস্টকেও সিঙ্ক্রোনাইজ করতে পারেন। সিঙ্ক্রোনাইজ করা অর্থ: এটি কোনও পার্শ্ব প্রতিক্রিয়া সহ একাধিক থ্রেড সহ ব্যবহার করা যেতে পারে।

  2. নতুন উপাদানগুলির জন্য স্থান পর্যাপ্ত না হলে অ্যারেলিস্টগুলি আগের আকারের 50% দ্বারা বৃদ্ধি পায়, যেখানে নতুন আগত উপাদানগুলির জন্য স্থান না থাকলে ভেক্টর হিসাবে আগের আকারের 100% বৃদ্ধি পাবে।

এগুলি ব্যতীত, প্রোগ্রামিং প্রচেষ্টার ক্ষেত্রে তাদের মধ্যে কিছু ব্যবহারিক পার্থক্য রয়েছে:

  1. ভেক্টর থেকে নির্দিষ্ট স্থানে উপাদানটি পেতে আমরা এলিমেন্টএট ( ইনড ইনডেক্স) ফাংশনটি ব্যবহার করি । এই ফাংশনটির নামটি অত্যন্ত দীর্ঘ। ArrayList এই স্থানে আমরা আছে পেতে (int- সূচক) যা খুব সহজ মনে রাখা এবং ব্যবহার করা হয়।
  2. একইভাবে ভেক্টরটিতে বিদ্যমান উপাদানকে নতুন উপাদান দিয়ে প্রতিস্থাপন করতে আমরা সেটেলমেন্টআউট () পদ্ধতিটি ব্যবহার করি যা আবার খুব দীর্ঘ এবং প্রোগ্রামারটিকে বারবার ব্যবহারে বিরক্ত করতে পারে। এই অ্যারেলিস্টের জায়গায় অ্যাড (ইনটেক্স ইনডেক্স, অবজেক্ট) পদ্ধতি রয়েছে যা ব্যবহার করা এবং মনে রাখা সহজ। এটির মতো তাদের অ্যারেলিস্টে আরও প্রোগ্রামার বান্ধব এবং ফাংশন নাম ব্যবহার করা সহজ।

কোনটি ব্যবহার করবেন?

  1. ভেক্টর সম্পূর্ণরূপে ব্যবহার এড়াতে চেষ্টা করুন। অ্যারেলিস্টগুলি ভেক্টর যা করতে পারে তা করতে পারে। আরও বেশি অ্যারেলিস্টগুলি ডিফল্টরূপে সিঙ্ক্রোনাইজ হয় না। আপনি যদি চান, আপনি যখনই সংগ্রহগুলি ব্যবহারের ক্লাসটি ব্যবহার করে প্রয়োজন তখন আপনি এটি সিঙ্ক্রোনাইজ করতে পারেন।
  2. অ্যারেলিস্টে ফাংশনের নামগুলি মনে রাখা এবং ব্যবহার করা সহজ।

দ্রষ্টব্য : যদিও অ্যারেলিস্টটি 100% বৃদ্ধি পেয়েছে, আপনি প্রাথমিক পর্যায়ে পর্যাপ্ত মেমরির বরাদ্দ করছেন তা নিশ্চিত করার জন্য আপনি নিশ্চিতকরণের ক্ষমতা () পদ্ধতি দ্বারা এড়াতে পারবেন।

আশা করি এটা সাহায্য করবে.


5
অ্যারেআইলিস্ট এবং ভেক্টরের জন্য বৃদ্ধি আকারের উপর ভুল তথ্য (স্যুইচ করা), অন্যথায় বেশ ভাল উত্তর।
নেনাড বুলাটোভিক

অ্যারেলিস্টের সময় ভেক্টরের বর্ধন প্রয়োজনীয় কাগজপত্রের সাথে দ্বিগুণ হচ্ছে oআরাক্লিল.কম / জাভ্যাস / / / ডকস / এপি / জাভা / ইউটিল / ভেক্টর এইচটিএমএল "যখন কোনও উপাদান যুক্ত করা হয়েছে তখন বৃদ্ধির নীতির বিবরণ নির্দিষ্ট করা হয়নি ধ্রুবক amorised সময় ব্যয়। " docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html
মোহাম্মদ এল-নাকিব

আমি বুঝতে পারি না যে পদ্ধতিটির নামটি কীভাবে সেই পদ্ধতি ব্যবহার বা না ব্যবহারের মানদণ্ড হতে পারে।
সুরেন্দার খেরওয়া

14

ArrayListএবং Vectorউভয়ই প্রয়োগ করে তালিকার ইন্টারফেস এবং সন্নিবেশ ক্রম বজায় রাখে B তবে এখানে ArrayListএবং Vectorশ্রেণীর মধ্যে অনেক পার্থক্য রয়েছে ...

অ্যারেলিস্ট -

  1. ArrayList সিঙ্ক্রোনাইজ করা হয় না।
  2. ArrayList উপাদানগুলির সংখ্যাটি তার ক্ষমতা থেকে বেশি হলে বর্তমান অ্যারে আকারের 50% বৃদ্ধি পায়।
  3. ArrayList লিগ্যাসি ক্লাস নয়, এটি জেডিকে ১.২ এ প্রবর্তিত হয়েছে।
  4. ArrayList দ্রুত কারণ এটি অ-সিঙ্ক্রোনাইজড।
  5. ArrayList উপাদানগুলি অতিক্রম করতে Iterator ইন্টারফেস ব্যবহার করে।

ভেক্টর -

  1. Vector সিঙ্ক্রোনাইজ করা হয়।
  2. Vector ইনক্রিমেন্ট 100% এর অর্থ হ'ল অ্যারের আকার দ্বিগুণ হয় যদি উপাদানগুলির মোট সংখ্যা তার ক্ষমতার চেয়ে বেশি হয়।
  3. Vector একটি উত্তরাধিকার শ্রেণি।

  4. Vector ধীর গতির কারণ এটি সিঙ্ক্রোনাইজ করা হয়েছে অর্থাত্ মাল্টিথ্রেডিং পরিবেশে এটি অন্যান্য থ্রেডগুলি চলমানযোগ্য বা চালিতযোগ্য অবস্থায় ধরে রাখবে যতক্ষণ না বর্তমান থ্রেড অবজেক্টের লক প্রকাশ না করে।

  5. Vectorউপাদানগুলি অতিক্রম করতে গণনা ইন্টারফেস ব্যবহার করে। তবে এটি আইট্রেটারও ব্যবহার করতে পারে।

আরও দেখুন: https://www.javatPoint.com/differences-between-arraylist-and-vector


10

মূলত অ্যারেলিস্ট এবং ভেক্টর উভয়ই অভ্যন্তরীণ অবজেক্ট অ্যারে ব্যবহার করে।

অ্যারেলিস্ট: অ্যারেলিস্ট ক্লাসটি অ্যাবস্ট্রাকলিস্ট প্রসারিত করে তালিকা ইন্টারফেস এবং র্যান্ডমএ্যাক্সেস (মার্কার ইন্টারফেস) প্রয়োগ করে। অ্যারেলিস্ট গতিশীল অ্যারেগুলিকে সমর্থন করে যা প্রয়োজন অনুযায়ী বাড়তে পারে। এটি আমাদের উপাদানগুলির উপর প্রথম পুনরাবৃত্তি দেয়। অ্যারেলিস্ট অভ্যন্তরীণ অবজেক্ট অ্যারে ব্যবহার করে; এগুলি 10 এর একটি ডিফল্ট প্রাথমিক আকারের সাথে তৈরি করা হয় যখন এই আকারটি অতিক্রম করা হয়, সংগ্রহটি স্বয়ংক্রিয়ভাবে 15 এর ডিফল্ট আকারের অর্ধেক হয়ে যায়।

ভেক্টর: ভেক্টর অ্যারেলিস্টের অনুরূপ তবে পার্থক্যগুলি হ'ল এটি সিঙ্ক্রোনাইজ করা হয় এবং এর ডিফল্ট প্রাথমিক আকার 10 হয় এবং আকার যখন তার আকারের চেয়ে বেশি হয় মূল আকারের দ্বিগুণ হয়ে যায় যার অর্থ নতুন আকার হবে 20. ভেক্টরটি একমাত্র শ্রেণি অ্যারেলিস্ট ব্যতীত র্যান্ডমএ্যাক্সেস প্রয়োগ করতে। ভেক্টরটির মধ্যে চারটি কনস্ট্রাক্টর রয়েছে যার মধ্যে দুটি প্যারামিটার লাগে ভেক্টর (ইন্ট প্রারম্ভিক ক্ষমতা, ইন্টি কেপিসিটি ইনক্রিমেন্ট) ক্যাপাসিটি ইনক্রিমেন্টটি সেই পরিমাণ যা দ্বারা ভেক্টর ওভারফ্লো হয়ে যাওয়ার পরে ক্ষমতা বৃদ্ধি করা হয়, সুতরাং এতে লোড ফ্যাক্টরের উপর আরও নিয়ন্ত্রণ থাকে।

কিছু অন্যান্য পার্থক্য হ'ল: এখানে চিত্র বর্ণনা লিখুন


1
কেন লিঙ্কডলিস্টে প্রথমে এবং শেষে অবজেক্ট যুক্ত করা ধীর? এটি উভয় অ্যারেলিস্ট এবং ভেক্টরের চেয়ে দ্রুত হওয়া উচিত নয়?
CHANist

@ CHANist আমিও একমত শুরুতে এবং শেষে কোনও অবজেক্ট যুক্ত করা এর মাঝখানে কোনও বস্তু যুক্ত করার চেয়ে দ্রুত হওয়া উচিত।
রাহুল রাস্তোগি

1
এই টেবিলের লিংকডলিস্ট কলামে ব্যবহৃত ভাষাটি পরস্পরবিরোধী। লিংকডলিস্টে প্রিপেন্ডিং এবং সংযোজন উভয়ই মাঝের উপাদানগুলিকে যুক্ত করার চেয়ে দ্রুত, তবে অ্যারেলিস্ট বা ভেক্টরগুলি প্রিপেন্ডিং বা সংযোজন করার চেয়ে ধীর। এটি কারণ প্রতিটি সন্নিবেশকে অ-স্থানীয় রেফারেন্স সহ মেমরি বরাদ্দ প্রয়োজন, ক্যাশে মিসের সম্ভাবনা বাড়িয়ে তোলে। লিঙ্কডলিস্টে লুকিং উপাদানগুলির সংখ্যার সাথে লিনিয়ার এবং শেষের দিকে কোনও পয়েন্টার সংরক্ষণ করা হয় নি, সংযোজন প্রিপেন্ডিংয়ের তুলনায় আরও দ্রুত কারণ মেমরি কেবলমাত্র একটি উপাদানের জন্য পুনরায় স্থানান্তরিত।
সোফিয়া সোনার
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.