2012-12-06 13 views
5

मुझे ऐसी सूची बनाने की आवश्यकता है जो दो कॉलम {int, स्ट्रिंग} रिकॉर्ड करे। मुझे लगता है कि ऐरेलिस्टिस्ट की जरूरत है, लेकिन मुझे इसके चारों ओर अपना सिर नहीं मिल सकता है। मैंने स्ट्रिंग्स को डेटाबेस से खींच लिया और int इंडेक्स वैल्यू है जिसे मुझे बाद में तारों की स्थिति की पहचान करने की आवश्यकता है।दो कॉलम सरणीसूची को कैसे प्रारंभ करें?

List<List<String>> strArray = ArrayList<List<String>>;

तो मैं strArray.add की तरह कुछ कर सकता है()।() प्रत्येक पंक्ति मैं डेटाबेस से खींच के लिए जोड़ सकता हूँ?

+1

यदि आईडी अद्वितीय हैं तो हैशैप हैश मैप <इंटीजर, स्ट्रिंग> अन्यथा एक नई कक्षा बनाएं जो सूची –

उत्तर

13

मुझे लगता है कि आप कुंजी और String मूल्य के रूप में के रूप में int के साथ एक HashMap का उपयोग करना चाहिए अगर आपके int मान अनन्य होने जा रहे हैं।

Map<Integer,String> myMap = new HashMap<Integer,String>(); 
myMap.put(1,"ABC"); 

ध्यान दें कि के रूप में Map है एक संग्रह और जावा संग्रह int तरह आदिम स्टोर नहीं करते, वे वस्तुओं की दुकान तो आप अपने int मूल्यों के लिए Integer आवरण वर्ग का उपयोग करने के लिए है।

इस लिंक का संदर्भ लें Why can Java Collections not directly store Primitives types?

+0

मुझे पहले हैश मैप के बारे में वास्तव में पता नहीं था, लेकिन मुझे लगता है कि बीमार इसका इस्तेमाल करते हैं, धन्यवाद !! – tozhan

0

मुझे लगता है कि आप कक्षा में int और स्ट्रिंग को लपेट सकते हैं, फिर कक्षा वस्तुओं को सूची में डाल दें।

0

मानचित्र एक ऐसा ऑब्जेक्ट है जो मानों को कुंजी के लिए मानचित्र करता है। एक मानचित्र में डुप्लिकेट कुंजी नहीं हो सकती है; प्रत्येक कुंजी अधिकतम एक मूल्य पर मैप कर सकती है।

मुझे लगता है कि अगर आप Map<Integer,String> का उपयोग जहां key(Integer) सूचकांक जो String मूल्य की ओर इशारा करते जाएगा होगा बेहतर होगा।

Map<Integer,String> map = new HashMap<Integer,String>(); 
map.put(1,"str1"); 
map.put(2,"str2"); 
... 
+0

को पूर्णांक स्ट्रिंग संयोजन के लिए स्पैस सरणी का उपयोग कर सकती है। –

14

एक और दृष्टिकोण एक कस्टम वस्तु बनाने के लिए होगा:

Class CustomObject { 
    int value1; 
    String value2; 

    CustomObject(int v1, String v2) { 
     value1 = v1; 
     value2 = v2; 
    } 
} 

और फिर इसका इस्तेमाल:

List<CustomObject> myList = new ArrayList<CustomObject>(); 
CustomObject o1 = new CustomObject(1, "one"); 
myList.add(o1); 
// etc. 

आप int मान अद्वितीय हैं और अगर चाहते हैं उन्हें कुंजी पर विचार करने के लिए, Map काम करेगा जैसा कि अन्य ने सुझाव दिया है।

2

तुम सिर्फ दो मूल्यों की जरूरत है आप अपनी आईडी तो देशी Pair वर्ग

List<Pair> mPairs = new ArrayList<Pair>(); 

Pair pair = new Pair(123,"your string"); 
mPairs.add(pair); 

यह एक अच्छा निर्णय यदि आप int मान अनन्य नहीं हैं हो जाएगा और इसलिए आप उपयोग नहीं कर सकते HashMap

1

उपयोग कर सकते हैं अद्वितीय नहीं हैं, तब भी आप मानचित्र का उपयोग कर सकते हैं:

Map<Integer, String> map = new IdentityHashMap<Integer, String>(); 
map.put(new Integer(1), "string"); 

IdentityHashMap -, प्रत्येक वस्तु के लिए देशी hashCode implemetation उपयोग करें ताकि आप अद्वितीय आईडी की जरूरत नहीं है, ख क्योंकि आपको ऑपरेटर 'नया' के माध्यम से सभी इंटीजर बनाना होगा, और ऑटोबॉक्सिंग का उपयोग न करें, क्योंकि cache mechanism है।

इसके अलावा JVM पैरामीटर भी है, जो कैश आकार को नियंत्रित करता है '-XX: AutoBoxCacheMax ='। लेकिन इस पैरामीटर का उपयोग करके आप कैश को अक्षम नहीं कर सकते हैं, अगर आप शून्य पर आकार सेट करते हैं, तो कैश इसे अनदेखा कर देगा और डिफ़ॉल्ट का उपयोग करेगा: [-128; 127]। यह पैरामीटर केवल इंटीग्रर्स के लिए है, लांग के लिए ऐसा कोई पैरामीटर नहीं है।

अद्यतन इसके अलावा गैर अद्वितीय चाबी के लिए आप मल्टीमैप किसी प्रकार का इस्तेमाल कर सकते हैं: मानचित्र> नक्शा

nonunique कुंजी के साथ उस में

और दुकान अपने मान:

map.put(1, new ArrayList<String>()); 
map.get(1).add("value1"); 
map.get(1).add("value2"); 

आप उपयोग कर सकते हैं HashMap उदाहरण के लिए इसके लिए।

इसके अलावा आप Google संग्रह में मल्टीमैप कार्यान्वयन भी ढूंढ सकते हैं: 'guava'।