首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Java8编程思想精粹(十)-容器持有对象(下)

Java 1.0 附带了一个 Stack ,结果设计得很糟糕(为了向后兼容,永远坚持 Java 旧设计错误)。 Java 6 添加了 ArrayDeque ,其中包含直接实现堆栈功能方法....push() 接受类型为 T 对象 peek() 和 pop() 返回类型为 T 对象 peek() 方法返回栈顶元素,但并不将其从栈顶删除 pop() 删除并返回顶部元素 如果只需要栈行为,使用继承是不合适...,因为这将产生一个具有 ArrayDeque 其它所有方法(Java 1.0 设计者创建 java.util.Stack 时,就犯了这个错误)。...TreeSet 元素存储红-黑树数据结构,而 HashSet 使用散列函数。 LinkedHashSet也使用了散列,使用了链表来维护元素插入顺序。...使用 Java 泛型,可以指定集合中保存对象类型,因此不能将错误类型对象放入集合,并且在从集合获取元素时,不必进行类型转换。

74710

数据结构与算法(四)| 队列、栈与Java集合

队列和栈结构非常经典,面试中会经常出现他们变种题。 比如,实现图宽度优先遍历,但是要求用栈实现;实现图深度优先遍历,但是要求用队列实现。...要点:定义两个队列,实现这种push时往非空那个队列(如果都为空,则选择其中一个)插入数据,pop非空队列数据取出并依次插入到原来空那个队列,只留下最后一个元素,这个元素取出返回,这样原来非空就变成了空队列了...List集合最常用是 ArrayList 和 LinkedList 两个集合。 ArrayList ArrayList容量可以改变,非线程安全集合。...其内部实现用数组进行存储,集合扩容时会创建一个更大数组控件,把原有数据复制到新数组。...从棣属于juc包下 BlockingQueue 出现以来,队列就应用于各种高并发场景,鉴于其先进先出特性记忆阻塞操作特点,它经常被用作数据缓冲区。 ?

43040
您找到你想要的搜索结果了吗?
是的
没有找到

Java8编程思想(十二)-容器持有对象(下)

Java 1.0 附带了一个 Stack ,结果设计得很糟糕(为了向后兼容,永远坚持 Java 旧设计错误)。...有时一个名为 Stack 更能把事情讲清楚: ? 基本上,这个声明“我们定义一个可以持有 T 类型对象 Stack 。”...push() 接受类型为 T 对象 peek() 和 pop() 返回类型为 T 对象 peek() 方法返回栈顶元素,但并不将其从栈顶删除 pop() 删除并返回顶部元素 如果只需要栈行为,...使用继承是不合适,因为这将产生一个具有 ArrayDeque 其它所有方法(Java 1.0 设计者创建 java.util.Stack 时,就犯了这个错误)。...TreeSet 元素存储红-黑树数据结构,而 HashSet 使用散列函数。 LinkedHashSet也使用了散列,使用了链表来维护元素插入顺序。

54820

Java编程思想核心笔记

迭代器 LinkedList Stack Set 第十二章 通过异常处理错误 第十三章 字符串 不可变 String 重载 "+" 与 StringBuilder 简介 Java 编程思想为 Java...目的是接口与实现分离 第十章 内部类 可以一个定义放在另一个定义内部, 这就是内部类 创建内部类 内部使用内部类: 和普通完全一样 外部创建内部类方式: OuterClassName.InnerClassName...() 迭代器新近返回元素删除(因此调用该方法前必须先调用 next()方法) 接受容器并传递它, 从而在每个对象上都执行操作, 这种思想十分强大, 并且贯穿于本书 LinkedList LinkedList...只需要栈行为(入栈 push, 出栈 pop,返回栈顶元素 peek, 判空 empty)的话, jdk 原始 Stack 通过继承 LinkedList 实现, 并不是太合适, 可以单独定义一个...HashSet 出于速度原因考虑, 使用了散列函数; TreeSet 元素存储红黑树数据结构; LinkedHashList 因为查询速度原因, 也使用了散列函数, 使用链表维护插入顺序 第十二章

