जावा में किसी भी विशिष्ट मान के लिए एक सरणी के सभी तत्वों को इनिशियलाइज़ कैसे करें


108

में C/C++हमारे पास memset()समारोह जो मेरी इच्छा को पूरा लेकिन में कर सकते हैं Javaमैं कैसे एक विशिष्ट मूल्य के सभी तत्वों को प्रारंभ कर सकते हैं? जब भी हम लिखते हैं int[] array=new int[10];, यह आकार 10 के एक सरणी को आरम्भ करता है जिसमें शून्य के बराबर सभी तत्व होते हैं। मैं केवल अपने एक सरणी के लिए इस इनिशियलाइज़ेशन पूर्णांक को बदलना चाहता हूं। यानी मैं एक एरे को इनिशियलाइज़ करना चाहता हूं जिसमें सभी तत्व समान हैं -1। अन्यथा मुझे forआरंभीकरण के ठीक बाद एक लूप लगाना है, जो इंडेक्स से 0लेकर इंडेक्स तक है size-1और उस लूप के अंदर मैं एलिमेंट को असाइन कर रहा हूं -1। नीचे अधिक समझ के लिए कोड है-

    int[] array = new int[10];
    for (int i = 0; i < size; i++) {
        array[i] = -1;
    }

क्या मैं सही जा रहा हूँ? क्या इसके लिए कोई अन्य तरीका है?

जवाबों:


212

यदि यह एक आदिम प्रकार है, तो आप उपयोग कर सकते हैं Arrays.fill():

Arrays.fill(array, -1);

[ संयोग से, memsetC या C ++ में, केवल सरणियों के लिए कोई वास्तविक उपयोग नहीं है char]


17
मैंने स्रोत कोड की जाँच की Arrays.fill()। यह वही काम करता है। public static void fill(int[] a, int val) { for (int i = 0, len = a.length; i < len; i++) a[i] = val; }
रवि जोशी

2
हां। जैसा कि इसे होना चाहिए। हालांकि मुझे संदेह है कि बुनियादी कार्यान्वयन में सुधार के लिए जेआईटी पर्याप्त स्मार्ट हो सकता है।
लुइस वास्समैन

1
मैं असहमत हूं। memsetभी इस्तेमाल किया जा सकता है, और वास्तव में बहुत उपयोगी है, पूर्णांक सरणियों में जब आप के साथ 0या -1डीपी समस्याओं में उदाहरण के लिए भरने की जरूरत है।
Sain atошƒаӽ

@ Sна aошƒаӽ - पोर्टेबल तरीके से नहीं।
ओलिवर चार्ल्सवर्थ

1
सिर्फ एक FYI करें: आप अन्य पूर्णांक आकारों के लिए memset_pattern4, 8 और 16 का उपयोग कर सकते हैं।
जियोवर


5

यह जावा 8 धाराओं के साथ भी संभव है:

int[] a = IntStream.generate(() -> value).limit(count).toArray();

हालांकि, नौकरी करने का सबसे कुशल तरीका नहीं है।


यह गैर-आदिम प्रकारों ( Stream.generate(() -> new Whatever("Hello World", 42)).limit(count).toArray();) के लिए भी काम करेगा , इसलिए Arrays.fill () की तुलना में अधिक लचीला है। दक्षता के बारे में निश्चित नहीं है, हालांकि, जैसा कि आप कहते हैं।
क्रिस्टोफर रिच

3

यदि यह छोटा है तो आप ऐसा कर सकते हैं:

int[] array = {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1};

लेकिन यह सिर्फ कुछ से अधिक के लिए बुरा हो जाता है।

आसान एक forपाश होगा:

  int[] myArray = new int[10];
  for (int i = 0; i < array.length; i++)
       myArray[i] = -1;

संपादित करें: मुझे वह Arrays.fill()विकल्प भी पसंद है जिसका अन्य लोगों ने उल्लेख किया है।


क्या 2-आयामी सरणी को शुरू करने का कोई प्रावधान है? int [a] [] = new int [3] [4]; Arrays.fill (क, -1); ताकि सभी 12 तत्व -1 के साथ सेट हो जाएं।
पूर्णाचंद्र


1

क्या आपने Arrays.fill फ़ंक्शन की कोशिश की है ?


नहीं। मैंने पहले इसका इस्तेमाल नहीं किया था।
रवि जोशी

क्या आप कृपया एक उदाहरण भी दे सकते हैं कि यह कैसा दिख सकता है?
ऐनाडॉन

@ एनाडॉन: स्वीकृत उत्तर देखें जो Arrays.fill फ़ंक्शन दिखाता है।
सैम गोल्डबर्ग

0

आप उपयोग कर सकते हैं Arrays.fill(array, -1)


0

जाहिर है आप Arrays.fill () का उपयोग कर सकते हैं, जिस तरह से आपने इसे किया है वह भी काम करता है।


हां। यहां तक ​​कि सूचकांक के साथ Arrays.fill()एक forलूप का उपयोग करता 0है size-1। उसी तरह, जो मैंने किया। आपके उत्तर के लिए धन्यवाद।
रवि जोशी

0

जावा 8 का उपयोग करना, आप बस का उपयोग कर सकते ncopiesके Collectionsवर्ग:

Object[] arrays = Collections.nCopies(size, object).stream().toArray();

आपके मामले में यह होगा:

Integer[] arrays = Collections.nCopies(10, Integer.valueOf(1)).stream().toArray(Integer[]::new);
.

यहाँ आपके समान मामले का एक विस्तृत जवाब दिया गया है।


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