• Java基础之集合与泛型


    话不多说,直接上图

    1.Collection集合小结

    clip_image002

    注意:

    凡是使用哈希表保存对象的容器,保存的对象在容器中都是唯一的,唯一性是通过被保存对象的hashCode和equals方法共同确定;

    凡是使用二叉树保存对象的容器,保存的对象在容器中都是唯一的,而且保存时就是有序的,有序性和唯一性依赖被保存对象实现Comparable接口,或传递给容器的比较器对象(实现了Comparator接口的对象);

    ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦
    LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引 但是缺点就是查找非常麻烦 要从第一个索引开始
    arraylist类似于数组形式,数据只要给定索引就可以直接得到数字,arraylist也一样,但是如果要增删,就要移动后面的所有元素,这样就慢了;
    LinkedList是使用类似于链表来存储的,与arraylist相反,增删只要添加一个连接就可以了,不要移动后面的所有元素

    2. Map集合总结

    Map集合的特点:

    1, Map集合中存储的是key-value的映射关系;

    2, Map集合中的每个映射包含键和值两个对象,同时映射本身也是一个对象,使用Map.Entry类描述;

    3, Map集合中的key必须保证唯一,不能重复,但值可以重复;

    4, Map集合中key和value都可以是null元素,但是key只能有一个null;(HashTable中不能使用null做键和值)

    5, Map集合不能直接遍历,只能通过键集、值集或键值对集遍历;

    Map集合的继承体系:

    clip_image002[7]

    开发中使用最多的三个集合:ArrayList;HashSet;HashMap

    如果保存的数据有映射关系,就应该使用Map集合,否则就是用Collection集合;

    如果要保存的数据可以是重复的,就应该使用List集合;否则就要使用Set集合;

    3,泛型

    1、泛型是一种在编译期就可以进行数据类型的检查的技术,只能检查引用类型的数据类型;

    2、泛型使用一对尖括号表示:<标识符>;尖括号中的标识符,表示一个引用数据类型;

    3、泛型可以定义在类、方法和接口上;

    a) 定义在类上:书写在类名后面,在创建类的实例对象时确定泛型的具体类型;在类中的非静态函数中可以使用;

    b) 定义在方法上:书写在方法的返回值类型前面,在方法调用时确定泛型的具体类型,静态和非静态函数都能定义;只能在当前定义的这个方法里使用;

    c) 定义在接口上:书写在接口名后面,实现接口时可以明确泛型的具体类型,或者通过泛型类,在创建类的对象时才明确具体类型;

    4、泛型的通配符:当需要使用的泛型的数据类型是不确定的时候,就需要使用泛型的通配符;

    通配符的写法:<?>

    5、泛型的通配符的上限和下限:

    a) 在定义泛型的通配符的时候,如果只能匹配某个类和这个类的子类,就需要使用通配符的上限,写法是:<? extends 上限的类型>

    在使用通配符的上限时,只能从容器中取出数据,不能向容器中存放数据;

    b) 在定义泛型的通配符的时候,如果只能匹配某个类和这个类的父类,就需要使用通配符的下限,写法是:<? super 下限的类型>

    在使用通配符的下限的时候,直接向容器中保存对象,对象的类型只能是下限的类型;

    要从容器中取出对象,不能直接使用下限类型的变量接受,需要强制向下转型,或使用Object类型的变量接受;

  • 相关阅读:
    [你必须知道的.NET]第二十五回:认识元数据和IL(中)
    [技术速递]体验微软开源范例Oxite
    一本去繁存精的设计书《C# 3.0设计模式》
    [你必须知道的.NET]第二十四回:认识元数据和IL(上)
    泛型KMP算法
    实现语音视频录制(demo源码)
    AutoResetEvent 的诡异行为
    调用非托管dll常出现的bug及解决办法
    如何实现离线文件?
    广播与P2P通道(上) 问题与方案
  • 原文地址:https://www.cnblogs.com/lizhaowen/p/6036618.html
Copyright © 2020-2023  润新知