java中除了基本类型int bool等但会的是实例,其他的都是对象的引用
python里所有的变量其实都是对象的引用(连基本类型都是如此),而这个引用,说白了就是个指向实例的指针。
为什么不推荐使用Stack?
因为Vector是当初JAVA曾经写得不太行的类,所以Stack也不太行。
Vector不行是因为效率不太行,很多方法都用了synchronized修饰,虽然线程安全,但是像ArrayDeque,LinkedList这些线程不安全的,在需要安全的时候也可以用Collections.synchronizedCollection()转化成线程安全的,所以Vector就没什么用处了
再根据仿生学
Stack只能上进上出,有点像刺胞动物(腔肠动物),就是那种从哪里吃进去就哪里拉出来的那种生活在海洋里的比较低级的生物。
Deque上进上出,上进下出,甚至下进上出,非常上流,只有你想不到,没有我Deque做不到的
Deque中常用方法:
以这2个为基础整出来的Deque除了结构不一样,方法都一样的。
入栈 | push(E e) |
出栈 | poll() / pop() 后者在栈空的时候会抛出异常,前者返回null |
查看栈顶 | peek() 为空时返回null |
入队 | offer(E e) |
出队 | poll() 为空时返回null |
查看队首 | peek() 为空时返回null |
双端队列
offerFirst(E):boolean
在队头添加元素,并返回是否添加成功。offerLast(E):boolean
在队尾添加元素,并返回是否添加成功。pollFirst():E
删除队头元素,并返回删除的元素,如果队列为null
,返回null
。pollLast():E
删除队尾元素,并返回删除的元素,如果队列为null
,返回null
。peekFirst():E
获取队头元素,如果队列为null
将返回null
。peekLast():E
获取队尾元素,如果队列为null
将返回null
。removeFirstOccurrence(Object):boolean
删除第一次出现的指定元素,并返回是否删除成功。removeFirstOccurrence(Object):boolean
删除最后一次出现的指定元素,并返回是否删除成功
Deque 是抽象类。 Deque is abstract; cannot be instantiated
Deque<Integer> st =new Deque<>();错误
Deque<Integer> st =new LinkedList<>();正确
参考:https://blog.csdn.net/qq_44013629/article/details/106461200
https://blog.csdn.net/weixin_44008257/article/details/108013581
PriorityQueue
PriorityQueue是从JDK1.5开始提供的新的数据结构接口,它是一种基于优先级堆的极大优先级队列。优先级队列是不同于先进先出队列的另一种队列。每次从队列中取出的是具有最高优先权的元素。如果不提供Comparator的话,优先队列中元素默认按自然顺序排列,也就是数字默认是小的在队列头,字符串则按字典序排列(参阅 Comparable),也可以根据 Comparator 来指定,这取决于使用哪种构造方法。优先级队列不允许 null 元素。依靠自然排序的优先级队列还不允许插入不可比较的对象(这样做可能导致 ClassCastException)。
参考:https://my.oschina.net/leejun2005/blog/135085