আমি জানি এটি একটি পুরানো থ্রেড, তবে অন্য কোনও উত্তরই আমার ব্যবহারের ক্ষেত্রে পুরোপুরি সমাধান করেনি (আমার ধারণা, গুয়ারা মাল্টিসেট সম্ভবত এটি করতে পারে, তবে এখানে কোনও উদাহরণ নেই)। দয়া করে আমার ফর্ম্যাটিংটি ক্ষমা করুন। স্ট্যাক এক্সচেঞ্জে পোস্ট করার ক্ষেত্রে আমি এখনও নতুন। কোনও ত্রুটি আছে কিনা তা অতিরিক্তভাবে আমাকে জানান
বলুন যে আপনার কাছে List<T>
a এবং List<T>
b আছে এবং আপনি নীচের শর্তগুলির সাথে সমান কিনা তা পরীক্ষা করতে চান:
1) ও (এন) প্রত্যাশিত চলমান সময়
2) সমতা হিসাবে সংজ্ঞায়িত করা হয়: ক বা খের সমস্ত উপাদানগুলির জন্য, উপাদানটি যে পরিমাণে সংঘটিত হয় তার সংখ্যার বিয়ের পরিমাণের বারের সমান equal এলিমেন্টের সাম্যতাটিকে T.equals () হিসাবে সংজ্ঞায়িত করা হয়
private boolean listsAreEquivelent(List<? extends Object> a, List<? extends Object> b) {
if(a==null) {
if(b==null) {
//Here 2 null lists are equivelent. You may want to change this.
return true;
} else {
return false;
}
}
if(b==null) {
return false;
}
Map<Object, Integer> tempMap = new HashMap<>();
for(Object element : a) {
Integer currentCount = tempMap.get(element);
if(currentCount == null) {
tempMap.put(element, 1);
} else {
tempMap.put(element, currentCount+1);
}
}
for(Object element : b) {
Integer currentCount = tempMap.get(element);
if(currentCount == null) {
return false;
} else {
tempMap.put(element, currentCount-1);
}
}
for(Integer count : tempMap.values()) {
if(count != 0) {
return false;
}
}
return true;
}
চলমান সময় হ'ল (এন) কারণ আমরা হ্যাশম্যাপে ও (2 * এন) সন্নিবেশগুলি করছি এবং ও (3 * এন) হ্যাশম্যাপ নির্বাচন করে। আমি এই কোডটি পুরোপুরি পরীক্ষা করে দেখিনি, তাই সাবধান হন :)
//Returns true:
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("B","A","A"));
listsAreEquivelent(null,null);
//Returns false:
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("B","A","B"));
listsAreEquivelent(Arrays.asList("A","A","B"),Arrays.asList("A","B"));
listsAreEquivelent(Arrays.asList("A","A","B"),null);