• 泛型和类型安全的集合


    泛型和类型安全的集合

    原文地址
    在这里插入图片描述

    使用java5之前集合的一个主要问题是编译器允许你向集合中插入不正确的类型。

    java5之前的集合没有泛型的概念,可以存储任意类型的数据(可以看做是泛型Object的集合),在取出对象时需要强制类型转换,但因为无法确定集合中对象的类型,将会产生语法错误。

    java5提出了泛型的概念

    ArrayList<Apple> apples = new ArrayList<Apple>();
    

    尖括号括起来的是参数类型,他指定了这个集合可以保存的类型。

    在java7中又提出了类型推断

    ArrayList<Apple> apples = new ArrayList<>();
    

    new集合时不需要再书写类型。

    程序打印一个对象时使用默认的Object的toString()产生的,该方法打印类名,后面跟着对象的散列码的无符号十六进制表示。

    基本概念

    在这里插入图片描述

    1. 集合(Collection):一个独立元素的序列,这些元素都服从一条或多条规则。List必须以插入的顺序保存元素,Set不能包含重复元素,Queue按照排队规则来确定对象产生的顺序(通常与他们插入的顺序相同)。
    2. 映射(Map):一组成对的“键值对”对象,允许使用键来查找值。ArrayList使用数字来查找对象,因此在某种意义上讲,他是讲数字和对象关联在一起。map允许我们使用一个对象来查找另一个对象,他也被称作关联数组,因为它将对象和其他对象关联在一起;或者称作字典,因为可以使用一个键对象查找值对象,就像在字典中使用单词查找定义一样。Map是强大的编程工具。

    添加元素组

    在这里插入图片描述

    在 java.util 包中的 Arrays 和 Collections 类中都有很多实用的方法,可以在一个 Collection 中添 加一组元素。
    Arrays.asList()方法接收一个数组或者是都好分割的元素列表,并将其转换为LIst对象。
    Collections.addAll()方法接收一个Collection对象,以及一个数组或者是都好分割的列表,将其元素添加到Collection中。

    public class AddingGroups {
        /**
         * Arrays.asList()方法将一个数组或是都好分割的元素列表,转换为List对象。
         * 
         * Collections.addAll()方法接收一个Collection对象以及一个逗号分割的列表。
         * @param args
         */
        public static void main(String[] args) {
            Collection<Integer> 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);
            List<Integer> list = Arrays.asList(16,17,18,19,20);
            list.set(1,99);
            for (Integer integer:collection){
                System.out.println(integer);
            }
        }
    }
    
    

    Collection的构造器可以接收另一个Collection,用它来将自身初始化。因此,可以使用Arrays.asList()来为这个构造器产生输入。但是,Collections.addAll()运行得更快,而且更容易构建一个不包含元素的Collection,然后调用Collection.addAll(),因此这是首选方式。

    Collection<Integer> collection = new ArrayList<>();
    Collections.addAll(collection,Arrays.asList(1,2,3,4,5));
    

    也可以直接使用Arrays.asList()的输出作为一个List,但是这里的底层实现是数组,没法调整大小。如果尝试在这个List上调用add()或remove(),由于这两个方法会尝试修改数组的大小,所以会在运行时得到“Unsupported Operation(不支持的操作)”错误:

    /**
     * @author myf
     */
    public class AsListInference {
        public static void main(String[] args) {
            List<Apple1> apple1s = Arrays.asList(new Apple1("mo"),new Apple1("yi"),new Apple1("feng"));
            //apple1s.add(new Apple1("baocuo"));  UnsupportedOperationException
            
            List<Apple1> apple1s1 = new ArrayList<>();
            Collections.addAll(apple1s,new Apple1("mo"),new Apple1("yi"));
            apple1s1.add(new Apple1("feng"));
        }
    }
    
    class Apple1 {
        String name;
    
        public Apple1(String name) {
            this.name = name;
        }
    }
    
  • 相关阅读:
    1.2 文本域(含可编辑表格实现)
    JS手册目录
    1.1 文本框
    JS传中文到后台需要的处理
    java基础和面向对象面试题_01
    try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
    java面试题:当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
    java基础学习_IO流04_用户登录注册案例(IO版)、数据操作流(操作基本数据类型的流)、内存操作流、打印流、标准输入输出流、随机访问流、合并流、序列化流(对象操作流)、Properties属性集合类、NIO(新IO)_day22总结
    思想:java中,父类的方法中传入的形参的数据类型是泛型,子类的方法的形参想只要一种确定的数据类型,子类该如何做呢?
    几种后端开发技术的选型调研
  • 原文地址:https://www.cnblogs.com/zhangguangxiang/p/14232502.html
Copyright © 2020-2023  润新知