JAVA中的数组、链表、队列、栈

首先说一下Java中的集合框架collection是一个接口,、

下面有两大类型的子接口,分别是List和Deque

List下有三大常见的实现类,ArrayList、LinkedList、Vector

其中 ArrayList、Vector 底层都是用数组来实现的, LinkedList底层是用链表实现的

ArrayList非线程安全,Vecotr虽然是线程安全的但是已经被弃用了。

Stack类是早期JAVA为了栈数据结构而设计的一个类,它是vector的子类,但是早期设计的时候考虑的不是特别的完美,因为父类vector是一个线程安全的,意味着效率比较低,同时Vector的上层接口List里面有一个add(index, Element)的方法,被调用会破坏stack的结构,就是在这栈的中间可以随意的插入元素。因此Stack这个类也被弃用了。

Deque 接口顾名思义就是为了实现队列而提供的接口。双端队列。

下面有很多有用的实现类,ArrayDeque、LinekList、PriorityQueue 里面也封装了很多有用的方法。

LinkedList即使List的实现类又是Deque的实现类(底层是链表)因此可以使用它来作为队列或者栈来进行使用。

虽然LinkedList的功能很强大,但是它也是List的实现类,避免不了被错误调用

破坏了栈只能在栈顶操作数据的原则

操作队列或者栈用的方法主要带有offer poll peek + First/Last,而最好不是用add/remove之类的方法或者push/pop之类的方法,容易搞混乱。

这篇文章讲得很好。

https://mp.weixin.qq.com/s/Ba8jrULf8NJbENK6WGrVWg

发表评论

电子邮件地址不会被公开。 必填项已用*标注