আমি জানি যে আমি অনেক দেরিতে এসেছি তবে আমি কিছু বিকল্প প্রস্তাব করতে চাই, কিছু অসাধারণ নয়, এমন কিছু ক্ষেত্রে যা এখানে বর্ণিত হয়নি। যদি কেউ দক্ষতার জন্য এত যত্ন করে না তবে তিনি আরও সরলতার সাথে কিছু চান (সম্ভবত কোডের এক লাইনের সাথে শেষ প্রবেশের মানটি সন্ধান করুন), জাভা 8 এর আগমনের সাথে এই সমস্ত কিছু সহজ হয়ে যাবে
। আমি কিছু দরকারী পরিস্থিতি সরবরাহ করি provide
সম্পূর্ণতার জন্য, আমি অন্য বিকল্পগুলির দ্বারা ইতিমধ্যে এই পোস্টে উল্লিখিত অ্যারেগুলির সমাধানের সাথে এই বিকল্পগুলি তুলনা করি। আমি সমস্ত কেস সংক্ষিপ্ত করি এবং আমি মনে করি সেগুলি কার্যকর হবে (যখন পারফরম্যান্সটি গুরুত্বপূর্ণ বা না) বিশেষত নতুন বিকাশকারীদের জন্য, সর্বদা প্রতিটি সমস্যার বিষয়ে নির্ভর করে
সম্ভাব্য বিকল্প
অ্যারে পদ্ধতির ব্যবহার
অনুসরণটি তুলনা করতে আমি পূর্ববর্তী উত্তর থেকে এটি নিয়েছি। এই সমাধানটি @feresr এর অন্তর্গত।
public static String FindLasstEntryWithArrayMethod() {
return String.valueOf(linkedmap.entrySet().toArray()[linkedmap.size() - 1]);
}
অ্যারেলিস্ট পদ্ধতির ব্যবহার
কিছুটা আলাদা পারফরম্যান্স সহ প্রথম সমাধানের মতো
public static String FindLasstEntryWithArrayListMethod() {
List<Entry<Integer, String>> entryList = new ArrayList<Map.Entry<Integer, String>>(linkedmap.entrySet());
return entryList.get(entryList.size() - 1).getValue();
}
পদ্ধতি হ্রাস করুন
এই পদ্ধতিটি স্ট্রিমের শেষ উপাদানটি না পাওয়া পর্যন্ত উপাদানগুলির সেটকে হ্রাস করবে। তদতিরিক্ত, এটি কেবল নির্বিচার ফলাফলগুলিই ফিরিয়ে দেবে
public static String FindLasstEntryWithReduceMethod() {
return linkedmap.entrySet().stream().reduce((first, second) -> second).orElse(null).getValue();
}
এড়িয়ে যান ফাংশন পদ্ধতি
এই পদ্ধতিটি স্ট্রিমের সর্বশেষ উপাদানটি কেবলমাত্র তার আগে সমস্ত উপাদান এড়িয়ে চলে যাবে
public static String FindLasstEntryWithSkipFunctionMethod() {
final long count = linkedmap.entrySet().stream().count();
return linkedmap.entrySet().stream().skip(count - 1).findFirst().get().getValue();
}
বিকল্প বিকল্প
Iterables.get গুগল পেয়ারা থেকে সর্বশেষ। এটি তালিকাগুলি এবং সোর্টার্ডসেটের জন্যও কিছু অপ্টিমাইজেশন রয়েছে
public static String FindLasstEntryWithGuavaIterable() {
return Iterables.getLast(linkedmap.entrySet()).getValue();
}
এখানে সম্পূর্ণ উত্স কোড
import com.google.common.collect.Iterables;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.ArrayList;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
public class PerformanceTest {
private static long startTime;
private static long endTime;
private static LinkedHashMap<Integer, String> linkedmap;
public static void main(String[] args) {
linkedmap = new LinkedHashMap<Integer, String>();
linkedmap.put(12, "Chaitanya");
linkedmap.put(2, "Rahul");
linkedmap.put(7, "Singh");
linkedmap.put(49, "Ajeet");
linkedmap.put(76, "Anuj");
//call a useless action so that the caching occurs before the jobs starts.
linkedmap.entrySet().forEach(x -> {});
startTime = System.nanoTime();
FindLasstEntryWithArrayListMethod();
endTime = System.nanoTime();
System.out.println("FindLasstEntryWithArrayListMethod : " + "took " + new BigDecimal((endTime - startTime) / 1000000.000).setScale(3, RoundingMode.CEILING) + " milliseconds");
startTime = System.nanoTime();
FindLasstEntryWithArrayMethod();
endTime = System.nanoTime();
System.out.println("FindLasstEntryWithArrayMethod : " + "took " + new BigDecimal((endTime - startTime) / 1000000.000).setScale(3, RoundingMode.CEILING) + " milliseconds");
startTime = System.nanoTime();
FindLasstEntryWithReduceMethod();
endTime = System.nanoTime();
System.out.println("FindLasstEntryWithReduceMethod : " + "took " + new BigDecimal((endTime - startTime) / 1000000.000).setScale(3, RoundingMode.CEILING) + " milliseconds");
startTime = System.nanoTime();
FindLasstEntryWithSkipFunctionMethod();
endTime = System.nanoTime();
System.out.println("FindLasstEntryWithSkipFunctionMethod : " + "took " + new BigDecimal((endTime - startTime) / 1000000.000).setScale(3, RoundingMode.CEILING) + " milliseconds");
startTime = System.currentTimeMillis();
FindLasstEntryWithGuavaIterable();
endTime = System.currentTimeMillis();
System.out.println("FindLasstEntryWithGuavaIterable : " + "took " + (endTime - startTime) + " milliseconds");
}
public static String FindLasstEntryWithReduceMethod() {
return linkedmap.entrySet().stream().reduce((first, second) -> second).orElse(null).getValue();
}
public static String FindLasstEntryWithSkipFunctionMethod() {
final long count = linkedmap.entrySet().stream().count();
return linkedmap.entrySet().stream().skip(count - 1).findFirst().get().getValue();
}
public static String FindLasstEntryWithGuavaIterable() {
return Iterables.getLast(linkedmap.entrySet()).getValue();
}
public static String FindLasstEntryWithArrayListMethod() {
List<Entry<Integer, String>> entryList = new ArrayList<Map.Entry<Integer, String>>(linkedmap.entrySet());
return entryList.get(entryList.size() - 1).getValue();
}
public static String FindLasstEntryWithArrayMethod() {
return String.valueOf(linkedmap.entrySet().toArray()[linkedmap.size() - 1]);
}
}
প্রতিটি পদ্ধতির পারফরম্যান্স সহ আউটপুট এখানে
FindLasstEntryWithArrayListMethod : took 0.162 milliseconds
FindLasstEntryWithArrayMethod : took 0.025 milliseconds
FindLasstEntryWithReduceMethod : took 2.776 milliseconds
FindLasstEntryWithSkipFunctionMethod : took 3.396 milliseconds
FindLasstEntryWithGuavaIterable : took 11 milliseconds