ArrayToListDemo 数组和List之间的互相转换 2个Demo

/**
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的内容
    }
}

 

posted @ 2016-04-30 14:54  安仔80  阅读(339)  评论(0编辑  收藏  举报