Java集合基本概念及元素添加

  Java容器类类库的用途是"保存对象", 并将其划分为两个不一样的概念:java

  (1)Collection: 一个独立元素的序列, 这些元素都服从一条或多条规则. List必须按照插入的顺序保存元素, 而Set不能有重复元素. Queue按照排队规则来肯定对象产生的顺序(一般与它们被插入的顺序相同)编程

  (2)Map: 一组成对的"键值对"对象, 容许你使用键来查找值, 它也被称为"关联数组", 由于它将某些对象与另一些对象关联在了一块儿, 或者被称为"字典", 由于你可使用键对象来查找值对象, 就像在字典中使用单词来定义同样. Map是强大的编程工具.数组

 

  在java.util包中的Arrays和Collections类中都有不少实用方法,  Arrays.asList()接收一个数组或是一个用逗号分隔的元素列表(使用可变参数), 并将其转换为一个List对象, Collections.addAll()方法接受一个Collections对象, 以及一个数组或是一个逗号分隔的列表, 将元素添加到Collection中, 下面的示例展现了这两个方法:
工具

public static void main(String[] args) {
        //Collection
        
        Collection<Integer> collection = new ArrayList<Integer>(Arrays.asList(1, 2, 3, 4, 5));
        Integer[] i = {6, 7, 8, 9, 10};
        collection.addAll(Arrays.asList(i));
        Collections.addAll(collection, 11, 12, 13, 14, 15);
        Collections.addAll(collection, i);
        
        for (Integer c : collection) {
            System.out.print(c + ",");
        }
        
        // output: 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,6,7,8,9,10,
    }

    可是, Arrays.asList()方法的限制是它对所产生的List的类型作出了最理想的假设, 而并无注意到它会赋予什么样的类型, 有时候就会引起问题: spa

class Snow {}
class Powder extends Snow {}
class Light extends Powder {}
class Heavy extends Powder {}
class Crusty extends Snow {}
class Slush extends Snow {} public class j_221 { public static void main(String[] args) { List<Snow> snow1 = Arrays.asList(new Crusty(), new Slush(), new Powder()); //List<Snow> snow2 = Arrays.asList(new Light(), new Heavy()); List<Snow> snow3 = new ArrayList<Snow>(); Collections.addAll(snow3, new Light(), new Heavy()); List<Snow> snow4 = Arrays.<Snow>asList(new Light(), new Heavy()); } }

  当试图建立snow2时, Arrays.asList()中只有Powder类型, 所以它会建立List<Powder>而不是List<Snow>, 尽管Conllections.addAll()工做的很好, 由于他从第一个参数中了解到了目标类型是什么; 正如从建立snow4操做中所看到的,能够在Arrays.asList()中间插入一条"线索", 以告诉编译器对于由Arrays.asList()产生的List类型, 实际的目标类型应该是什么, 这称为显示类型参数说明.code

相关文章
相关标签/搜索