মধ্যে মৌলিক পার্থক্য কি Set<E>
এবং List<E>
ইন্টারফেস?
মধ্যে মৌলিক পার্থক্য কি Set<E>
এবং List<E>
ইন্টারফেস?
উত্তর:
List
উপাদানগুলির একটি ক্রমবর্ধমান ক্রম হয় যেখানে উপাদানগুলির Set
একটি স্বতন্ত্র তালিকা যা সীমানাবিহীন হয় (ধন্যবাদ, কুইন টেলর )।
অর্ডার করা সংগ্রহ (ক্রম হিসাবেও পরিচিত)। এই ইন্টারফেসটির ব্যবহারকারীর তালিকার প্রতিটি উপাদান সন্নিবেশ করা হয়েছে তার উপর যথাযথ নিয়ন্ত্রণ রয়েছে। ব্যবহারকারী তাদের পূর্ণসংখ্যা সূচক (তালিকার অবস্থান) দ্বারা উপাদানগুলিতে অ্যাক্সেস করতে এবং তালিকার উপাদানগুলির সন্ধান করতে পারে।
একটি সংগ্রহ যাতে কোনও সদৃশ উপাদান নেই। আরও আনুষ্ঠানিকভাবে, সেটগুলিতে e1.equals (e2) এবং সর্বাধিক একটি নাল উপাদান E1 এবং e2 উপাদানগুলির জুড়ি থাকে না। এর নাম দ্বারা বোঝানো হিসাবে, এই ইন্টারফেস গাণিতিক সেট বিমূর্ততা মডেল।
╔═══════════════════╦══════════════════════╦═════════════════════════════╗
║ ║ List ║ Set ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Duplicates ║ YES ║ NO ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Order ║ ORDERED ║ DEPENDS ON IMPLEMENTATION ║
╠═══════════════════╬══════════════════════╬═════════════════════════════╣
║ Positional Access ║ YES ║ NO ║
╚═══════════════════╩══════════════════════╩═════════════════════════════╝
উপাদানের অর্ডার করা তালিকাগুলি (অনন্য বা না)
জাভা ইন্টারফেসের অনুসারে নামList
সূচক দ্বারা অ্যাক্সেস করা যায়
ব্যবহার করে কার্যকর
অনন্য উপাদানের তালিকা:
জাভার ইন্টারফেসের নামSet
অনুসারে সূচক দ্বারা অ্যাক্সেস করা
যায় না
ব্যবহার করে কার্যকর
উভয় ইন্টারফেস Set
এবং List
জাভা ইন্টারফেস অনুসারেCollection
ধারণামূলকভাবে আমরা সাধারণত একটি আনর্ডারড গোষ্ঠীকরণ উল্লেখ করি যা ডুপ্লিকেটকে ব্যাগ হিসাবে মঞ্জুরি দেয় এবং সদৃশগুলি সেট নয়।
তালিকা
সেট
List
গুলি সাধারণত নকল বস্তুর অনুমতি দেয়।
List
গুলি অবশ্যই অর্ডার করা উচিত, এবং তাই সূচী দ্বারা অ্যাক্সেসযোগ্য।
বাস্তবায়ন শ্রেণীর অন্তর্ভুক্ত: ArrayList
, LinkedList
,Vector
Set
গুলি সদৃশ বস্তুর অনুমতি দেয় না । বেশিরভাগ বাস্তবায়নগুলি অর্ডারযুক্ত নয়, তবে এটি বাস্তবায়ন নির্দিষ্ট।
বাস্তবায়ন ক্লাসগুলির মধ্যে রয়েছে:
HashSet
(আনর্ডারড),
LinkedHashSet
(অর্ডার করা),
TreeSet
(প্রাকৃতিক আদেশ দ্বারা সরবরাহ করা বা সরবরাহকারী তুলনাকারীর মাধ্যমে)
আমরা যেমন জাভা ইন্টারফেসের কথা বলছি, কেন জাভাদোকের দিকে তাকাব না ?!
List
হ'ল একটি অর্ডার করা সংগ্রহ (ক্রম), যা সাধারণত নকলকে অনুমতি দেয়Set
ক সংগ্রহ যা কোনও সদৃশ উপাদান নেই, পুনরাবৃত্তির ক্রমটি প্রয়োগের মাধ্যমে গ্যারান্টিযুক্ত হতে পারেসেটের বিষয়ে আদেশের অভাব সম্পর্কে কোনও উল্লেখ নেই: এটি বাস্তবায়নের উপর নির্ভর করে।
LinkedHashSet
কোডটি পরে অর্ডার দেওয়ার উপর নির্ভর করে যদি আমি সাধারণত বাম দিকে রাখি । আমি কেবল তখনই ব্যবহার করি Set
যদি আমি সত্যিই এটির মতো ব্যবহার করি তবে আপনি ধারনা করতে পারবেন না যে অন্তর্নিহিত বাস্তবায়ন একটি LinkedHashSet
বা এর মতো, এটি আজ হতে পারে তবে আগামীকাল কোডটি পরিবর্তিত হবে এবং এটি ব্যর্থ হবে।
আপনি যে উত্তরটি সন্ধান করছেন এটি এটি নাও হতে পারে তবে সংগ্রহের ক্লাসগুলির জাভাডোকটি আসলে বেশ বর্ণনামূলক। কপি / পেস্ট:
অর্ডার করা সংগ্রহ (ক্রম হিসাবেও পরিচিত)। এই ইন্টারফেসটির ব্যবহারকারীর তালিকার প্রতিটি উপাদান সন্নিবেশ করা হয়েছে তার উপর যথাযথ নিয়ন্ত্রণ রয়েছে। ব্যবহারকারী তাদের পূর্ণসংখ্যা সূচক (তালিকার অবস্থান) দ্বারা উপাদানগুলিতে অ্যাক্সেস করতে এবং তালিকার উপাদানগুলির সন্ধান করতে পারে।
সেটগুলি থেকে পৃথক, তালিকাগুলি সাধারণত সদৃশ উপাদানগুলিকে মঞ্জুরি দেয়। আরও আনুষ্ঠানিকভাবে, তালিকাগুলি সাধারণত E1 এবং e2 উপাদানগুলির e1.equals (e2) এর জোড়া দেয় এবং তারা সাধারণত একাধিক নাল উপাদানকে মঞ্জুরি দেয় যদি তারা নাল উপাদানগুলিকে একেবারে অনুমতি দেয়। এটি অনিবার্য নয় যে কোনও ব্যক্তি নকলকে নিষিদ্ধ করার জন্য কোনও তালিকা কার্যকর করতে ইচ্ছুক হতে পারে যখন ব্যবহারকারী তাদের runোকানোর চেষ্টা করে রানটাইম ব্যতিক্রম ছুঁড়ে ফেলে তবে আমরা এই ব্যবহারটি বিরল বলে আশা করি be
একটি সেট স্বতন্ত্র বস্তুর একটি নিরবচ্ছিন্ন গোষ্ঠী - কোনও সদৃশ বস্তুর অনুমতি নেই। এটি সাধারণত theোকানো হচ্ছে এমন বস্তুর হ্যাশ কোড ব্যবহার করে প্রয়োগ করা হয়। (নির্দিষ্ট বাস্তবায়ন ক্রম যোগ করতে পারে, কিন্তু সেট ইন্টারফেস নিজেই না।)
একটি তালিকা হ'ল অবজেক্টের অর্ডার করা গোষ্ঠী যাতে নকল থাকতে পারে। এটি একটি সঙ্গে বাস্তবায়িত করা যায়নি ArrayList
, LinkedList
ইত্যাদি
List
হয় তবে অর্ডার করা হয় না 😕
তালিকা:
তালিকাটি সদৃশ উপাদান এবং নাল মানকে অনুমতি দেয়। উপাদানগুলির সাথে সম্পর্কিত সূচক ব্যবহার করে অনুসন্ধান করা সহজ এবং এটি সন্নিবেশ ক্রমে উপাদানগুলি প্রদর্শন করবে। উদাহরণ: (linkedlist)
import java.util.*;
public class ListExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
List<Integer> l=new LinkedList<Integer>();
l.add(001);
l.add(555);
l.add(333);
l.add(888);
l.add(555);
l.add(null);
l.add(null);
Iterator<Integer> il=l.iterator();
System.out.println(l.get(0));
while(il.hasNext()){
System.out.println(il.next());
}
for(Integer str : l){
System.out.println("Value:"+str);
}
}
}
আউটপুট:
1
1
555
333
888
555
নাল
নাল
মান: 1
মান: 555
মান: 333
মান: 888
মান: 555
মান: নাল
মান: নাল
সেট:
সেট কোনও নকল উপাদানকে অনুমতি দেয় না এবং এটি একক নাল মানকে অনুমতি দেয় t এটি উপাদান প্রদর্শন করার কোনও আদেশ বজায় রাখে না n কেবলমাত্র TreeSet
আরোহী ক্রমে প্রদর্শিত হবে।
উদাহরণ: (TreeSet)
import java.util.TreeSet;
public class SetExample {
public static void main(String[] args) {
// TODO Auto-generated method stub
TreeSet<String> set = new TreeSet<String>();
try {
set.add("hello");
set.add("world");
set.add("welcome");
set.add("all");
for (String num : set) {
System.out.println( num);
}
set.add(null);
} catch (NullPointerException e) {
System.out.println(e);
System.out.println("Set doesn't allow null value and duplicate value");
}
}
}
আউটপুট:
সমস্ত
হ্যালো
স্বাগতম
বিশ্ব
java.lang. নালপয়েন্টার এক্সেকশন
সেট নাল মান এবং সদৃশ মানকে অনুমতি দেয় না
তালিকা বনাম সেট
1) সেট সদৃশ অনুমতি দেয় না। তালিকাটি নকল করতে দেয়। সেট বাস্তবায়নের ভিত্তিতে এটি সন্নিবেশনের আদেশও বজায় রাখে।
উদাহরণ: LinkedHashSet
। এটি সন্নিবেশ ক্রম বজায় রাখে lease দয়া করে এখানে ক্লিক করুন
2) পদ্ধতি রয়েছে । সেট প্রকৃতির দ্বারা এটি অ্যাক্সেসের জন্য আরও ভাল পারফরম্যান্স দেবে। সেরা কেস এর ও (1)। তবে তালিকার কাছে পারফরম্যান্স ইস্যু রয়েছে contains
।
সমস্ত List
ক্লাস সন্নিবেশ ক্রম বজায় রাখে। তারা পারফরম্যান্স এবং অন্যান্য বৈশিষ্ট্যের উপর ভিত্তি করে বিভিন্ন বাস্তবায়ন ব্যবহার করে (উদাহরণস্বরূপ ArrayList
একটি নির্দিষ্ট সূচকের অ্যাক্সেসের গতির জন্য, LinkedList
কেবল অর্ডার বজায় রাখার জন্য)। যেহেতু কোনও কী নেই তাই নকলকে অনুমতি দেওয়া হয়েছে।
Set
ক্লাস সন্নিবেশ শৃঙ্খলা বজায় রাখার না। তারা allyচ্ছিকভাবে একটি নির্দিষ্ট আদেশ (যেমন হিসাবে SortedSet
) চাপিয়ে দিতে পারে , তবে সাধারণত কিছু হ্যাশ ফাংশন (যেমন হিসাবে HashSet
) এর উপর ভিত্তি করে একটি বাস্তবায়ন-সংজ্ঞায়িত আদেশ থাকে । যেহেতু Set
গুলি কী দ্বারা অ্যাক্সেস করা হয়েছে, সদৃশগুলি অনুমোদিত নয়।
অর্ডার ... একটি তালিকার একটি আদেশ আছে, একটি সেট নেই not
জাভা মধ্যে তালিকা এবং সেট মধ্যে কিছু কম নোট যোগ্য পার্থক্য নীচে দেওয়া হয়েছে:
1) জাভা মধ্যে তালিকা এবং সেট মধ্যে মৌলিক পার্থক্য নকল উপাদান অনুমতি দেয়। জাভাতে থাকা তালিকা নকলকে অনুমতি দেয় যখন সেট কোনও সদৃশকে অনুমতি দেয় না। আপনি যদি সেটিতে সদৃশ প্রবেশ করান তবে এটি পুরানো মানটিকে প্রতিস্থাপন করবে। জাভাতে যে কোনও প্রয়োগের ক্ষেত্রে কেবল অনন্য উপাদান থাকবে।
2) জাভাতে তালিকা এবং সেট এর মধ্যে আরেকটি উল্লেখযোগ্য পার্থক্য হ'ল অর্ডার। তালিকাটি একটি অর্ডার করা সংগ্রহ যখন সেটটি একটি আনর্ডারড সংগ্রহ। তালিকা উপাদানগুলির সন্নিবেশ ক্রম বজায় রাখে, এর আগে যে কোনও উপাদান whichোকানো হয়েছে তার পরে সন্নিবেশ করা কোনও উপাদানের তুলনায় নিম্ন সূচীতে যাবে means জাভাতে সেট কোনও অর্ডার বজায় রাখে না। যদিও সেটটি सॉোর্টসেট নামে আরেকটি বিকল্প সরবরাহ করে যা সেটগুলিতে সেট থাকা সঞ্চিত অবজেক্টগুলির তুলনামূলক এবং তুলনামূলক পদ্ধতি দ্বারা সংজ্ঞায়িত নির্দিষ্ট বাছাই ক্রমে সেট উপাদান সংরক্ষণ করতে পারে।
3) জাভাতে তালিকা ইন্টারফেসের জনপ্রিয় প্রয়োগের মধ্যে অ্যারেলিস্ট, ভেক্টর এবং লিংকডলিস্ট অন্তর্ভুক্ত রয়েছে। সেট ইন্টারফেসের জনপ্রিয় প্রয়োগের ক্ষেত্রে হ্যাশসেট, ট্রিসেট এবং লিংকডহ্যাশসেট অন্তর্ভুক্ত রয়েছে।
এটি বেশ পরিষ্কার যে আপনার যদি সন্নিবেশ ক্রম বা অবজেক্ট বজায় রাখতে হয় এবং আপনার সংগ্রহের তালিকায় যাওয়ার চেয়ে ডুপ্লিকেট থাকতে পারে। অন্যদিকে আপনার প্রয়োজনটি যদি কোনও ডুপ্লিকেট ছাড়াই অনন্য সংগ্রহ বজায় রাখা হয় তবে সেটটি হ'ল উপায়।
তালিকা:
সেট করুন:
Set<E>
এবং List<E>
উভয়ই ধরণের উপাদান সংরক্ষণ করতে ব্যবহৃত হয় E
। পার্থক্যটি হ'ল Set
আনর্ডার্ড পদ্ধতিতে সংরক্ষণ করা হয় এবং সদৃশ মানগুলিকে অনুমতি দেয় না। List
আদেশযুক্ত উপায়ে উপাদানগুলি সঞ্চয় করতে ব্যবহৃত হয় এবং এটি সদৃশ মানকে অনুমতি দেয় না।
Set
সূচি পজিশনে List
উপাদানগুলি অ্যাক্সেস করা যায় না এবং সূচী অবস্থানের সাথে উপাদানগুলি অ্যাক্সেস করা যায়।
হাই অনেক উত্তর ইতিমধ্যে দেওয়া আছে .. আমাকে এখনও কিছু উল্লেখ করা হয় যা কিছু পয়েন্ট নির্দেশ করুন:
RandomAccess
যা দ্রুত অ্যাক্সেসের জন্য চিহ্নিতকারী ইন্টারফেস। সেট প্রয়োগগুলির কোনওটিই এটি করে না।ListIterator
যা উভয় দিকেই পুনরাবৃত্তি সমর্থন করে । সেটটিতে ইটারেটর ব্যবহার করা হয় যা কেবল 1 টি উপায় পুনরাবৃত্তি সমর্থন করেসবচেয়ে বড় ভিন্নটি হল মূল ধারণাটি।
থেকে সেট এবং তালিকা ইন্টারফেস। সেটটি গণিতের ধারণা। সেট পদ্ধতি সংগ্রহকে প্রসারিত করে new নতুন পদ্ধতি যুক্ত না করে। আকার () এর অর্থ কার্ডিনালিটি (আরও বেশি বিটসেট কার্ডিনালিটি , লিনিয়ার কাউন্টার। লগ লগ , হাইপারলগলগ )। addAll () এর অর্থ ইউনিয়ন। ধরে রাখার সমস্ত () অর্থ ছেদ করা। মুছে ফেলা সমস্ত () অর্থ পার্থক্য।
তবে এই ধারণাগুলির অভাবের তালিকা দিন । তালিকাটি ক্রম ধারণাকে সমর্থন করার জন্য প্রচুর পদ্ধতি যুক্ত করে যা সংগ্রহের ইন্টারফেস সরবরাহ করে না। কোর ধারণা এর INDEX । অ্যাড (ইনডেক্স, এলিমেন্ট), গেট (ইনডেক্স), সন্ধান (ইনডেক্সফ ()), সরান (সূচক) উপাদান) তালিকাটি " সংগ্রহ দেখুন " সাবলিস্টও সরবরাহ করে । সেটটির ভিউ নেই। অবস্থানগত অ্যাক্সেস নেই। তালিকা সংগ্রহ ক্লাসে প্রচুর অ্যালগরিদমও সরবরাহ করে । সাজানোর (তালিকা), binarySearch (তালিকা), বিপরীত (তালিকা), এলোমেলো (তালিকা), ভরাট (তালিকা)। মেথড প্যারামগুলি হল লিস্ট ইন্টারফেস। সদৃশ উপাদানগুলি কেবল ধারণার ফলাফল। প্রয়োজনীয় পার্থক্য নয়।
সুতরাং প্রয়োজনীয় পার্থক্য ধারণা হয়। সেট গণিত সেট ধারণা। তালিকা ক্রম ধারণা।
গ্রোভির সাথে এখানে একটি স্পষ্ট উদাহরণ। আমি একটি সেট এবং একটি তালিকা তৈরি। তারপরে আমি প্রতিটি তালিকার মধ্যে 20 এলোমেলোভাবে উত্পন্ন মান সংরক্ষণ করার চেষ্টা করি। উত্পন্ন মান 0 থেকে 5 এর মধ্যে হতে পারে
s = [] as Set
l = []
max = 5
print "random Numbers :"
20.times{
e = (int)Math.random()*max
s << e
l << e
print "$e, "
}
println "\n"
println "Set : $s "
println "list : $l
ফলাফল :
এলোমেলো নম্বর: 4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3
সেট করুন: [4, 1, 0, 2, 3]
তালিকা: [4, 1, 4, 0, 1, 2, 4, 0, 0, 3, 4, 3, 2, 0, 4, 0, 1, 3, 1, 3]
আপনি দেখতে পাচ্ছেন যে পার্থক্যটি হ'ল:
সেট: একটি সেট এর সংগ্রহে সদৃশ উপাদান থাকতে পারে না। এটি একটি অর্ডারযুক্ত সংগ্রহও। সেট থেকে ডেটা অ্যাক্সেস করতে, কেবলমাত্র আইট্রেটার ব্যবহার করা প্রয়োজন এবং এটির জন্য সূচক ভিত্তিক পুনরুদ্ধার করা সম্ভব নয়। এটি যখনই স্বতন্ত্রতা সংগ্রহের প্রয়োজন হয় তখন এটি প্রধানত ব্যবহৃত হয়।
তালিকা: একটি তালিকায় সদৃশ উপাদান যেমন সন্নিবেশ করা হয় তত অনুরূপ নকল উপাদান থাকতে পারে। সুতরাং, এটি সূচক বা পুনরুদ্ধারের উপর নির্ভর করে ডেটা পুনরুদ্ধার করা যেতে পারে। সংগ্রহের সঞ্চয় করতে এটি ব্যাপকভাবে ব্যবহৃত হয় যা সূচকের ভিত্তিতে অ্যাক্সেস করতে হবে।
শীর্ষস্থানীয় নাম: তালিকা ভিএস সেট
আমি সবেমাত্র জাভার সবচেয়ে গুরুত্বপূর্ণ বিষয়টি সংগ্রহ করেছি ফ্রেমওয়ার্ক বলে called আমি সংগ্রহগুলি সম্পর্কে আমার সামান্য জ্ঞানটি আপনার সাথে ভাগ করে নেওয়ার চিন্তা করেছি। তালিকা, সেট, মানচিত্র এটির সবচেয়ে গুরুত্বপূর্ণ বিষয়। সুতরাং তালিকা এবং সেট দিয়ে শুরু করা যাক।
তালিকা এবং সেট মধ্যে পার্থক্য:
তালিকা একটি সংগ্রহ শ্রেণি যা শ্রেণি প্রসারিত AbstractList
যেখানে সেট হিসাবে সংগ্রহের শ্রেণি যা AbstractSet
শ্রেণি প্রসারিত হয় তবে উভয়ই সংকলন ইন্টারফেস প্রয়োগ করে।
তালিকা ইন্টারফেস নকল মান (উপাদানসমূহ) অনুমতি দেয় যেখানে সেট ইন্টারফেস সদৃশ মানকে মঞ্জুরি দেয় না। সেটে সদৃশ উপাদানগুলির ক্ষেত্রে এটি পুরানো মানগুলি প্রতিস্থাপন করে।
তালিকা ইন্টারফেস নুল মানগুলিকে অনুমতি দেয় যেখানে সেট ইন্টারফেস হিসাবে নাল মানগুলিকে অনুমতি দেয় না। সেট এটি নাল মান ব্যবহার করার ক্ষেত্রে NullPointerException
।
তালিকা ইন্টারফেস সন্নিবেশ ক্রম বজায় রাখে। এর অর্থ হল যেভাবে তালিকার উপাদানগুলিকে আমরা একইভাবে পুনরায় সংযুক্তকারী বা প্রতিটি শৈলীর সাহায্যে এটি যোগ করি। যদিও Set
প্রয়োগগুলি অগত্যা সন্নিবেশ ক্রম বজায় রাখে না। (যদিও SortedSet
ব্যবহার করে TreeSet
এবং LinkedHashSet
সন্নিবেশ ক্রম বজায় রাখে)।
তালিকার ইন্টারফেসের নিজস্ব পদ্ধতি নির্ধারিত রয়েছে যেখানে সেট ইন্টারফেসের নিজস্ব পদ্ধতি নেই তাই সেট কেবল সংগ্রহ ইন্টারফেস পদ্ধতি ব্যবহার করে।
তালিকার ইন্টারফেসের একটি উত্তরাধিকার শ্রেণীর নাম রয়েছে Vector
যেখানে সেট ইন্টারফেসের কোনও উত্তরাধিকার শ্রেণি নেই
সর্বশেষে তবে সর্বনিম্ন নয় ... listIterator()
পদ্ধতিটি কেবল তালিকা শ্রেণীর মধ্যে থাকা উপাদানগুলির মধ্যে চক্র ব্যবহার করতে ব্যবহৃত হয় যেখানে শ্রেণীর উপাদানগুলি সেট করতে আমরা পুনরায় () পদ্ধতি ব্যবহার করতে পারি
আমরা কিছু যোগ করতে পারেন? আমাকে বুঝতে দাও.
ধন্যবাদ।
List
এবং Set
ইন্টারফেসগুলি যা একটি বিমূর্ত শ্রেণির আকারে "বেস" বাস্তবায়ন (যা আপনি উল্লেখ করেছেন)। এছাড়াও, # 3 সম্পূর্ণ অসম্পূর্ণ , কারণ বেশিরভাগ সেট নাল মানকে অনুমতি দেয় (তবে বাস্তবায়ন নির্ভর করে)। আমি # 5 এবং # 7 বুঝতে পারি না, এবং # 6 এর Vector
জন্য উত্তরাধিকার নয়, তবে কেবল সিঙ্ক্রোনাইজ করা হয় এবং সিঙ্ক্রোনাইজেশন প্রয়োজন হলে বাদে ব্যবহারের জন্য পছন্দ করা হয় না।
সেট করুন:
সদৃশ মান থাকতে পারে না অর্ডার প্রয়োগের উপর নির্ভর করে। ডিফল্টরূপে এটি অর্ডার করা হয় না সূচী দ্বারা অ্যাক্সেস থাকতে পারে না
তালিকা:
সদৃশ মান থাকতে পারে ডিফল্ট অনুসারে অর্ডার করা সূচী দ্বারা অ্যাক্সেস থাকতে পারে