一、泛型机制:
(1)基本概念:
- 集合中可以存放不同类型的对象,因为都按照Object类进行操作,为了取数据时表达真实的数据类型,需要进行强制数据转换,由此可能引入类型转换异常
- 从Java5开始增加泛型机制,在集合名称右侧使用<数据类型>方式,明确可以存放的类型,若存放其他类型则报错。从Java7开始后边的<>里边的内容可以省略,菱形特性。
List<String> lt1 = new LinkedList<>();
- 只在编译时期有效,在运行过程不区分什么类型
(2)底层原理:参数化类型,让数据类型作为参数传递,其中E相当于占位符
(3)自定义泛型接口/泛型类/泛型方法:在后边增加了类型参数列表,中间用,隔开
- 集合中不支持基本数据类型,因为都是Object类为基础的。
- 父类有泛型,子类可以保留或者不保留,也可以在此基础上增加新的泛型
- 泛型方法是输入参数的时候需要输入泛型参数,而不是具体参数,格式:[访问权限]<泛型> 返回值类型 方法名(泛型标识 参数名称){方法体;}
- 在静态方法中使用泛型参数时,需要把静态方法定义为泛型方法。
(4)通配符
二、集合(下)
1、Set集合:java.util.Set,是Collection子集合,与List、Queue集合平级。没有先后次序,不允许重复。主要实现类:HashSet类、TreeSet类、LinkedHashSet类。
- HashSet类:底层采用哈希表进行数据管理。LinkedHashSet类是在此基础上增加了双向链表,记录先后顺序,便于迭代。
- TreeSet类:底层采用红黑树进行数据管理
(1)元素放入HashSet集合的原理:调用HashCode()方法,获得哈希码值,调用哈希算法,得到哈希值,再计算出元素在哈希表中的索引位置。若索引位置没有元素,直接放入新数据;若该位置有元素,再比较哈希值是否相同,若不相同,直接插入到已有元素的后边;若相同,则使用equals方法与已有元素比较,若相同则插入失败,若不同,直接放入已有元素后边。
- 重写equals()后要重写HashCode()?因为当两个元素调用equals方法证明相同时,重写HashCode方法可以保证这两个元素获得的哈希码值相同,由此可以产生同一个索引位置,此时只需要跟当前索引位置的已有元素进行比较即可,从而提高效率避免重复元素出现。
(2)二叉树——>有序二叉树(左子节点< 根节点< 右子节点)
- 红黑树是一种特殊的有序二叉树,比较大小(自然排序规则java.lang.Comparable、比较器规则java.util.Comparator)匿名内部类/lambda表达式:比较器优先于自然排序
2、Map集合:java.util.Map<K,V>集合元素基本单位:单对元素(K:Key目录 V:Value页码),key不可以重复,一个key对应一个value。
主要实现类:HashMap、TreeMap、LinkedHashMap、Hashtable(早期的,与HashMap类似,线程安全,里面的key和value不可以为空)、Properties(处理配置文件属性文件)
(1)常用方法
3、Collections类:主要提供对集合操作或者返回集合的静态方法