2011-11-01 9 views
80

ArrayListからArrayに変換するのが安全かどうかを知りたいですか?ArraylistからArray

1236 
1233 
4566 
4568 
.... 

私は配列リストにそれらを読みたいと、私は配列に変換します は、私はそれぞれの行のテキストファイルの文字列を持っています。それを行うのが賢明ですか法的ですか?

おかげ

+7

あなたはそれが良いアイデアかどうかを伝えるための十分な情報をあなたに提供していません。 –

+5

ArrayListは正常です。私がArrayに変換するために見ることができる唯一の理由は、それが必要なメソッドを呼び出す必要がある場合です。 –

答えて

162

はいit is safe to convert an ArrayList to an Array。それが良いアイデアかどうかは、あなたの意図された使用に依存します。 ArrayListが提供する操作が必要ですか?その場合は、ArrayListのままにしてください。それ以外の変換!それは本当にあなたのユースケースに依存することになり、 "良い考え" だかどうか

ArrayList<Integer> foo = new ArrayList<Integer>(); 
foo.add(1); 
foo.add(1); 
foo.add(2); 
foo.add(3); 
foo.add(5); 
Integer[] bar = foo.toArray(new Integer[foo.size()]); 
System.out.println("bar.length = " + bar.length); 

出力

bar.length = 5 
+0

ArrayListが空の場合はどうなりますか? – ThanosFisherman

+22

それは空です。 – IMustBeSomeone

4
ArrayList<String> myArrayList = new ArrayList<String>(); 
... 
String[] myArray = myArrayList.toArray(new String[0]); 

。 Vを想定し

+0

おかげで、ただ知りたいことがあります:私は配列のサイズを宣言する必要はありませんか? –

+0

JavaDocsはあなたの友人です。渡される配列が小さすぎる場合、新しい配列が返されます。 argsを受け取らないメソッドのもう一つのバージョンは、 'Object'の配列を返します。 –

2

はArrayListのです:

String[] x = (String[]) v.toArray(new String[0]); 
1
ArrayList<String> a = new ArrayList<String>(); 
a.add("test"); 
@SuppressWarnings("unused") 
String[] array = (String[]) a.toArray(); 

あなたは後でそれがArrayListの中で文字列を維持するよりも多くの労力を要するだろう配列を操作する必要がある場合、それはあなたが達成したいかに依存します。また、ArrayListを使ったランダムアクセスもあります。list.get(index);

57

これは最善の方法です(IMHO)。

List<String> myArrayList = new ArrayList<String>(); 
//..... 
String[] myArray = myArrayList.toArray(new String[myArrayList.size()]); 

このコードも動作します:

String[] myArray = myArrayList.toArray(new String[0]); 

しかし、それはあまり効果:文字列配列を二回作成されます:長さゼロの配列が作成された最初の時間は、その後、実際のサイズの配列が作成され、充填返されます。したがって、必要なサイズがわかっている場合(list.size()から)、すべての要素を配置できる大きさの配列を作成する必要があります。この場合、再割り当てされません。

+1

' new String [0] 'と' new String [size] ' – gamliela

0

Collectionインターフェイスには、新しいコレクションを配列に変換するtoArray()メソッドが含まれています。この方法には2つの形式があります。引数なしのバージョンは、コレクションの要素をObject配列に返します。public Object [] toArray()。返された配列は他のデータ型にキャストできません。これは最も簡単なバージョンです。 2番目のバージョンでは、返す配列のデータ型、public Object [] toArray(Object type [])を渡す必要があります。参考のため

public static void main(String[] args) { 
      List<String> l=new ArrayList<String>(); 
      l.add("A"); 
      l.add("B"); 
      l.add("C"); 
      Object arr[]=l.toArray(); 
      for(Object a:arr) 
      { 
       String str=(String)a; 
       System.out.println(str); 
      } 
     } 

、このリンクを参照http://techno-terminal.blogspot.in/2015/11/how-to-obtain-array-from-arraylist.html

0

一つのアプローチは、印刷がループするための第1の内部で行われている第2のforループを追加することであろう。このように:

static String[] SENTENCE; 

public static void main(String []args) throws Exception{ 

    Scanner sentence = new Scanner(new File("assets/blah.txt")); 
    ArrayList<String> sentenceList = new ArrayList<String>(); 

    while (sentence.hasNextLine()) 
    { 
     sentenceList.add(sentence.nextLine()); 
    } 

    sentence.close(); 

    String[] sentenceArray = sentenceList.toArray(new String[sentenceList.size()]); 
    // System.out.println(sentenceArray.length); 
    for (int r=0;r<sentenceArray.length;r++) 
    { 
     SENTENCE = sentenceArray[r].split("(?<=[.!?])\\s*"); //split sentences and store in array 

     for (int i=0;i<SENTENCE.length;i++) 
     { 
      System.out.println("Sentence " + (i+1) + ": " + SENTENCE[i]); 
     } 
    }  

} 
関連する問題