一.
集合继承的体系结构
我们常用的也就是 Arraylist hashset hashmap linkedlist
2.
List接口的两个实现类
Arraylist 和 LinkedList
1.Arraylist
特点:
ArrarList底层是一个Object类型的数组 默认长度是10(1.9之前,1.9之后构造默认一个空的数组,使用的时候才会开辟新的长度) 扩容是原来长度的 1.5倍 上限是Integer最大值 - 8
ArrayList是有序的 元素可以重复 可以为null 线程不安全的
ArrayList查询效率高 增 删 效率低 因为要复制移动数组
2.LinkedList
特点:
LinkedList 是一个双向链表 无序的 可以重复的 没有默认大小 也没有大小上限
LinkedList增删效率高 查询效率低 因为没有下标 特别是对首尾进行操作 非常方便
增删改速度快 因为不需要频繁的移动元素
查询的效率低 因为没有下标的概念 也就是说或 linkedlist是无序的 可重复
没有默认大小 没有扩容的概念 只要内存够大 没有上限
**注:**千万不要对linkedlist使用get来获取元素 never 因为linkedlist是无序的 是没有下标的 使用这种get的方式将会每次获取元素都从头找一遍 会让时间复杂度攀升 效率大大下降
可用增强for循环 或者迭代器来输出
2.5 set集合
2、 Set集合
a) 无序(存储和取出顺序不一致,有可能会一致),但是元素唯一,不能重复
b) b) 实现类
i. HashSet
1. 底层数据是哈希表
2. 通过两个方法hashCode()和equals()保证元素的唯一性,方法自动生成
3. 子类LinkedHashSet底层数据结构是链表和哈希表,由链表保证元素有序,
由哈希表保证元素唯一。
ii. TreeSet
1. 底层数据是红黑二叉树
2. 排序方式:自然排序、比较器排序
3. 通过比较返回值是否为0来保证元素的唯一性。
2.1、 HashSet类:
a) 不保证set的迭代顺序,
b) 当存储对象时需要重写equals()和hashCode()方法(可以用Eclipse自动生成此方法
3.map集合 之hashmap
1.hashmap特点
HashMap底层是一个数组+单项链表的数据结构 无序存储
当我们调用hashmap的无参构造是 默认数组长度是 16
HashMap有一个 负载 因子 0.75 也就是扩容的条件或者机制的阈值
也就是说我们的HashMap的空间当使用率达到百分之75的时候 会扩容 2倍
HashMap仍然是线程不安全的
map的key和value均可以为位null (key为null则默认其对应的数组下标为零)
重复对已存在的key赋值 会覆盖原来的value
效率比较高 但是有限制 数据结构必须是key-value
占用空间比较大 (元素有两个内容 一个键 一个是值 另外就是这个HashMap是无序的 )
注: 可用增强for循环 或者迭代器来输出