/** List的toArray方法用于将集合转换为数组 但实际上该方法是在Collection中定义的,所以所有的集合都具备这个功能。 其中共有2个方法: Object[] toArray() 一般不用 <T>T[] toArray(T[] a) 常用 其中第二个方法是比较常用的,我们可以传入一个指定类型的数组, 该数组的元素类型应与集合的元素类型一致。返回值则是转换后的数组,该数组会保存集合中所有的元素。 注意: 参数a 的含义为要存储列表中元素的数组的长度,如果它足够大的话则存入到该数组中; 否则为此长度分配一个运行时类型相同的新数组。 案例 将集合List转换为数组,详细要求如下所示: 1) 创建List接口的引用list,使该引用指向ArrayList的实例;将字符串“a”、“b”、“c”放入集合list中。 2) 将集合list转换为数组,并输出数组中的元素。 */ public class ListToArrayDemo { public static void main(String[] args) { /* 案例 将集合List转换为数组 */ //1) 创建List接口的引用list,使该引用指向ArrayList的实例;将字符串“a”、“b”、“c”放入集合list中。 List<String> list = new ArrayList<String>(); list.add("a"); list.add("b"); list.add("c"); //2) 将集合list转换为数组,并输出数组中的元素。 //用第二种方法 String[] toArrayStr = list.toArray(new String[list.size()] ); /*这里注意new String[长度],如果这个长度设定的不够装下集合中的元素,那么系统会 自动新建一个数组,接收这个返回值.但是也尽量不要设定长度,就用list.size就可以了*/ for(String str: toArrayStr){ System.out.print(str + "\t"); // a b c } } }
ArrayToListDemo
/** * 将数组转换为集合 static <T>List<T> asList<T… a> Arrays类中提供了一个静态方法asList,使用该方法我们可以将一个数组转换为对应的List集合。 注意: 1.返回的List集合元素类型由传入的数组元素类型决定 2.返回的List集合,我们不能对其进行增删操作,否则会抛出异常 3.返回的List集合,对其进行修改,会改变对应的原来数组中的元素. 4.想要修改返回的List集合,最好的办法就是复制一个新的集合,脱离和原数组的关系,增删就都可以操作了. 补充1: 我们发现,现在的list所属的是Arrays的内部类,而不是真正的java.util.ArrayList类. 所以就不难理解,为何无法增删,只能修改,并且修改原数组还在改变的原因. 补充2: 所有的集合都支持一个含有Collection类型作为参数的构造方法。该构造方法又称为复制 构造器。可以在创建当前集合的同时包含给定集合中的 所有元素。 案例 将数组转换为List集合,详细要求如下所示: 1) 构建字符串数组strArr,数组元素为“a”、“b”、“c”。 2) 将数组strArr转换为List集合变量list,并输出集合list;然后向list集合中添加元素“d”,运行后查看输出结果。 3) 获取变量list所属的类型的名称。 4) 构建集合list1,使用List的addAll方法将数组转换来的集合添加到list1中。 */ public class ArrayToList { public static void main(String[] args) { /* 案例 将数组转换为List集合 */ //1) 构建字符串数组strArr,数组元素为“a”、“b”、“c”。 String[] strArr = {"a","b","c"}; /*2) 将数组strArr转换为List集合变量list,并输出集合list; 然后向list集合中添加元素“d”,运行后查看输出结果。 */ List<String> list = Arrays.asList(strArr); System.out.println(list); //[a, b, c] // list.add("d"); /* 在添加d元素后,会抛出异常,证明不能在转换后的list中增删元素 * Exception in thread "main" java.lang.UnsupportedOperationException */ //3) 获取变量list所属的类型的名称。 System.out.println(list.getClass().getName()); /*java.util.Arrays$ArrayList 我们发现,现在的list所属的是Arrays的内部类,而不是真正的java.util.ArrayList类. 所以就不难理解,为何无法增删,只能修改,并且修改原数组还在改变的原因. */ //4) 构建集合list1,使用List的addAll方法将数组转换来的集合添加到list1中。 List<String> list1 = new ArrayList<String>(); list1.addAll(list); //复制list的内容 list1.add("d"); System.out.println("list1的内容: "+list1); //list1的内容: [a, b, c, d] //5) 用补充2提到的方法,来复制list1 List<String> list2 = new ArrayList<String>(list1); /*所有的集合都含有一个使用Collection类型作为参数的构造方法,该方法称为复制构造器*/ System.out.println("list2的内容: "+list2); //list2的内容: [a, b, c, d] //同样复制了list的内容 } }
时间: 2024-10-12 07:07:19