2009-06-26 45 views

回答

2

通過使用函數對象[]指定者轉換集合到一個數組(對象[]一個)

17

一般而言,沒有很好的方法,因爲Collection s的不能保證具有固定的指數。是的,你可以遍歷它們,這是如何ArrayArray(和其他函數)的工作。但是迭代次序不一定是固定的,如果你想索引到一個普通的集合,你可能做錯了什麼。索引List會更有意義。

46

你不應該。一個Collection避免專門討論索引,因爲它可能對特定集合沒有意義。例如,List意味着某種形式的排序,但Set不會。

Collection<String> myCollection = new HashSet<String>(); 
    myCollection.add("Hello"); 
    myCollection.add("World"); 

    for (String elem : myCollection) { 
     System.out.println("elem = " + elem); 
    } 

    System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]); 

給我:

elem = World 
    elem = Hello 
    myCollection.toArray()[0] = World 

雖然:

myCollection = new ArrayList<String>(); 
    myCollection.add("Hello"); 
    myCollection.add("World"); 

    for (String elem : myCollection) { 
     System.out.println("elem = " + elem); 
    } 

    System.out.println("myCollection.toArray()[0] = " + myCollection.toArray()[0]); 

給我:

elem = Hello 
    elem = World 
    myCollection.toArray()[0] = Hello 

要做到這一點,爲什麼呢?你不能只是迭代集合?

+0

嗨@butterchicken,我的情況是,我用LinkedHashMap中,我得到了鍵集(這是一套)。我發現這個帖子:http://stackoverflow.com/questions/2923856/is-the-order-guaranteed-for-the-return-of-keys-and-values-from-a-linkedhashmap-o that order這一套是有保證的。我應該還是不會嘮叨嗎? – jobbert 2016-01-27 11:43:41

+1

@jobbert你可以絕對迭代它。在這種情況下,你會得到一個`Set`,因爲這是`Map`接口的契約。 – butterchicken 2016-02-04 09:00:46

4

由於集合沒有「索引」或「訂單」的概念,您必須將您的集合包裝在列表中(new ArrayList(c))或使用c.toArray()

14

我同意馬修·富蘭琛的答案,只是想告訴你不能切換到列表(因爲一個圖書館的回報你一個集合)的情況下的選項例子:

List list = new ArrayList(theCollection); 
list.get(5); 

或者

Object[] list2 = theCollection.toArray(); 
doSomethingWith(list[2]); 

如果你知道什麼是泛型,我也可以提供樣本。

編輯:這是另一個問題,原始集合的意圖和語義是什麼。

1

你明確希望List

List接口提供了位置(索引)訪問列表元素的四個方法。列表(像Java數組)是從零開始的。

另外

注意,這些操作可以在時間成比例的一段 實施方式中,索引值執行(LinkedList類,例如)。因此,如果調用者不知道實現,那麼迭代> list中的元素通常更適合索引整個元素。

如果您需要的指數,以修改您的收藏時應注意以下問題列表提供了一個特殊ListIterator,使您獲得指數:

List<String> names = Arrays.asList("Davide", "Francesco", "Angelocola"); 
    ListIterator<String> i = names.listIterator(); 

    while (i.hasNext()) { 
     System.out.format("[%d] %s\n", i.nextIndex(), i.next()); 
    } 
1

這會同樣方便簡單地您的收藏轉換成每當更新列表。但是如果你正在初始化,這就足夠了:

 for(String i : collectionlist){ 
     arraylist.add(i); 
     whateverIntID = arraylist.indexOf(i); 
    } 

開明。

0

使用每個循環...

ArrayList<Character> al=new ArrayList<>(); 

String input="hello"; 

for(int i=0;i<input.length();i++){ 
      al.add(input.charAt(i)); 
     } 

     for (Character ch : al) { 

      System.Out.println(ch) 

} 
相關問題