52720

【面试题精讲】Vector 和 Stack 区别?

Stack是Vector子类,它实现了栈数据结构。栈是一种后进先出(LIFO)数据结构,只能在栈顶进行插入和删除操作。 2. 为什么需要Vector和Stack?...Vector内部使用一个Object类型数组来存储元素,当数组空间不足时,会创建一个更大数组并将所有元素复制到新数组。这个过程称为扩容。默认情况下,每次扩容会使数组大小增加一倍。...Vector和Stack使用注意事项 Java,推荐使用ArrayList代替Vector,因为ArrayList不是线程安全,并且性能更好。...实现后进先出数据结构时,可以考虑使用Deque接口实现LinkedList,它既支持栈操作,又支持队列操作。 8....Vector和Stack某些场景下非常有用,但在大多数情况下,推荐使用ArrayList或LinkedList来代替它们。

26140

Java小技能:快速创建List常用几种方式

引言 集合概念: 在数学意义上概念是:对个数据放置在一起而建立起来模型,这些数据类型可以不同; 软件定义,一堆数据放置一个空间中存储,整个存储空间称为集合。...集合默认空间为10. ArrayList 是非线程安全 集合遍历过程,不能使用ArrayList本身方法删除和添加元素。...LinkedList是非线程安全集合遍历过程,不能使用ArrayList本身方法删除和添加元素。...stack.push("B"); stack.push("C"); //出栈 System.out.println(stack.pop());// E pop() 从此双端队列所表示堆栈中弹出一个元素...stack.push("B"); stack.push("C"); //出栈 System.out.println(stack.pop());// E pop() 从此双端队列所表示堆栈中弹出一个元素

3.5K10

Java编程思想第五版(On Java8)(十二)-集合

本章介绍 Java 集合基本知识,并重点介绍一些典型用法。这里专注于日常编程中使用集合。...在运行时,当尝试 Orange 对象转为 Apple 时,会出现输出显示错误泛型章节,你将了解到使用 Java 泛型来创建可能很复杂。但是,使用预先定义泛型却相当简单。...尖括号括起来类型参数(可能会有多个),它指定了这个集合实例可以保存类型。 通过使用泛型,就可以在编译期防止错误类型对象放置到集合。...有了 ArrayList 声明类型指定,编译器会阻止 Orange 放入 apples ,因此,这会成为一个编译期错误而不是运行时错误。 使用泛型,从 List 获取元素不需要强制类型转换。...名称后面的 告诉编译器这是一个参数化类型,而其中类型参数 T 会在使用时被实际类型替换。基本上,这个声明“我们定义一个可以持有 T 类型对象 Stack 。”

2.2K41

数据结构思维 第六章 树遍历

6.6 Java 我解释 DFS 迭代版本之前,我解释栈数据结构。我们将从栈一般概念开始,我将使用小写s指代“栈”。...通常惯例,它提供: push:它将一个元素添加到栈顶。 pop:它从栈删除并返回最顶部元素。 peek:它返回最顶部元素而不修改栈。 isEmpty:表示栈是否为空。...使用栈 API,这种错误字面上是不可能。避免错误最佳方法是使它们不可能。 如果一个数据结构提供了小型 API,那么它更容易实现。例如,实现栈简单方法是单链表。...并且小心不要在错误地方添加元素,或以错误顺序删除它们。 Java 提供了一个Stack,它提供了一组标准栈方法。... Java , Deque接口提供push,pop,peek和isEmpty,因此你可以Deque用作栈。

80320

Collection实现解析ArrayList,LinkedList,Vector

