मुझे कुछ इस तरह की आवश्यकता थी, इसलिए मैं कॉमन्स संग्रह में गया और इसका इस्तेमाल किया SetUniqueList
, लेकिन जब मैंने कुछ प्रदर्शन परीक्षण चलाए, तो मैंने पाया कि यदि मैं एक का उपयोग करना चाहता हूं Set
और एक विधि Array
का उपयोग करना चाहता हूं तो यह मामले की तुलना में अनुकूलित नहीं लगता है Set.toArray()
।
SetUniqueTest
ले लिया 1 समय: 20 पार भरने के लिए और उसके बाद 1,00,000 स्ट्रिंग्स अन्य कार्यान्वयन है, जो एक बड़ी बात अंतर नहीं है की तुलना में।
इसलिए, यदि आप प्रदर्शन के बारे में चिंता करते हैं, तो मैं आपको सेट का उपयोग करने की सलाह देता हूं औरSetUniqueList
जब तक आपको वास्तव में तर्क की आवश्यकता नहीं होती है, तब तक उपयोग करने के बजाय एक सरणी प्राप्त करेंSetUniqueList
, फिर आपको अन्य समाधानों की जांच करने की आवश्यकता होगी ...
परीक्षण कोड मुख्य विधि :
public static void main(String[] args) {
SetUniqueList pq = SetUniqueList.decorate(new ArrayList());
Set s = new TreeSet();
long t1 = 0L;
long t2 = 0L;
String t;
t1 = System.nanoTime();
for (int i = 0; i < 200000; i++) {
pq.add("a" + Math.random());
}
while (!pq.isEmpty()) {
t = (String) pq.remove(0);
}
t1 = System.nanoTime() - t1;
t2 = System.nanoTime();
for (int i = 0; i < 200000; i++) {
s.add("a" + Math.random());
}
s.clear();
String[] d = (String[]) s.toArray(new String[0]);
s.clear();
for (int i = 0; i < d.length; i++) {
t = d[i];
}
t2 = System.nanoTime() - t2;
System.out.println((double)t1/1000/1000/1000);
System.out.println((double)t2/1000/1000/1000);
System.out.println(((double) t1) / t2);
}
सादर,
मोहम्मद स्लीम