आदिम int की सूची बनाएँ?


97

निम्नलिखित में जावा में आदिम इंट या किसी भी आदिम की सूची बनाने का एक तरीका है?

List<int> myList = new ArrayList<int>();

ऐसा लगता है कि मैं कर सकता हूं List myList = new ArrayList();

और इस सूची में "int" जोड़ें। लेकिन तब इसका मतलब होगा कि मैं इस सूची में कुछ भी जोड़ सकता हूं।

क्या मेरा एकमात्र विकल्प है, int की एक सरणी बनाना और इसे सूची में परिवर्तित करना या पूर्णांक वस्तुओं की सूची बनाना?


यदि प्रदर्शन आपकी चिंता है, तो ट्राव को मदद करनी चाहिए।
assylias

एक मूल सरणी का उपयोग करके एक सूची बनाना संभव है, लेकिन आपको शुरू करने के लिए सरणी के आकार को जानना होगा, और आप संग्रह ऑब्जेक्ट के साथ आने वाली अन्य कार्यक्षमता को खो देंगे। लेकिन आप कुछ ऐसा कर सकते हैं: int [] array = नया int [10];
टेलर

जवाबों:


144

जावा में किसी भी चर का प्रकार या तो एक आदिम प्रकार या एक संदर्भ प्रकार है। सामान्य प्रकार के तर्क संदर्भ प्रकार होने चाहिए। चूंकि प्राइमिटिव्स का विस्तार नहीं होता है इसलिए Objectउन्हें पैरामीट्रिक प्रकार के लिए सामान्य प्रकार के तर्कों के रूप में उपयोग नहीं किया जा सकता है।

इसके बजाय उस Integerवर्ग का उपयोग करें जो इसके लिए एक आवरण है int:

List<Integer> list = new ArrayList<Integer>();

यदि आपका जावा 7 का उपयोग कर आप डायमंड ऑपरेटर का उपयोग करके इस घोषणा को सरल बना सकते हैं:

List<Integer> list = new ArrayList<>();

जावा में ऑटोबॉक्सिंग के साथ आदिम प्रकार intएक Integerआवश्यक हो जाएगा ।

ऑटोबॉक्सिंग एक स्वचालित रूपांतरण है जो जावा कंपाइलर आदिम प्रकारों और उनके संबंधित ऑब्जेक्ट रैपर वर्गों के बीच बनाता है।

तो निम्नलिखित मान्य है:

int myInt = 1;
List<Integer> list = new ArrayList<Integer>();
list.add(myInt);

System.out.println(list.get(0)); //prints 1

1
तो JTable पद्धति सेटिसाइलेटेड इंडिसेस एक गैर-समझ है: docs.oracle.com/javase/8/docs/api/javax/swing/…
vdolez

25

कोई भी संग्रह नहीं है जिसमें जावा संग्रह फ्रेमवर्क का उपयोग किए जाने पर आदिम प्रकार शामिल हो सकते हैं।

हालांकि, अन्य जावा संग्रह हैं जो आदिम प्रकार का समर्थन करते हैं, जैसे: ट्रोव , कोल्ट , फास्टटिल , अमरूद

जब ट्रोव लाइब्रेरी का उपयोग किया जाता है, तो इन्टल्स के साथ एक सरणीसूची निम्नलिखित का एक उदाहरण है:

 TIntArrayList list= new TIntArrayList();

इस सूची का प्रदर्शन, जब जावा कलेक्शंस से इंटर्जेस्ट ऑफ इंटर्ज़िस्ट की तुलना में बेहतर है, क्योंकि संबंधित एंगर व्रेपर क्लास को ऑटोबॉक्सिंग / अनबॉक्सिंग की आवश्यकता नहीं है।


1
मुझे अमरूद में एक आदिम संग्रह कार्यान्वयन नहीं मिला। क्या आप कृपया एक लिंक प्रदान कर सकते हैं?
१५

9

क्या जावा में आदिम इंट या किसी भी आदिम की सूची बनाने का एक तरीका है

नहीं, तुम नहीं कर सकते। आप केवल संदर्भ प्रकार, जैसे की सूची बना सकते हैं Integer, Stringया अपने कस्टम प्रकार।

ऐसा लगता है कि मैं List myList = new ArrayList();इस सूची में "int" कर सकता हूं और जोड़ सकता हूं ।

जब आप intइस सूची में जोड़ते हैं , तो यह स्वचालित रूप से Integerआवरण प्रकार से बॉक्सिंग किया जाता है । लेकिन नए कोड में कच्चे टाइप सूचियों का उपयोग करना या उस मामले के लिए किसी भी सामान्य प्रकार के लिए एक बुरा विचार है ।

मैं इस सूची में कुछ भी जोड़ सकता हूं।

बेशक, यह कच्चे प्रकार का उपयोग करने का लाभ है। आपके पास कैट , डॉग , टाइगर , डायनासोर सभी एक कंटेनर में हो सकते हैं।

मेरा एकमात्र विकल्प है, इंट का सरणी बनाना और इसे सूची में परिवर्तित करना

उस मामले में भी, आपको एक List<Integer>ही मिलेगा । ऐसा कोई तरीका नहीं है जिससे आप बना सकते हैं List<int>या कोई आदिम कर सकते हैं ।

आप वैसे भी परेशान नहीं होना चाहिए। List<Integer>आप में भी एक intआदिम प्रकार जोड़ सकते हैं । यह स्वचालित रूप से बॉक्सिंग किया जाएगा, नीचे दिए गए उदाहरण के रूप में:

List<Integer> list = new ArrayList<Integer>();
list.add(5);

