繁体   English   中英

如何将 ArrayList 转换为 Array

[英]How to convert ArrayList to Array

我有一个Person

 public class Person 
        {
          private int age;
          private String first;
          private boolean valid;
        }

我创建了一个Person对象的ArrayList

ArrayList<Person> valid = new ArrayList<Person>();
        for(Person p : in)
        {
         valid.add(p);
        }

现在我想把这个ArrayList转换成一个数组; 我试过这个:

Person[] people = (Person[]) valid.toArray();

但这是抛出异常

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Lcom.net.Person;

你必须做这样的事情

Person[] people = valid.toArray(new Person[valid.size()]);

您不能将 Object[] 转换为 Person[]。 toArray 方法需要返回正确的类型。 该方法有一个重载版本,它采用您的类型数组。

Person[] people = valid.toArray(new Person[valid.size()]);

http://docs.oracle.com/javase/7/docs/api/java/util/Collection.html#toArray(T[])

你可以尝试这样的事情:

Person[] people = valid.toArray(new Person[valid.size()]);

正如您在 Javadocs 中看到的, List.toArray()返回一个Object[] ,因此列表的通用类型信息丢失了。 这就是为什么你的演员表不起作用。

如果您需要保留通用信息,则必须使用替代的toArray()方法,该方法采用所需类型的数组(例如,因为您可能想要将List<String>转换为List<CharSequence>等在)。

您需要做的就是传递所需类型的空数组,例如:

list.toArray(new Person[]{});

然而,这有点浪费,因为它强制toArray()方法在运行时构造一个适当大小的新数组(通过反射)。 相反,如果您传入一个已经足够大的数组,它将重用该数组,避免反射和额外分配。

list.toArray(new Person[list.size()]);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM