Collection、List、ArrayList、常见数据结构
集合与数组有什么不同?
- 数组的长度是固定的,不能变化。集合可以变化
- 内容不同
- 数组存储的同一种类型的元素
- 而集合可以存储不同类型的元素
- 元素的数据类型问题
- 数组可以存储基本数据类型,也可以存储引用数据类型
- 集合只能存储引用类型
不同的集合类数据结构不同
数据结构:就是数据的存储方式;
集合的继承体系
java.utilCollection
Collection的交集功能:
- boolean retainAll(Collection c); A对B做交集
- 假设有两个集合A、B
- A对B做交集,最终的结果保存在A中,B不变
- 返回值表示的是A是否发生过改变
- 功能解释:
集合的遍历:
其实就是依次获取集合中的每一个元素
Object[ ] toArray :把集合转为数组,可以实现集合的遍历
Iterator iterator():集合迭代器,集合的专用遍历方式
Object next():获取元素,并移动到下一个位置
boolean hasNext(); 如果仍有元素可以迭代,则返回 true。(换句话说,如果 next 返回了元素而不是抛出异常,则返回 true)。
迭代器为什么不定义成一个类,而是一个接口?
每个具体集合都有各自的iterator方法
List集合
list接口集合特点
有序的(存进去和取出来的顺序是一样的),可重复的
List接口的特有功能
List集合的特有遍历功能(普通for循环)
常见数据结构!
栈:先进后出
队列:先进先出
数组:查询快,增删慢
- 存储同一种类型的多个元素的容器。有索引,方便我们的获取
链表:查询慢,增删快
红黑树:
生活中的树:
计算机中的树(倒着)
二叉树:分支不能超过两个
排序树/查找树:
类比:猜数字小游戏:1-100之间的数字,从50开始猜,一下减去一半
在二叉树的基础上,元素是有大小顺序的;
左子树小,右子树大
平衡树:左孩子和右孩子相等
不平衡树:左孩子 != 右孩子
红黑树
特点:趋近于平衡树,查询的速度非常快,查询叶子节点最大次数和最小次数不能超过2倍
- 约束:
- 节点可以是红色的或者黑色的
- 根节点是黑色的
- 叶子节点(空节点)是黑色的
- 每个红色节点的子节点都是黑色的
- 任何一个节点到其每一个叶子节点的所有路径上 黑色节点数相同
List的子类特点
ArrayList:
- 底层数据结构是数组,查询快,增删慢
- 线程不安全,效率高
Vector:
- 底层数据结构是数组,查询快,增删慢
- 线程安全,效率低
LinkedList:
- 底层数据结构是链表,查询慢,增删快
- 线程不安全,效率高
ArrayList集合:
1、去除集合中的重复值(字符串的内容相同)
2、去除集合中自定义对象的重复值(对象的成员变量都相同)