复习
- List:列表。元素有序不唯一,可以通过下标来访问
- ArrayList:顺序表。基于数组来存储,适合于查询而不适合增删
- LinkedList:链表。基于节点来存储,适合于增删但是不适合于查询
- Vector:向量。基于数组来存储,本身是线程安全的
- Set:散列集合。元素无序且唯一
- HashSet:基于元素的哈希码来进行存储
- TreeSet:基于树来存储。要求存入的元素对应的类必须实现Comparable接口
- 其他
- Stack:栈。元素有序,先进后出
- Queue:队列。元素有序,先进先出
- Deque:双向队列。元素有序,两端放两端拿
其他
一、Stream
- Stream是JDK1.8提供的一套针对集合数据进行批量操作的"工作流"
- 可以利用Stream来对集合元素进行过滤、排序、转化、打印等
二、泛型
- 泛型是JDK1.5提供的特性之一,用于类型不确定的场景
- 在Java中,通常用一个大写字母来表示泛型,但是泛型的定义只要符合标识符的明明规则即可
- 在Java中,常见的定义泛型的字母:E - element,T - type,K - key,V - value,R - result
- 在Java中,泛型的顶级接口ParameterizedType(参数化类型)
- 泛型只能在类和方法上声明,不能单独声明
Map<K, V> - 映射
- Map存储的元素是键值对(一个键Key+一个值Value) - Map本质上由多个键值对来构成的
- Map不是集合!!!
- 在Map中,键是唯一的,一个键对应一个值,但是值不是唯一的
- 在JDK1.0中,映射的父类是Dictionary,从JDK1.2开始,Dictionary整个类过时,取而代之就是Map接口
- 练习:输入一个字符串,输出这个字符串中,每一个字符出现了多少次。例如输入字符串:abdaa,输出a=3 b=1 d=1
- HashMap底层是依靠数组+链表结构来存储数据,即数组的每一个位置上维系一个链表,将数组的每一个位置称之为是一个bucket(桶)。在默认情况下,如果不指定,那么默认初始容量是16(指的是数组长度而不是元素个数)
- HashMap最多有230个桶
- HashMap的桶的数量一定是2n的形式。指定的初始容量经过计算,一定是2n
- HashMap是线程不安全的
- 从JDK1.8开始,HashMap引入了红黑树(Red Black Tree - RBT)机制。当某个桶中元素个数>=8的时候,这个桶中的链表会扭转成一棵红黑树;当某个红黑树的节点个数<=6的时候,这棵红黑树会扭转回链表 - 当桶的数量>=64的时候,才会使用红黑树机制
- TreeMap:底层是基于红黑树来实现的,要求放入的键对应的类必须实现Comparable接口 - TreeMap本身线程不安全
- Hashtable:底层基于数组+链表来存储的,Hashtable本身线程安全
- 红黑树:是一棵自平衡二叉查找树
File - 文件
- File:是Java中用于代表文件和目录(文件夹)的类 - File对象不一定会对应一个实际存在的文件