在编码中,经常会用到两种存储结构之间的转换,而对于存储数据来说,在list和array之间转换也较为频繁,这里整理几种常用方法,但归根到底,还是API里的方法:
1. List转换成Array
List里有两个方法:
Object[] toArray();
<T> T[] toArray(T[] a);
看方法签名也就知道了,两个不同之处就是带有范型的方法具有运行时类型确定的特性,而前一个只能返回Object[],在需要的时候需要强制转换,简单吧!
<T> T[] toArray(T[] a);在转换时,如果a的大小小于list的大小,则会建一个新的数组,否则则用a~
根据API的说法,toArray()和toArray(new Object[0])效果是一样的。
下面来个例子:
public class ListToArray {
public static void main(String[] args) {
ListToArray x = new ListToArray();
List<User> users = new ArrayList<User>();
User user1 = x.new User("zhangsan", 20);
User user2 = x.new User("Lisi", 25);
users.add(user1);
users.add(user2);
User[] userArray = users.toArray(new User[0]);
userArray[0].setName("Modi");
System.out.println(userArray[0]);//Name: Modi; Age: 20
System.out.println(users.get(0));//Name: Modi; Age: 20
List<String> list = new ArrayList<String>();
list.add("fisrt");
list.add("second");
list.toArray();//Object[]
list.toArray(new String[0]);//String[]
String str[] = list.toArray(new String[] {});
String str2[] = new String[1];
list.toArray(str2);
System.err.println(str2[0]);//null
String str3[] = new String[2];
list.toArray(str3);
System.err.println(str3[0]);//first
System.out.println(str.length);
}
public class User {
private String name;
private int age;
public User(String name, int age) {
this.name = name;
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
@Override
public String toString() {
return "Name: " + name + "; Age: " + age;
}
}
}
2. Array转换为List
public static <T> List<T> asList(T... a) ;
给个示例:
public class ArrayToList {
public static void main(String[] args) {
List<String> stooges = Arrays.asList("Larry", "Moe", "Curly");
for(String s:stooges) {
System.out.print(s+"\t");
}
System.out.println();
String[] other = new String[5];
for(int i=75;i>72;i--) {
other[75-i]=(char)i+"";
}
List<String> list = Arrays.asList(other);
for(String s:list) {
System.out.print(s+"\t");
}
}
}