java集合常见面试题
1、 Array和ArrayList的区别,什么时候更合适用Array
a) Array是数组,可以容纳基本类型和对象,而ArrayList是集合,只能容纳对象
b) Array是指定大小的,而ArrayList的大小是动态的
c) Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等,
d) 适合用Array的情况
i. 如果列表的大小已经指定,大部分情况下是储存和遍历他们
ii. 对于遍历基本数据类型,尽管Collections使用自动装箱来减轻编码任务,在指定大小的基本类型的列表上ArrayList的工作也会变得很慢
iii. 如果你需要使用多维数组,使用[ ][ ]比List<List<>>更简单
2、 ArrayList和Vector的区别
1) Vector是线程同步的,所有它也是线程安全的,而ArrayList是线程异步的,是不安全的。如果不考虑到线程的安全因数,一般用ArrayList效率比较高。
2) 如果集合中的元素数目大于目前集合数组的长度时,vector增长率为目前数组长度的100%,而ArrayList增长率为目前数组长度的50%。在数据量变化比较大的情况下,用vector有一定优势
3、 ArrayList和LinkedList的区别
a) ArrayList是实现了基于动态数组的数据结构,LinkedList是基于链表的数据结构
b) 对于随机访问get和set,ArryList要优于LinkedList,因为LinkedList要移动指针
c) 对于新增和删除操作add和remove,linkedList比较占优势,因为ArrayList要移动数据。这一点要看实际情况,如果只对单条数据插入或删除,ArrayList的速度反而优于LinkedList。但批量随机插入,则考虑LinkedList。因为ArrayList每插入一条数据,要移动插入点及之后的所有数据。
4、 Lsit、set和map的区别
a) List (实现了collection接口)
i. 可以允许有重复的对象
ii. 可以插入多个null元素
iii. 是一个有序容器,保持了每个元素的插入顺序
b) Set(实现了collection接口)
i. 不允许重复对象
ii. 无序的容器,无法保证每个元素的储存顺序;而TreeSet可以通过Comparator或Comparable进行顺序排序
iii. 只允许一个null元素
iv. LinkedHashSet按照元素的插入顺序对它们进行存储
c) Map(不是collection的子接口或实现类。Map是一个接口)
i. Map是以键值对的存储方式存放数据,key是唯一的,value可以重复
ii. Map中可以有多个null值,但只能有一个null键
iii. TreeMap也可以通过comparator或者comparable维护排序顺序
5、 HashMap和HashTable的区别
a) Hashtable是线程安全的,同步的;而hashMap是线程不安全不同步的
b) HashMap允许存在一个null的key,多个null的value;而hashtable的key和value都不允许为null
6、 HashMap和TreeMap的区别
a) HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果,你就应该使用TreeMap(HashMap中元素排列是无序的)
b) 在Map中插入、删除和定位元素,HashMap的最好的选择,但如果您需要按自然顺序或自定义顺序遍历Map,那么就使用TreeMap。使用HashMap要求作为key的类中明确重写了hashCode()和equals()方法。
(两个map中的元素一样,但顺序不一样,会导致hashCode()不一样:
测试:
在hashMap中,同样的值的map,顺序不同,equals时为false;
在treeMap中,同样的值的map,顺序不同,equals时为true,说明treeMap在equals()时是整理了顺序的。
)
7、 Set里的元素是不能重复,那么用什么方法来区分重复与否呢?是用==还是用equals()?
a) Set里的元素是不能重复的,用equals()方法来区分重复与否;
b) ==:
i. 判断基本类型时,比较的是 值 是否相同
ii. 引用类型时,比较的是地址是否相同
c) Equals:
i. 只能判断引用类型,默认情况下比较的是地址,可以进行重写,比较的是:对象的成员变量值是否相同
8、 Collection和Collections的区别:
a) Java..util.Collection是一个接口(集合顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection接口在java类库中有很多集合的实现,其直接继承collection接口有List和Set
b) Collections则是集合类的一个工具类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索及线程安全等操作。
9、 说出ArrayList、linkedList的存储性能和特性
a) ArrayList采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,优点是索引读取快,从最后插入和删除元素速度快,但是头部插入和删除速度慢
b) LinkedList使用双向循环链表方式存储数据,所以头尾插入或读取的速度快,而中部插入速度慢
10、 Enumeration和iterator接口的区别
a) Enumeration接口作用与iterator接口相似,但只提供了遍历vector和hashTable类型集合元素的功能,不支持元素的移除操作
b) Enumeration速度是iterator的2倍,同时占用更少的内存。但是,iterator远比enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,iterator允许调用者删除底层集合里面的元素。
11、 Listiterator有什么特点,与iterator区别
a) Iterator是ListIterator的父类接口
b) Iterator是单列集合(Collection)公共取出容器中元素的方式,而ListIterator是List集合的特有取出元素方式
c) Iterator中具备的功能只有hashNext(),next(),remove();Listiterator中具备着对被遍历的元素进行增删查改的方法,可以对元素进行逆向遍历。
12、 Java中HashMap的key值要是为类对象,则该类需要满足什么条件?
a) 需要重写equals()和hashCode()方法
13、 ArrayList集合加入1万条数据,应该怎么提高效率?
a) 直接初始化ArrayList集合的初始化容量为1万。但达到100万以上乃至1000万以上时,初始化容量方法效率会下降
java集合常见面试题的更多相关文章
- java 集合 + 常见面试题
1.1. 集合概述 1.1.1. Java 集合概览 从下图可以看出,在 Java 中除了以 Map 结尾的类之外, 其他类都实现了 Collection 接口. 并且,以 Map 结尾的类都实现了 ...
- Java集合常见面试题集锦
1.介绍Collection框架的结构 集合是Java中的一个非常重要的一个知识点,主要分为List.Set.Map.Queue三大数据结构.它们在Java中的结构关系如下: Collection接口 ...
- java基础常见面试题,这是一篇超长的随笔!!!
1. Java基础部分....................................................... 4 1.一个".java"源文件中是否可以包括 ...
- 40道Java基础常见面试题及详细答案
最近看到网上流传着各种面试经验及面试题,往往都是一大堆技术题目贴上去,但是没有答案. 为此我业余时间整理了40道Java基础常见的面试题及详细答案,望各路大牛发现不对的地方不吝赐教,留言即可. 八种基 ...
- Java泛型常见面试题
怀着崇拜的心情读完这篇文章,却发现作者不是原创,而不标注转载~所以转载地址不详~ 1. Java中的泛型是什么 ? 使用泛型的好处是什么? 这是在各种Java泛型面试中,一开场你就会被问到的问题中的一 ...
- Java String常见面试题汇总
String类型的面试题 1. String是最基本的数据类型吗? 基本数据类型包括byte,int,char,long,float,double,boolean,short一共八个. ...
- Integer与String的知试点(java中常见面试题)
1.==符号使用 Integer a = 1000,b=1000; Integer c = 100,d=100; System.out.println(a==b); System.out.printl ...
- Java——多线程常见面试题
body, table{font-family: 微软雅黑} table{border-collapse: collapse; border: solid gray; border-width: 2p ...
- Java线程常见面试题
v 多线程实现手段: (1).继承Thread类 (2)实现Runable接口 (3)使用线程池 v 线程控制在那个包:java.util.concurrent. (1)提供了线程的运行.(2)线程池 ...
随机推荐
- 你不知道的JavaScript--Item15 prototype原型和原型链详解
用过JavaScript的同学们肯定都对prototype如雷贯耳,但是这究竟是个什么东西却让初学者莫衷一是,只知道函数都会有一个prototype属性,可以为其添加函数供实例访问,其它的就不清楚了, ...
- VS2012中出现“无法启动程序...debug\abc.exe,系统找不到指定文件”的问题!
VS 2005在生成可执行文件时使用了一种新的技术,该技术生成的可执行文件会伴随生成一个清单文件(manifest file)(.manifest后缀文件)(其本质上是XML文档,你可以用文本编辑器打 ...
- 嘿嘿嘿,开始自学mysql
开始学习mysql了,作为非计算机专业学生,必须需要一个地方来给自己的知识进行一些记录和总结. 一SQL语句 数据库是不认识java语言的,但是我们同样要与数据库交互,这时需要使用到数据库认识的语言S ...
- redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现
本次分享如何使用redis结合自定义注解实现基于方法的注解缓存,及托底缓存的实现思路 现在的互联网公司大多数都是以Redis作为缓存,使用缓存的优点就不赘述了,写这篇文章的目的就是想帮助同学们如 ...
- [UOJ#207. 共价大爷游长沙]——LCT&随机化
题目大意: 传送门 给一颗动态树,给出一些路径并动态修改,每次询问一条边是否被所有路径覆盖. 题解: 先%一发myy. 开始感觉不是很可做的样子,发现子树信息无论维护什么都不太对…… 然后打开题目标签 ...
- 【BZOJ 3626】 [LNOI2014]LCA【在线+主席树+树剖】
题目链接: TP 题解: 可能是我比较纱布,看不懂题解,只好自己想了…… 先附一个离线版本题解[Ivan] 我们考虑对于询问区间是可以差分的,然而这并没有什么卵用,然后考虑怎么统计答案. 首先LC ...
- BZOJ_1486_[HNOI2009]最小圈_01分数规划
BZOJ_1486_[HNOI2009]最小圈_01分数规划 Description Input Output Sample Input 4 5 1 2 5 2 3 5 3 1 5 2 4 3 4 1 ...
- 聊聊Socket、TCP/IP、HTTP、FTP及网络编程
1 这些都是什么 既然是网络传输,涉及几个系统之间的交互,那么首先要考虑的是如何准确的定位到网络上的一台或几台主机,另一个是如何进行可靠高效的数据传输.这里就要使用到TCP/IP协议. 1.1 TCP ...
- C++ bitset用法
概念: bitset是用来存储位的(其中的元素只有两种形式) 这个类通常用来模拟一个布尔数组,但对空间分配上进行了优化:通常,每个元素只占用一个bit ,而通常char类型是它的八倍 每个位置上的位都 ...
- shell与export命令
围绕以下几个问题来学习export命令: 1.什么是export命令? 2.为什么要用export命令? 3.怎么使用export命令? 1.什么是export命令? ♦ 用户登录到Linux系统后, ...