-
队列是一种操作受限制的线性表。最擅长操作头和尾.
单向队列(Queue):先进先出(FIFO),只能从队列尾插入数据,只能从队列头删除数据.
双向队列(Deque):可以从队列尾/头插入数据,只能从队列头/尾删除数据. -
栈(stack)又名堆栈,它是一种运算受限的线性表,后进先出(LIFO)。
基于数组来实现栈结构:索引为0的位置就是栈底.最后是栈顶。底层可以数组来存储,也可以使用链表来存储. - 如果数组中元素的值和索引位置存在对应的关系,这样的数组就称之为哈希表。提供查找数据的效率。
哈希表的插入和查找是很优秀的.
数组的扩性能较低 加载因子:0.75.
数组是会记录添加顺序的,按照索引位置来存储的,允许元素重复.
哈希表中元素是不能重复的,对象如果相同则hashCode相同-->index相同;不会记录元素添加的先后顺序. -
树结构在做范围查询的时候,性能超群,一般的用来做索引的结构.
- 集合框架包含:对外的接口、接口的实现和对集合运算的算法(底层都对应着某一种数据结构的算法)。
Vector类底层其实就是一个Object数组,则只能存储任意类型的对象(基本类型自动装箱了),支持同步
集合中存储的对象,存储的是对象的引用,而不是对象本身. -
集合类的操作方法:
增加:
boolean add(Object A) 将指定元素A添加到此向量的末尾,等价于addElement方法。
void add(int index, Object element) 在此向量的指定位置插入指定的元素。
boolean addAll(Collection c) :把c集合中的元素添加到当前集合对象中.
删除:
Object remove(int index) :删除指定索引位置的元素,并返回删除之后的元素.
boolean remove(Object o):删除指定的元素.
boolean removeAll(Collection c):从此集合中移除包含在指定 集合c中的所有元素。
boolean retainAll(Collection c):在此集合中仅保留包含在指定 集合c中的元素,求两个集合的交集。
修改:
Object set(int index, Object element) :修改当前集合中指定索引位置的元素. 返回被替换的旧的元素.
查询:
int size() :返回当前集合中存储几个元素.
boolean isEmpty():判断当前集合中元素个数是否为0.
Object get(int index):查询指定索引位置的元素.
Object[] toArray():把集合对象转换为Object数组. -
栈(Stack):使用栈尽量使用ArrayDeque:
Deque 接口及其实现提供了 LIFO 堆栈操作的更完整和更一致的 set,应该优先使用此 set,而非此类。例如:
Deque<Integer> stack = new ArrayDeque<Integer>(); -
ArrayList类用来取代Vector类:底层原理一样.
ArrayList list = Collections.synchronizedList(new ArrayList(...));
在Java7之前,使用new ArrayList,一个元素都不存储,但堆空间初始化了长度位10的Object数组,之后new ArrayList,其实底层创建一个空数组. Object [] elementData = new Object[]{};在第一次调用add方法的时候,才会重新去初始化数组. -
LinkedList类:底层采用双向链表结构算法,是单向队列,双向队列,栈的实现类,线程不安全
链表和队列,都特别擅长操作头和尾的节点。在LinkedList中存在Object get(int index),表示根据索引位置获取对应的元素,
链表没有索引的概念。 -
-
数组结构算法: 插入和删除操作速度低,查询和更改较快.
链表结构算法: 插入和删除操作速度快,查询和更改较慢.
day24 集合1
最新推荐文章于 2024-05-12 14:58:20 发布