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 = 5
The 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]);
}
}
}