2011-11-01 41 views
80

我想知道是否安全/建议从ArrayList转换为Array? 我有一个文本文件,每一行的字符串:从Arraylist到Array

1236 
1233 
4566 
4568 
.... 

我想将它们读入数组列表,然后我把它转换成数组。这样做是可取的/合法的吗?

谢谢

+7

你*可以*,但你没有给我们足够的信息来告诉你它是不是一个好主意。 –

+5

ArrayLists很好。我可以看到转换为数组的唯一原因是如果您需要调用一个需要它的方法。 –

回答

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]); 

无论是 “好主意” 真的取决于你的使用情况。

+0

谢谢,只是好奇地知道:我不需要声明数组的大小? –

+0

JavaDocs是你的朋友。如果传入的数组太小,则返回新数组。不带参数的方法的另一个版本返回一个'Object'的数组'' –

2

假设v是一个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

这是最好的方法(恕我直言)。

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()方法,用于将新集合转换为数组。这种方法有两种形式。无参数版本将返回Object数组中的集合元素:public Object [] toArray()。返回的数组不能转换为任何其他数据类型。这是最简单的版本。第二个版本要求您传入要返回的数组的数据类型: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

一种方法是添加第二个for循环,其中被第一内部完成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]); 
     } 
    }  

}