数组转为集合
第一种方式:使用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);}}}