2010-12-27 10 views
54

मैं अपनी मुख्य जावा फ़ाइल में बनाए गए सरणी से आइटम जोड़ने, हटाने और संदर्भित करने का प्रयास कर रहा हूं, लेकिन मुझे सही वाक्यविन्यास को समझने में परेशानी हो रही है। क्रियालेख में उनके पास सरणी में आइटम जोड़ने और निकालने के लिए पुश() और पॉप() है, क्या एंड्रॉइड में समतुल्य है?सरणी के लिए पुश() या पॉप() के बराबर है?

+1

आप सरणी किस तरह का है? क्या आप हमें कुछ कोड दिखा सकते हैं? – EboMike

+0

int [] intArray = नया int {2, 3, 5, 8, 13}; मैं intArray [3], या सभी वस्तुओं को एक समय में कैसे संदर्भित करूं? – clayton33

उत्तर

21

उपयोग सरणी सूची http://developer.android.com/reference/java/util/ArrayList.html

+23

कोई विचार नहीं कि यह स्वीकार्य उत्तर क्यों है। सही उत्तर java.util.ArrayDeque या java.util.LinkedList – Rotem

+0

और यहां तक ​​कि upvoter के लिए .. faceplam: | – Aman

5

आप लिंक्डलिस्ट का उपयोग कर सकते हैं। इसमें विधियों, मतदान और प्रस्ताव हैं।

24

जावा में एक सरणी एक निश्चित आकार (initialisation के बाद) है, जिसका अर्थ है कि आप एक सरणी से आइटम नहीं जोड़ या निकाल सकते हैं।

int[] i = new int[10]; 

ऊपर टुकड़ा मतलब है कि पूर्णांकों की सरणी से 10 की लंबाई यह एक ग्यारहवें पूर्णांक जोड़ने संभव नहीं है, बिना है पुन: असाइन कर, एक नई सरणी के संदर्भ में निम्नलिखित की तरह:

int[] i = new int[11]; 

जावा में पैकेज java.util में सभी प्रकार की डेटा संरचनाएं होती हैं जो सरणी-जैसे संग्रहों से आइटम जोड़ने और निकालने में संभाल सकती हैं। क्लासिक डेटा स्ट्रक्चर स्टैक में पुश और पॉप के लिए विधियां हैं।

+6

अच्छा स्पष्टीकरण, हालांकि ध्यान रखें कि स्टैक उस वर्ग का महान नहीं है क्योंकि यह वेक्टर से विरासत में मिलता है, और जैसा कि पूरी तरह से सिंक्रनाइज़ किया जाता है।तो जब तक आपको सिंक्रनाइज़ेशन की आवश्यकता न हो, तब तक ऐरेलिस्ट या लिंक्डलिस्ट संभवतः बेहतर विकल्प होगा। –

14

उन लोगों के लिए जिनके पास Collection एस (उदाहरण के लिए ArrayList) के साथ सरणी को प्रतिस्थापित करने के लिए कोड को दोबारा करने के लिए समय नहीं है, तो एक विकल्प है। Collection रों के विपरीत, एक सरणी की लंबाई नहीं बदला जा सकता है, लेकिन सरणी बदला जा सकता है, इस तरह:

array = push(array, item); 

कमियां

  • पूरे सरणी हर बार कॉपी किया है कि कर रहे हैं आप पुश, और
  • मूल सरणी Object परिवर्तित नहीं है, इसलिए आपको चर के रूप में चर को अद्यतन करना होगा।

यहाँ String के लिए push विधि है:

private static String[] push(String[] array, String push) { 
    String[] longer = new String[array.length + 1]; 
    for (int i = 0; i < array.length; i++) 
     longer[i] = array[i]; 
    longer[array.length] = push; 
    return longer; 
} 

यह वैकल्पिक है और अधिक कुशल, (आप एक से अधिक push तरीकों, String के लिए एक, int के लिए एक, आदि बना सकते हैं) कम & कठिन पढ़ने के लिए:

private static String[] push(String[] array, String push) { 
    String[] longer = new String[array.length + 1]; 
    System.arraycopy(array, 0, longer, 0, array.length); 
    longer[array.length] = push; 
    return longer; 
} 
+4

मैं दृढ़ता से इस विधि के उपयोग को हतोत्साहित करता हूं। वास्तव में सरल और छोटे सरणी के लिए यह समस्याएं लागू नहीं करेगा, लेकिन एक मध्यम या भारी सरणी के लिए यह हर बार एक आइटम जोड़ा जाने पर सिस्टम को सरणी पर फिर से चालू करने का कारण बनता है। यदि आपके पास 100+ आइटम सरणी है और आप 3 आइटम जोड़ना चाहते हैं, तो यह 303 संचालन करेगा। – Panthro

1

Underscore-java पुस्तकालय में विधियों पुश (मान), पॉप(), शिफ्ट() और unshift (मान) शामिल हैं।

कोड उदाहरण:

import com.github.underscore.$: 
import java.util.*; 

public class Main { 
    public static void main(String[] args) { 
     List<String> strings = Arrays.asList("one", "two", " three"); 
     List<String> newStrings = $.push(strings, "four", "five"); 
     // ["one", " two", "three", " four", "five"] 
     String newPopString = $.pop(strings).fst(); 
     // " three" 
     String newShiftString = $.shift(strings).fst(); 
     // "one" 
     List<String> newUnshiftStrings = $.unshift(strings, "four", "five"); 
     // ["four", " five", "one", " two", "three"] 
    } 
} 
संबंधित मुद्दे