常见List面试问题
List的相关文章,没有太多想写的,早先的时候有提到过两篇
除此之外还有一些经常被问到的问题,我从Hollis的知识星期收集一下,用到这里,供一起学习
问题
- Java 中 Set 与 List 有什么不同?
相同点:都是继承Collection的接口,都是用来存储一组相同类型的元素
不同点:
- List有序存储,元素可重复
- Set无序存储,元素不可重复
注意:Set在插入时是要有一定的方法来判断元素是否重复的,这个方法很重要,决定了set种可以保存那些元素,Java中的HashSet使用的是HashMap来存储,弄明白HashMap原理之后就明白HashSet的原理了。
- Java中的List有几种实现,各有什么不同?
Vector,ArrayList,LinkedList 还差Vector没有说到,Vector实现方式与ArrayList类似,不过在方法上加了Synchronized关键字来保证现场安全。
ArrayList 是一个可改变大小的数组.当更多的元素加入到ArrayList中时,其大小将会动态地增长.内部的元素可以直接通过get与set方法进行访问,因为ArrayList本质上就是一个数组.
LinkedList 是一个双链表,在添加和删除元素时具有比ArrayList更好的性能.但在get与set方面弱于ArrayList.
当然,这些对比都是指数据量很大或者操作很频繁的情况下的对比,如果数据和运算量很小,那么对比将失去意义.
Vector 和ArrayList类似,但属于强同步类。如果你的程序本身是线程安全的(thread-safe,没有在多个线程之间共享同一个集合/对象),那么使用ArrayList是更好的选择。
Vector和ArrayList在更多元素添加进来时会请求更大的空间。Vector每次请求其大小的双倍空间,而ArrayList每次对size增长50%.
而 LinkedList 还实现了 Queue 接口,该接口比List提供了更多的方法,包括 offer(),peek(),poll()等.
注意: 默认情况下ArrayList的初始容量非常小,所以如果可以预估数据量的话,分配一个较大的初始值属于最佳实践,这样可以减少调整大小的开销。
- 什么是fail-fast,什么是fail-safe,有什么区别吗?
fail-fast字面意思,快速失败,也就是当集合类遇到数据问题时时立刻抛出异常,常规的集合类都是如此,在多线程同时操作时会立刻抛出concurrentmodificationexception
fail-safe当集合类在多线程环境下处理的时候,遇到问题时,不会抛出异常,而是继续执行下去。
以上是个人理解。
- 通过Array.asList获得的List有何特点,使用时应该注意什么?
Array.asList获取的列表,使用的是适配器模式,其List是Array内部的实现,内部的数据指向的还是数组,并且不支持插入,删除操作。
解:1. asList 得到的只是一个 Arrays 的内部类,一个原来数组的视图 List,因此如果对它进行增删操作会报错
- 用 ArrayList 的构造器可以将其转变成真正的 ArrayList
最后
以上是常问道的关于List相关的问题,一次小小的总结。
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
web8
web8 110 txt????http://120.24.86.145:8002/web8/ <?php extract($_GET); if (!empty($ac)) { $f = trim(file_get_contents($fn)); if ($ac === $f) { echo "<p>This is flag:" ." $flag</p>"; } else { echo "<p>sorry!</p>"; } } ?> extract() -使用数组键名作为变量名,使用数组键值作为变量值。针对数组中的每个元素,将在当前符号表中创建对应的一个变量. empty()-判断一个变量是否被认为是空的。当一个变量并不存在,或者它的值等同于FALSE,那么它会被认为不存在。如果变量不存在的话,empty()并不会产生警告。 trim()-移除字符串两侧的空白字符或其他预定义字符。 file_get_contents-将整个文件读入一个字符串 可知,获取flag要使ac不为空,f 的值从文件fn中获取,并且ac===f 姿势1...
- 下一篇
Node.js 常用工具util包
Node.js 常用工具 util 是一个Node.js 核心模块,提供常用函数的集合,用于弥补核心JavaScript 的功能 过于精简的不足。 util.isError(obj); util.isDate(obj); util.inherits(constr,super); util.isRegExp(/some regexp/); util.isArray(obj); util.inspect(obj); util.inherits util.inherits(constructor, superConstructor)是一个实现对象间原型继承 的函数。 JavaScript 的面向对象特性是基于原型的,与常见的基于类的不同。JavaScript 没有 提供对象继承的语言级别特性,而是通过原型复制来实现的。 在这里我们只介绍util.inherits 的用法,示例如下: var util = require('util'); function Base() { this.name = 'base'; this.base = 1991; this.sayHello = functi...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- Windows10,CentOS7,CentOS8安装Nodejs环境
- Docker安装Oracle12C,快速搭建Oracle学习环境
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- CentOS8编译安装MySQL8.0.19
- MySQL8.0.19开启GTID主从同步CentOS8
- CentOS8安装Docker,最新的服务器搭配容器使用
- CentOS8,CentOS7,CentOS6编译安装Redis5.0.7
- SpringBoot2整合Redis,开启缓存,提高访问速度
- CentOS7,8上快速安装Gitea,搭建Git服务器
- Docker使用Oracle官方镜像安装(12C,18C,19C)