LinkedList,Vector特性 /** * 有序集合List接口实现LinkedLIst,ArrayList,Vector,Stack * (1)ArrayList...是最常用List实现,内部是通过数组实现,它允许对元素进行快速随机访问, * 当数组大小不满足时会增加存储能力,已有数组数据复制到新存储空间中。...但实现同步需要很高花费, 因此,访问它比访问ArrayList慢。 * 2.1 Vector和ArrayList更多元素添加进来时会请求更大空间。...* (5)Stack堆栈继承Vector,它总是对列表尾部数据进行操作,采用了先进后出策略,自定义了push(),peek(),pop(),empty(),search()几个方法。...list=new Stack(); initCollection(list); System.out.println("pop :"+list.pop());// pop

12840

模拟面试一(Java)

git commit - 暂存区内容添加到仓库。 最后推向远程代码库 git push 上传远程代码并合并 重写重载区别 重写即子类重写父方法,方法对应形参和返回值类型都不能变。...重载即在一个,方法名相同,参数类型或数量不同。...通过核心控制器找到适配器,调用实现对应接口处理器,并将结果返回给适配器, 适配器获取数据返回给核心控制器 核心控制器获取数据传递给视图解析器,并获取解析得到结果 核心控制器结果返回给客户端...delete和truncate区别 delete是数据操纵语言(DML),其按行删除,支持where语句,执行操作采用行锁,执行操作时会将该操作记录在redo和undo,因此支持回滚。...不可变对象; 互斥锁; ThreadLocal 对象; CAS; 六度人脉理论 1929年,匈牙利作家Frigyes Karinthy短篇故事‘Chains’首次提出“六度人脉理论”,是指地球上所有的人都可以通过六层以内熟人链和任何其他人联系起来

88540

Queue 相关数据结构原理与实现 (LinkedList, ArrayDeque, PriorityQueue)

除了实现 List 接口外,LinkedList 还为列表开头及结尾 get、remove 和 insert 元素提供了统一命名方法。这些操作允许链接列表用作堆栈、队列或双端队列。...indexOf(Object o): 返回此列表首次出现指定元素索引,如果此列表不包含该元素,则返回 -1。...它两个主要实现是 ArrayDeque 和 LinkedList。...例如创建一个存放 Integer 类型 Stack,只要在创建一个 ArrayDeque 变量作为属性,之后定义出栈、入栈,观察栈顶元素操作就直接操作 ArrayDeque 实例变量即可...(stack); System.out.println("After pushing 5 elements: " + stack); int m = stack.pop();

56530

Java中用Deque接口代替Stack接口完成栈功能

原因  那么为什么要这么做呢?首先,我们可以发现deque是继承自队列,而栈是继承自向量,这就比较奇怪了。   矢量是由数组实现集合,他包含了大量集合处理方法。...而Stack之所以继承Vector,是为了补充Vector方法,来实现进栈(push),出栈(pop)等操作。...这里就是Stack设计不好地方,既然只是为了实现栈,不用链表来单独该堆栈基于实现实现上效率纠正堆栈,另外因为继承矢量,堆栈可以替换向量大量方法,这使得Stack设计上不严谨,例如Vector...Deque  JavaDeuqe,即“双端队列”缩写,是Java双端串联集合类型,它集成了自定队列,完全具有普通FIFO功能,同时它也具有堆栈LIFO功能,并且保留了推弹出状语从句函数,...除了实现列表接口外,LinkedList还为列表开头及结尾得到,删除和插入元素提供了统一命名方法这些操作允许链接列表替换为可用、、或双端

1.6K30

C++和JavaSTL库入门

C++和JavaSTL库入门 STL简介 为什么使用STL STL基本概念 STL使用前初始化 C++里STL基本容器详解 Java里STL基本容器详解 参考会长大佬 https...为什么使用STL 在学习数据结构时候,程序中会使用到堆、栈、队列、链表等一些基本算法,而学习数据结构时候,这些基本算法写起来十分繁琐,如果不想写这些,那么就可以考虑一下STL了。...,第二个参数是数组需要排序第二个地址,都三个参数是一个自定义函数,对数组排序函数,上面的cmp函数是使数组元素从大到小排序。...q.push(1); // 1推入堆栈 q.pop(); // 推出堆栈最后元素 q.top(); // 堆栈最后元素 pair: 1.需要头文件#include...} vec.clear();//清空 } } ArrayList: Java.util.ArrayList是一个动态数组类型,也就是说,ArrayList对象既有数组特征,也有链表特征。

1.2K50

ArrayList Vector LinkedList(一)

实现List接口常用LinkedList,ArrayList,Vector和StackLinkedList   LinkedList实现了List接口,允许null元素。...基本push和pop方法,还有peek方法得到栈顶元素,empty方法测试堆栈是否为空,search方法检测一个元素堆栈位置。Stack刚创建后是空栈。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个...如果程序单线程环境,或者访问仅仅在一个线程中进行,考虑非同步,其效率较高,如果多个线程可能同时操作一个,应该使用同步。   ...比如,LinkList集合增加或移除集合任何位置元素所花费时间都是一样?

41560

集合框架

实现List接口常用LinkedList,ArrayList,Vector和StackLinkedList LinkedList实现了List接口,允许null元素。...基本push和pop方法,还有peek方法得到栈顶元素,empty方法测试堆栈是否为空,search方法检测一个元素堆栈位置。Stack刚创建后是空栈。...使用Hashtable简单示例如下,1,2,3放到Hashtable,他们key分别是”one”,”two”,”three”: 要取出一个数,比如2,用相应key: 由于作为key对象通过计算其散列函数来确定与之对应...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个...如果程序单线程环境,或者访问仅仅在一个线程中进行,考虑非同步,其效率较高,如果多个线程可能同时操作一个,应该使用同步

40450

Java容器List、ArrayList、Vector及map、HashTable、HashMap区别与用法

实现List接口常用LinkedList,ArrayList,Vector和StackLinkedList   LinkedList实现了List接口,允许null元素。...基本push和pop方法,还有peek方法得到栈顶元素,empty方法测试堆栈是否为空,search方法检测一个元素堆栈位置。Stack刚创建后是空栈。...如果相同对象有不同hashCode,对哈希表操作会出现意想不到结果(期待get方法返回null),要避免这种问题,只需要牢记一条:要同时复写equals方法和hashCode方法,而不要只写其中一个...如果程序单线程环境,或者访问仅仅在一个线程中进行,考虑非同步,其效率较高,如果多个线程可能同时操作一个,应该使用同步。   ...比如,LinkList集合增加或移除集合任何位置元素所花费时间都是一样?

1.4K80

Java基础——List接口

如上图:ArrayList, LinkedList, Vector, Stack是List4个常用实现。   ArrayList 是一个数组队列,相当于动态数组。...所以如果你要在集合中国保存大量数据那么使用Vector有一些优势。 Stack ----   它是vector子类,用于模拟栈这种数据结构,即“后进先出”。...进栈出栈都是Object,因此从栈取出元素后必须做类型转换,除非你只是使用Object具有的操作。...Stack提供了如下方法:   1、Object peek():返回栈第一个元素,但并不将该元素出栈。   2、Object pop():返回栈第一个元素,并将该元素出栈。   ...11、Object pollLast():获取并删除该队列最后一个元素,如果队列为空,则返回null。   12、Object pop():pop出该队列所表示栈第一个元素。

64420

深入理解JavaList、Set与Map集合

此外LinkedList提供额外get,remove,insert方法 LinkedList首部或尾部。...Stack Stack继承自Vector,实现一个后进先出堆栈。Stack提供5个额外方法使得 Vector得以被当作堆栈使用。...基本push和pop 方法,还有peek方法得到栈顶元素,empty方法测试堆栈是否为空,search方法检测一个元素堆栈位置。Stack刚创建后是空栈。...TreeSet描述是Set一种变体——可以实现排序等功能集合,它在将对象元素添加到集合时会自动按照某种比较规则将其插入到有序对象序列....作为key对象通过计算其散列函数来确定与之对应value位置,因此任何作为key对象都必须实现hashCode和equals方法。  Hashtable是同步

84240
领券