数组转为集合
第一种方式:使用Arrays类中的asList方法
- 代码演示:
public class Change {
public static void main(String[] args) {
String[] str={"小黄","小王","小丽"};
//调用Arrays类中的asList方法
List<String> list = Arrays.asList(str);
//显示list集合种的内容
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String s = iterator.next();
System.out.print(s);//打印结果为:小黄小王小丽
}
//在集合种添加元素
list.add("小张");
list.remove(1);
}
}
程序结果为:
- 出现异常的原因是:Arrays.asList的方法返回值一个私有静态内部类java.util.Arrays.ArrayList,它并非java.util.ArrayList类。java.util.Arrays.ArrayList类具有 set(),get(),contains()等方法,但是不具有添加add()或删除remove()方法,所以调用add()方法会报错。
第二种方式:使用ArrayList集合的构造器
- 代码演示:
public class Change2 {
public static void main(String[] args) {
String[] str={"小黄","小王","小丽"};
//使用ArrayList集合中的构造器
ArrayList<String> list = new ArrayList<>(Arrays.asList(str));
//显示集合中的内容
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String s = iterator.next();
System.out.print(s);
}
//对集合进行增删操作
list.add("小张");
list.remove("小黄");
System.out.println(list);
}
}
程序结果:
使用Collections的addAll方法(最高效)
- 先建立一个与数组长度相同的集合,然后调用Collections中的addAll方法,把数组中的元素添加到集合中。
- 代码演示:
public class Change3 {
public static void main(String[] args) {
String[] str={"小黄","小王","小丽"};
ArrayList<String> list = new ArrayList(str.length);
Collections.addAll(list,str);
list.add("小李");
System.out.println(list);
}
}
程序结果:
- addAll方法的原码
public static <T> boolean addAll(Collection<? super T> c, T... elements) {
boolean result = false;
for (T element : elements)
result |= c.add(element);
return result;
}
- 可以看出,在进行添加时使用的是位运算,所以计算效率非常高。
集合转为数组
使用Collections中的toArray方法
- 代码演示:
public class Change4 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
//使用Colletions类中的toArray方法
String[] str = (String[]) list.toArray();
System.out.println(str);
}
}
- 此时程序报错:
- 出现错误的原因:
- 因为java中的强制类型转换是针对单个对象才有效果的,而List是多对象的集合,所以将整个List强制转换是不行的。
- 正确的写法:
public class Change4 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Integer[] integers = list.toArray(new Integer[list.size()]);
for(Integer integer:integers){
System.out.println(integer);
}
}
}
使用循环把集合中的数据写入到数组中
- 代码演示:
public class Change5 {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
Integer[] integers = new Integer[list.size()];
for (int i = 0; i < list.size(); i++) {
integers[i]=list.get(i);
}
//输出数组中的信息
for (Integer integer:integers){
System.out.println(integer);
}
}
}