Answers:
是的,将转换为是安全ArrayList的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 = 5The method toArray(T[]) in the type ArrayList<Character> is not applicable for the arguments (char[])
                    这是最好的方法(恕我直言)。
List<String> myArrayList = new ArrayList<String>();
//.....
String[] myArray = myArrayList.toArray(new String[myArrayList.size()]);此代码也可以:
String[] myArray = myArrayList.toArray(new String[0]);但是效果不佳:字符串数组创建了两次:第一次创建零长度数组,然后创建,填充和返回实际大小的数组。因此,如果您知道所需的大小(从list.size()),则应创建足够大的数组以放置所有元素。在这种情况下,它不会重新分配。
new String[0]和之间的区别的很好的解释new String[size]
                    new String[0]实际上更有效。shipilev.net/blog/2016/arrays-wisdom-ancients
                    ArrayList<String> myArrayList = new ArrayList<String>();
...
String[] myArray = myArrayList.toArray(new String[0]);这是否是一个“好主意”,实际上取决于您的用例。
Object
                    假设v是ArrayList:
String[] x = (String[]) v.toArray(new String[0]);有两种样式可以将集合转换为数组:使用预定义大小的数组(如c.toArray(new String[c.size()]))或使用空数组(如c.toArray(new String[0]))。在较早的Java版本中,建议使用预先设置大小的数组,因为创建适当大小的数组所需的反射调用非常慢。但是,由于OpenJDK 6的更新较晚,因此此调用变得很有趣,与空大小版本相比,空数组版本的性能相同,有时甚至更好。此外,传递大小预定义的数组对于并发或同步集合很危险,因为在size和toArray调用之间可能会发生数据争用,如果在操作过程中同时缩小了集合,则可能导致数组末尾出现额外的null。您可以遵循统一样式:使用空数组(在现代Java中建议使用)或使用预定大小的数组(在较早的Java版本或基于非HotSpot的JVM中可能更快)。
这是较新的Java(> Java 6)的推荐用法
String[] myArray = myArrayList.toArray(new String[0]);在较早的Java版本中,建议使用预先设置大小的数组,因为创建适当大小的数组所需的反射调用非常慢。但是,由于OpenJDK 6的更新较晚,因此该调用变得很有趣,与空大小版本相比,空数组版本的性能相同,有时甚至更好。此外,传递大小预定义的数组对于并发或同步集合很危险,因为在size和toArray调用之间可能会发生数据争用,如果在操作过程中同时缩小了集合,则可能导致数组末尾出现额外的null。此检查允许遵循统一的样式:使用空数组(在现代Java中建议使用)或使用预定大小的数组(在较早的Java版本或基于非HotSpot的JVM中可能更快)。
Collection接口包括toArray()方法,用于将新集合转换为数组。此方法有两种形式。no参数版本将在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
一种方法是在第二个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]);
       }
   }    
}