Learning record

一、JavaSE复习

(一)、Collection

1. List

(1). 元素是有序的(添加和取出顺序一致)
(2). 元素可重复
(3). 支持索引

2. Iterator(迭代器)

(1). 用于遍历 Collection 集合中的元素
(2). 先调用.hasNext()方法 再调用 .next()方法
(3). Collection 对象.iterator() 返回一个迭代器
(4). 快捷键 itit
(5). 重置迭代器 实例 = 对象.iterator()

3. 增强 for 遍历 Collection

(1). 底层仍使用迭代器
(2). for( Object xxx : 对象 ){}
(3). 快捷键 I

4. ArrayList(改查)

(1). 可以加入 null
(2). 线程不安全
(3). 底层数组 elementData
(4). 如果使用无参构造器,则初始容量为0,第一次添加后扩容为10,再次扩容为原来的1.5倍;如果指定大小,则初始为指定大小,扩容也按1.5倍。

5. Vector

(1). 线程安全
(2). 但效率不如 ArrayList
(3). 无参构造器和赋初值初始规则与 ArrayLsit 一致,但按 2 倍扩容

6. LinkedList(增删)

(1). 双向链表
(2). first 指向首节点 last 指向尾结点
(3). Node 节点,维护 pre(指向前一个节点) next(后一个) item 三个属性
(4). 元素的添加和删除效率较高

7. Set

(1). 无序,无索引
(2). 不允许存在重复元素,只可有一个 null
(3). 虽然取出顺序和放入顺序不一致,但取出顺序不变

8. HashSet

(1). 实际上是 HashMap (k-v)
(2). 底层为 数组+链表+红黑树
(3). 计算 hash 值得到存放位置,若该位置已经存在元素,判断该位置的对象和要加入的对象是否是同一个对象 || 调用 equals 方法比较,若相同,则放弃添加,若不相同,则继续与链表上的元素比较,直到加入到链表最后
(4). 数组 table 初始大小为 16 ,每加入一个元素 size++,若大小达到容量的 0.75 倍,则按两倍扩容
(5). 链表元素到达8个时,判断此时是否满足树化条件(table 大小 >= 64),如果满足,将该链树化,若不满足,对 table 表扩容

9. LinkedHashSet

(1). 是 HashSet 的子类
(2). 底层是 LinkedHashMap,数组 + 双向链表
(3). 用链表维护元素的次序,使得看起来是以插入的顺序保存的
(4). 不允许添加重复元素
(5). 数组是 HashMap N o d e [ ] 存放的元素是 L i n k e d H a s h M a p Node[] 存放的元素是 LinkedHashMap Node[]存放的元素是LinkedHashMapEntry 类型(继承关系),初始化大小 16
(6). 用 before 和 after 指向前后 Entry 元素,用 head 和 tail 指向头尾元素

(二)、Map

Map 存放的数据是 k-v 的,存放在 HashNode N o d e 中, N o d e 实现了 E n t r y 接口,可以通过 ∗ ∗ 对象名 . e n t r y S e t ∗ ∗ 得到 H a s h M a p Node中,Node 实现了 Entry 接口,可以通过 **对象名.entrySet** 得到 HashMap Node中,Node实现了Entry接口,可以通过对象名.entrySet得到HashMapEntrySet,里面存放的 entry 元素指向 对象中的 Node 节点,方便遍历(将 entry 转成 Map.Entey,调用 .getKey() 和 .getValue()方法 ), 还可以通过 .keySet() 和 .values()获得 key 和 values 的集合,其编译类型分别是Set 和Collection

1. HashMap

(1). 线程不安全
(2). 底层 数组+链表+红黑树 ,无序
(3). 添加系统 key 时,覆盖原来的 values
(4). 第一次扩容大小为 16 ,临界值为大小的 0.75倍,扩容按两倍扩容,扩容条件见 8.(5)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值