कच्चे प्रकार की अच्छी चर्चा।
केविन बोवर्सॉक्स

दरअसल, स्पष्ट होने के लिए, आप केवल एक मूल सरणी का उपयोग करके आदिम प्रकारों के साथ एक सूची बना सकते हैं। int [] सरणी = नया int [10];
टेलर

1
@ टेलर लेकिन यह गतिशील रूप से बढ़ती हुई सूची नहीं होगी। वह एक सरणी है। और मुझे लगता है कि ओपी इसके बारे में पहले से ही जानता होगा।
रोहित जैन

6

अपाचे ढांचे से ArrayIntList का उपयोग करने का प्रयास करें। यह एक सरणी सूची की तरह ही काम करता है, सिवाय इसके कि यह आदिम int पकड़ सकता है।

अधिक जानकारी यहाँ -

https://commons.apache.org/dormant/commons-primitives/apidocs/org/apache/commons/collections/primitives/ArrayIntList.html


5

यह नहीं हो सकता। जावा विनिर्देश जेनेरिक में प्राइमेटिव के उपयोग को मना करता है। हालांकि, अगर आप बना सकते हैं ArrayList<Integer>और कॉल add(i)करता है, तो iमुक्केबाजी के लिए एक पूर्णांक धन्यवाद है।


4

आप ग्रहण संग्रह में उपलब्ध आदिम संग्रह का उपयोग कर सकते हैं । ग्रहण संग्रह है List, Set, Bagऔर Mapसभी पुरातन के लिए। आदिम संग्रह में तत्वों को आदिम के रूप में बनाए रखा जाता है और कोई बॉक्सिंग नहीं होती है।

आप इस तरह एक Intlist को इनिशियलाइज़ कर सकते हैं :

MutableIntList ints = IntLists.mutable.empty();

आप एक से परिवर्तित कर सकते हैं List<Integer>करने के लिए IntListइस तरह:

List<Integer> integers = new ArrayList<>();
MutableIntList ints = ListAdapter.adapt(integers).collectInt(each -> each);

नोट: मैं ग्रहण संग्रह में योगदानकर्ता हूं।


3

संग्रह जेनेरिक का उपयोग करते हैं जो या तो संदर्भ प्रकार या wilcards का समर्थन करते हैं । आप हालांकि एक Integerआवरण का उपयोग कर सकते हैं

List<Integer> list = new ArrayList<>();

0

आप एंड्रॉयड विकास के लिए जावा का उपयोग करते हैं, इसका इस्तेमाल करने की सिफारिश की है SparseIntArrayके बीच autoboxing को रोकने के लिए intऔर Integer

आप एंड्रॉइड डेवलपर्स डॉक्यूमेंटSparseIntArray में अधिक जानकारी पा सकते हैं और एंड्रॉइड पर ऑटोबॉक्सिंग के लिए एक अच्छी व्याख्या यहां दिए गए लिंक विवरण में दर्ज कर सकते हैं


यह एक मजबूत बयान है। निश्चित रूप SparseIntArrayसे अक्सर एक बेहतर विकल्प होता है, लेकिन जागरूक होने के लिए ट्रेडऑफ होते हैं। "कार्यान्वयन डेटा संरचनाओं के लिए उपयुक्त होने का इरादा नहीं है जिसमें बड़ी संख्या में आइटम हो सकते हैं। यह आम तौर पर एक पारंपरिक हैशपॉप की तुलना में धीमा होता है ..."
एंडी थॉमस

हाँ यह सच है। मेरे द्वारा लिंक किए गए वीडियो में वे इस ट्रेडऑफ को बहुत अच्छा कवर करते हैं। लेकिन ओपी ने उस विशेष संभावना के लिए कहा और मैं बस यह जोड़ना चाहता था कि यह वास्तव में एंड्रॉइड के साथ संभव है और अधिकांश उपयोग के मामलों के लिए भी अनुशंसित है। उस जानकारी को जोड़ने के लिए धन्यवाद!
स्टीफन मेडैक

0

वहाँ एक पूर्णांक [] सरणी को एक इंट [] सरणी में बदलने का एक तरीका है?

जावा कोर पुस्तकालयों से यह सकल चूक मुझे कभी भी काम करने वाली प्रत्येक परियोजना पर बहुत अधिक लगती है। और ट्रोव पुस्तकालय जितना सुविधाजनक हो सकता है, मैं एंड्रॉइड ऐप के लिए एलपीजीएल को पूरा करने के लिए सटीक आवश्यकताओं को पार्स करने में असमर्थ हूं जो कि एलजीपीएल लाइब्रेरी को सांख्यिकीय रूप से जोड़ता है (प्रस्तावना ठीक कहती है, शरीर ऐसा नहीं कहता है)। और यह इन वर्गों को प्राप्त करने के लिए अपाचे स्रोतों को चीरने और छीनने के लिए बस सादा असुविधाजनक है। कोई बेहतर तरीका ज़रूर होगा।


-4

जावा कलेक्शन केवल ऑब्जेक्ट का संग्रह होना चाहिए।

List<Integer> integerList = new ArrayList<Integer>();

इंटेगर आदिम डेटा प्रकार इंट के रैपर वर्ग है।

यहाँ JAVA रैपर कक्षाओं से अधिक !

U सीधे और पूर्णांक से / के रूप में int को बचा सकता है। integerList.add(intValue); int intValue = integerList.get(i)


1
पहली पंक्ति संकलित नहीं होगी और अंतिम दो पंक्तियाँ हर जगह हैं। कृपया ऐसा करने से बचना चाहिए।
the_Martian
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.