集合的集成体系老大collection
常用方法
- 添加:add(Object obj) ,addAll(collection c)
- 删除:clear() ,remove(Object obj), removeAll(collection c)
- 判断:contains(Object obj) ,containsAll(collection c) ,isEmpty()
- 获取:iterator():迭代器:接口,遍历集合,具体实现是以内部类的方式实现的
Collection c = new ArrayList();
Iterator it = c.iterator();
while(it.hasNext()){
Object obj = it.next();
}
- 长度:size()
- 交集:retainAll(collection c)
List
有序(存储顺序和取出顺序一致),可重复
- ArrayLIst 数据结构是数组,线程不安全
- LinkedList 数据结构是链表(双向),线程不安全
- Vector 数据结构是数组,线程安全(不常用)
- copyOnWriteList 并发容器,线程安全(COW设计模式)
数据结构知识回顾
-
单链表
点中有指针域与数据域,指针域指向下一个节点
- 插入一个节点:insertNode.next = temp.next; temp.next = insertNode;
- 删除一个节点:temp.next = temp.next.next;
- 对链表进行排序,使用冒泡算法对其进行排序(确保)
- 找到链表中倒数第k个节点,设置两个指针p1、p2,让p2比p1快k个节点,同时向后遍历,当p2为空,则p1为倒数第k个节点
- 删除链表重复数据,操作跟冒泡排序差不多,只要它相等,就能删除了
- 查询链表的中间节点,这个算法也挺有趣的:一个每次走1步,一个每次走两步,走两步的遍历完,然后走一步的指针,那就是中间节点
- 递归从尾到头输出单链表,只要下面还有数据,那就往下找,递归是从最后往前翻。
-
线性结构的应用—栈
- 进栈:newNode.next = stack.stackTop; // 栈顶本来指向的节点由新节点指向
stack.stackTop = newNode; // 栈顶指针指向新节点 - 遍历栈:while(stackTop != stack.stackBottom){
stackTop = stackTop.next;
} - 出栈:将栈顶的元素的指针(指向下一个节点)赋值给栈顶指针
Stack.stackTop = stack.stackTop.next; - 清空栈:栈顶指向栈底,java自动释放内存资源
- 进栈:newNode.next = stack.stackTop; // 栈顶本来指向的节点由新节点指向
-
线性结构的应用—队列
Front:指向第一个有效的元素 rear:最后一个有效数据的下一个
算法:rear = (rear + 1)% 数组长度 (取rear节点的下一个节点的)
判断队列是否满了:(queue.rear + 1)% 长度 = queue.front- 入队:queue.arrays[queue.rear] = value;
Queue.rear = (queue.rear + 1) % 数组长度; - 遍历:只要front节点不指向rear节点,就可以一直输出
- 出队:front指针往后移就是出队
queue.front = (queue.front + 1) % 数组长度;
- 入队:queue.arrays[queue.rear] = value;
-
二叉树
- 静态创建二叉树:
二叉树:每个节点最多两个儿子,树由节点组成
节点:一个数据、两个指针(如果有儿子就指向儿子节点,没有节点就指向null)
遍历:(通过中+先或中+后可以确定一颗二叉树)
中序:根—左—右
先序:左—根—右
后序:左—右—根
遍历树:方法preTraverseBTree(TreeNode node){
输出(node.getValue);
preTraverseBTree(node.getLeftTreeNode());
preTraverseBTree(node.getRightTreeNode());}
// 每个节点的遍历如果访问有孩子的节点,先处理孩子的—————递归思想
- 动态创建二叉树:(数组变为二叉树)
二叉查找树创建:当前根节点的左边全部比根节点小,右边全部比根节点大
Set
元素不可以重复,set集合的底层是map
- HashSet:无序,允许为null,底层是HashMap(散列表+红黑树),线程不安全
- TreeSet:有序,不允许为null,底层是TreeMap(红黑树),线程不安全
- LinkedHashSet:迭代有序,允许为null,底层是HashMap+双向链表,线程不安全