资讯专栏INFORMATION COLUMN

《Java编程思想》-- 持有对象 -- 添加一组元素

tomlingtm / 2006人阅读

摘要:方法接受一个对象,以及一个数组或是一个用逗号分隔的列表,并将元素添加到中。工作的很好,因为他从第一个参数中了解到了目标类型是什么。

ArrayList.asList() 接受一个数组或是用逗号分隔的元素列表,也可以用可变参数,然后将其转为一个List对象。

Collections.addAll()方法接受一个Collection对象,以及一个数组或是一个用逗号分隔的列表,并将元素添加到Collection中。

public class AddingGroups {

    public static void main(String[] args) {
        Collection collection = new ArrayList(Arrays.asList(1,2,3,4,5));
        Integer[] moreInts = {6, 7, 8, 9, 10};
        collection.addAll(Arrays.asList(moreInts));
        Collections.addAll(collection, 11, 12, 13, 14, 15);
        Collections.addAll(collection, moreInts);
        for (Integer integer : collection) {
            System.out.println(integer);
        }
        System.out.println("--------------------------------------");
        List list = Arrays.asList(16, 17, 18, 19, 20);
        list.set(1, 99);
        for (Integer integer : list) {
            System.out.println(integer);
        }
    }
}

Collection的构造器可以接受另一个Collection,可以使用Arrays.asList()方法作为构造器输入,但是只能接收Collection,所以不太灵活,一般我们可以采用将Arrays.asList()作为参数,然后在调用collection.addAll()方法。

也可以这样:`List list = Arrays.asList(1,2,3,4,5);作为输出,但是这样有个问题就是底层是数组,不能调整大小,如果要使用listadd()或者list.delete()方法就会出现异常。

Arrays.asList()方法的限制对它产生的List类型做了理想的假设,但是没有注意到你对它会赋予什么样的类型,这就会引发一些问题:

class Snow{}
class Powder extends Snow{}
class Light extends Powder{}
class Heavy extends Powder{}
class Crusty extends Snow{}
class Slush extends Snow{}

public class AsListInference {
    public static void main(String[] args) {
        List snow1 = Arrays.asList(
                new Crusty(), new Slush(), new Powder()
        );

        //List snow2 = Arrays.asList(
        //        new Light(), new Heavy()
        //);
        List snow3 = new ArrayList();
        Collections.addAll(snow3, new Light(), new Heavy());
        List snow4 = Arrays.asList(
                new Light(), new Heavy()
        );
    }
}

当视图创建snow2的时候,Arrays.asList()中只有Powder类型,因此它会创建List而不是List

创建snow4的时候就解决了创建snow2的问题,在Arrays.asList()中间岔入了一条线索,他会告诉编译器对于Arrays.asList()产生的List类型,这就是显式类型参数说明。

Collections.addAll()工作的很好,因为他从第一个参数中了解到了目标类型是什么。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/65135.html

相关文章

  • Java编程思想》笔记11.持有对象

    摘要:迭代器通常被成为轻量级对象创建它的代价很小。与迭代器可以用于数组和所有对象,之所以能够工作,是因为继承了接口。 点击进入我的博客 我觉得本章名字改成容器似乎更好理解,持有对象让人感到一头雾水我们需要在任意时刻和任意位置创建任意数量的对象,所以依靠创建命名的引用来持有对象已经满足不了需求。Java可以用数组和其他容器类来(List、Set、Queue、Map)来解决这个问题,不同的容器...

    newtrek 评论0 收藏0
  • Java 持有对象(11)

    摘要:如果一个程序只包含固定数量且其生命周期都是已知的对象,那么这是一个非常简单的程序。 如果一个程序只包含固定数量且其生命周期都是已知的对象,那么这是一个非常简单的程序。 1.泛型和类型安全的容器 通过使用泛型,可以在编译期防止将错误类型的对象放置到容器中. 2.基本概念 Java容器类库的用途是保存对象,并将其划分为两个不同的概念:Collection,Map. Collection...

    summerpxy 评论0 收藏0
  • Java编程思想》--持有对象

    Java是面向对象的语言,对象时Java不可或缺的一个元素,基本数据类型有数组用来存储,那么对象元素有什么存储呢,这就是集合,集合是Java非常重要的一块知识,Java编程思想中的持有对象简述了集合的相关知识,下面简述集合的相关功能: showImg(/img/bVC153); 集合类我们通常称为容器 其实容器只有四种:Map、List、Set和Queue 常用的容器有ArrayList、Lin...

    dinfer 评论0 收藏0
  • Java编程思想》-- 持有对象--基本概念

    摘要:概述容器类类库的用途是保存对象,它分为两个不同的概念这是一个独立的而序列必须按照插入的顺序保存元素不能有重复元素按照排队规则来确定对象产生的顺序由键值对组成的,允许由键查找值,就像字典的目录,根据目录查找内容创建接口的不同形式对象时具体的, 概述 Java容器类类库的用途是保存对象,它分为两个不同的概念: Collection:这是一个独立的而序列 List必须按照插入的顺序保存...

    mayaohua 评论0 收藏0

发表评论

0条评论

tomlingtm

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<