यहाँ वास्तविक समस्या है कि ओपी हमें वास्तविक समस्या नहीं बताया गया है। तो बहुत से लोग डेटा संरचनाओं पर अनुमान लगाते हैं और वास्तव में सोचने के बिना उत्तर पोस्ट करते हैं।
असली लक्षण, ओपी एक टिप्पणी में कहा गया है, कि यह प्रतिलिपि करने के लिए है कि TreeSet एक ArrayList में 700 मि.से लेता है एक TreeSet में तार डाल करने के लिए, और एक और 700 एमएस है। जाहिर है, कार्यक्रम ऐसा नहीं कर रहा है जो ओपी सोचता है, क्योंकि कॉपी को कुछ माइक्रोसेकंडों पर लेना चाहिए। असल में, मेरे प्राचीन थिंकपैड पर चल रहे कार्यक्रम में, केवल 360 मिमी 100,000 यादृच्छिक तार बनाने के लिए लेते हैं, उन्हें ट्रीसेट में डालते हैं, और उस ट्रीसेट को एक ऐरेलिस्ट में कॉपी करते हैं।
उस ने कहा, ओपी ने एक उत्तर (दो बार) चुना है। शायद अगर/ओपी असली समस्या के बारे में सोचने का फैसला करता है, तो SSCCE का यह उदाहरण उपयोगी होगा। यह सीडब्ल्यू है, इसलिए इसे संपादित करने में संकोच न करें।
import java.lang.management.ManagementFactory;
import java.lang.management.ThreadMXBean;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.TreeSet;
public class Microbench
{
public static void main(String[] argv)
throws Exception
{
ThreadMXBean threadBean = ManagementFactory.getThreadMXBean();
long start = threadBean.getCurrentThreadCpuTime();
executeTest();
long finish = threadBean.getCurrentThreadCpuTime();
double elapsed = (finish - start)/1000000.0;
System.out.println(String.format("elapsed time = %7.3f ms", elapsed));
}
private static List<String> executeTest()
{
String[] data = generateRandomStrings(100000);
TreeSet<String> set = new TreeSet<String>();
for (String s : data)
set.add(s);
return new ArrayList<String>(set);
}
private static String[] generateRandomStrings(int size)
{
Random rnd = new Random();
String[] result = new String[size];
for (int ii = 0 ; ii < size ; ii++)
result[ii] = String.valueOf(rnd.nextLong());
return result;
}
}
आप केवल ट्रीसेट का उपयोग क्यों नहीं करते हैं और फिर सॉर्टेडलिस्ट (संग्रह <>) कन्स्ट्रक्टर के साथ अपनी सॉर्टेडलिस्ट बनाएं? सॉर्ट किए गएसेट <> उपकरण संग्रह <> – fge
कुछ भी जो आप कंप्यूटर पर करते हैं "समय लेते हैं।" क्या आपने अपने कार्यक्रम के इस विशेष भाग को माप लिया है और पाया है कि यह * अस्वीकार्य * समय लेता है? और यदि हां, तो आपके मामले में "अनुचित" क्या है? घंटे, सेकंड या मिलीसेकंड? – kdgregory
33082 अभिलेखों ने ऐडल विधि के लिए 710ms लिया, जहां रिकॉर्ड लाखों तक बढ़ा सकते हैं, जिसमें बहुत समय लगता है? ट्रेसेट को भी बनाने के लिए 704ms लग गए, लेकिन यह अनुमति है, लेकिन यह जोड़ लेने के लिए उतना ही समय लगता है, इसलिए मैंने सोचा कि मैं इस लागत को काट सकता हूं और अपना प्रोग्राम तेजी से चला सकता हूं। – cypronmaya