2013-11-25 9 views
35

उदाहरण के लिए करने के लिए सरणी सूची में उस विशिष्ट आइटम ले जाने के लिए कैसे: एक सूचीपहला आइटम

ABCDE

को देखते हुए सी, के लिए

CABDE स्विच

सूचना है कि सरणी आकार बदल जाएगा , कुछ आइटम रन टाइम

Collections.swap(url, url.indexOf(itemToMove), 0); 

इस राज्यमैन को हटाया जा सकता है टी काम नहीं कर रहा है क्योंकि यह सी बी ए डी ई नहीं सी ए बी डी ई, इसे कैसे ठीक करें?

धन्यवाद।

+0

यहां यूआरएल क्या है? –

उत्तर

58

क्या आप चाहते हैं एक ArrayList में एक बहुत ही महंगा ऑपरेशन है। इसे सूची की शुरुआत और C के स्थान के बीच प्रत्येक तत्व को स्थानांतरित करने की आवश्यकता है।

हालांकि, अगर आप वास्तव में इसे क्या करना चाहते हैं:

int index = url.indexOf(itemToMove); 
url.remove(index); 
url.add(0, itemToMove); 

यह आपके लिए एक लगातार आपरेशन है, और रैंडम एक्सेस बल्कि लगातार कम है, तो आप इस तरह के LinkedList के रूप में एक और List कार्यान्वयन के लिए बदलने पर विचार हो सकता है। यदि आप तत्वों के आदेश के बारे में चिंतित हैं तो आपको यह भी विचार करना चाहिए कि कोई सूची सही डेटा संरचना है या नहीं।

+3

यदि गति एक मानदंड है, तो शायद आपको http://commons.apache.org/proper/commons-collections/javadocs/api-3.2.1/org/apache/commons/collections/list/TreeList पर भी देखना चाहिए। एचटीएमएल –

9

उपयोग करें: निकालें: ArraylistObj.remove(object); विशिष्ट स्थिति में जोड़ना: ArrayListObj.add(position, Object);

अपने कोड उपयोग के अनुसार इस:

url.remove("C"); 
url.add(0,"C"); 
+1

क्या यह सूची के आकार में वृद्धि नहीं करेगा? –

+0

फिर url.remove ("सी") का उपयोग कर सूची से तत्व को हटा दें; और url.add (0, "सी") का उपयोग कर शून्य स्थिति पर तत्व जोड़ें; –

3

समस्या है, तो आप एक साथ सी स्वैप तो ABCDE CBAD ई हो जाता है

आप कुछ इस तरह की कोशिश कर सकते:

url.remove(itemToMove); 
url.add(0, itemToMove); 

या अगर url एक LinkedList है:

url.remove(itemToMove); 
url.addFirst(itemToMove); 
0

यह कोड आपको सूची के आकार को बढ़ाने की अनुमति देगा, और सूची के क्रमशः परेशान करने के बिना तत्वों को सम्मिलित करेगा

private void insert(double price){ 
    for(int i = 0; i < keys.size(); i++){ 
     if(price > keys.get(i)){ 
      keys.add(null); 
      for(int j = keys.size()-1; j > i; j--){ 
       Collections.swap(keys, j, j-1); 
      } 
      keys.add(price); 
      Collections.swap(keys, keys.size()-1, i); 
      keys.remove(keys.size()-1); 
      return; 
     } 
    } 
    keys.add(price); 
} 
0

माना कि आप एक सरणी है:

String[] arrayOne = new String[]{"A","B","C","D","E"}; 

अब आप सूचकांक 0 पर C जगह अन्य चर

String characterC = arrayOne[2]; 

में C मिल अब निम्नलिखित की तरह पाश चलाना चाहते हैं:

for (int i = (2 - 1); i >= 0; i--) { 

      arrayOne[i+1] = arrayOne[i]; 
     } 

2C की अनुक्रमणिका है।अब पर ऊपर पाश की 0

arrayOne[0] = characterC; 

परिणाम उदाहरण के लिए सूचकांक में C डालने कि तरह होगा:

arrayOne: {"C","A","B","D","E"} 

अंत में, हम अपने लक्ष्य को प्राप्त करने।

1

एक और समाधान, बस 0 से indexOf(itemToMove) पर स्वैपिंग रखें।

यह मेरा Kotlin संस्करण है:

val list = mutableListOf('A', 'B', 'C', 'D', 'E') 
(0..list.indexOf('C')).forEach { 
    Collections.swap(list, 0, it) 
} 

खेद है कि मैं जावा के साथ अपरिचित हूँ, लेकिन एक छोटे से Kotlin सीखा है। लेकिन एल्गोरिदम एक ही है।

संबंधित मुद्दे