Java集合相关内容
1.List
- 特点:有序、有下标、元素可以重复
- equals方法判断是否存在
2.List实现类
2.1 ArrayList
存储结构:数组
调用无参构造方法创建ArrayList,数组长度为0
当添加一个元素时,数组长度扩容为原来的1.5倍
空间不够,每次扩容都是原来的2倍
2.2 LinkedList
存储结构:双向链表
LinkedList包含两个属性first(指向第一个结点,last指向最后一个结点)
每个结点都是Node类型,属性包含item,next,prev
根据下标查找元素,判断下标的范围是在前半部分,还是在后半部分如果是前半部分从first开始,如果是后半部分,从last开始找。
2.3 Vector
存储结构:数组
JDK1.0 包含集合
线程安全,效率比较低
2.4 Stack
Vector的子类,存储结构:数组
先进后出 push入栈,pop出栈
2.5 Queue
是个接口
先进先出 offer 入队 poll出队
3. 泛型
类型参数化
3.1常见形式
泛型类:类名的后加上尖括号<>,里面写占位符。
- 占位符的要求:使用一个大写字母来表示,有多个中间用逗号隔开,表示一个引用数据类型。
- 创建泛型类对象的确定泛型类型
泛型接口:接口名的后加上尖括号<>,里面写占位符。
- 子类实现泛型接口时,指定泛型的数据类型
- 子类也可以是泛型类
泛型方法:在方法的返回值的前面,加上尖括号<>,里面写占位符。
3.2 使用泛型,泛型的限制
- ? 泛型表示任意类型
- ? extends Student 表示类型小于等于Student
- ? super Student 表示类型大于等于Student
4.Set
特点:无序,无下标,元素不可以重复
5.Set实现类
HashSet:存储结构哈希表(数组+链表+红黑树)
重复依据:hashCode()和equals()
存储过程:
- 根据hash值计算位置,如果此位置没有元素,直接放入
- 如果这个位置铀元素,判断hash值是否相同,如果不相同,直接放入形成链表
- 如果hash一样,在判断equals,如果equals为false,放入形成链表,如果为true,则认为是重复元素,不再放入。
5.1 HashSet
存储结构哈希表(数组+链表+红黑树)
- 包含一个双向链表,保证顺序。
5.2 TreeSet
存储结构:红黑树(自平衡的二叉搜索树)
重复依据:Comparable接口中compareTo(),返回值是0则是重复元素。
- 元素要求实现Comparable,或者创建集合时传递一个Comparator比较器。
6. Map
- 存储数据是键值对,一个键一个值
- 键不可以重复,值可以重复
7.Map实现类
7.1 HashMap
存储结构:哈希表(数组+链表+红黑树)
7.2 LinkedHashMap
哈希表(数组+链表+红黑树),继承了HashMap
- 有一个双向链表维护顺序
7.3 TreeMap
存储结构:红黑树
7.4 HashTable
存储结构哈希表 (数组+链表)
- JDK1.0 包含的集合
- 线程安全,效率低
7.5 Properties
HashTable的子类