菜鸟刷面试题(五、Java容器篇)
目录:
- java 容器都有哪些?
- Collection 和 Collections 有什么区别?
- List、Set、Map 之间的区别是什么?
- HashMap 和 Hashtable 有什么区别?
- 如何决定使用 HashMap 还是 TreeMap?
- 说一下 HashMap 的实现原理?
- 说一下 HashSet 的实现原理?
- ArrayList 和 LinkedList 的区别是什么?
- 如何实现数组和 List 之间的转换?
- ArrayList 和 Vector 的区别是什么?
- Array 和 ArrayList 有何区别?
- 在 Queue 中 poll()和 remove()有什么区别?
- 哪些集合类是线程安全的?
- 迭代器 Iterator 是什么?
- 怎么确保一个集合不能被修改?
java 容器都有哪些?
Collection、Map:
Collection:
- List:有序集合。
- ArrayList:基于数组实现的有序集合。
- LinkedList:基于链表实现的有序集合。
- Vector:矢量队列
- Set:不重复集合。
- HashSet:基于hash实现的不重复集合,无序。
- LinkedHashSet:基于hash实现的不重复集合,有序。
- SortedSet:可排序不重复集合。
- NavigableSet:可导航搜索的不重复集合。
- TreeSet:基于红黑树实现的可排序不重复集合。
- HashSet:基于hash实现的不重复集合,无序。
- Queue:队列。
- BlokingQueue:阻塞队列。
- Deque:可两端操作线性集合。
Map:键值映射集合。
- HashMap:类似Hashtable,但方法不同步,key、value可为null。
- LinkedHashMap:根据插入顺序实现的键值映射集合。
- Hashtable:基于哈希表实现的键值映射集合,key、value均不可为null。
- IdentityHashMap:基于哈希表实现的键值映射集合,两个key引用相等==,认为是同一个key。
- SortedMap:可排序键值映射集合。
- NavigableMap:可导航搜索的键值映射集合。
- WeakHashMap:弱引用建,不阻塞被垃圾回收器回收,key回收后自动移除键值对。
Collection 和 Collections 有什么区别?
Collection是java有序集合中最根本的接口定义,Collections是java有序集合的工具类。
List、Set、Map 之间的区别是什么?
List:有序集合,元素可重复。
Set:元素不能重复,LinkedList按照元素插入数据排序,SortedSet可排序,HashSet无序。
Map:键值对集合,key无序且唯一,value不要求有序且允许重复。
HashMap 和 Hashtable 有什么区别?
- 线程安全:HashMap线程不安全;Hashtable线程安全。
- 允许有null值:HashMap允许key、value为null;Hashtable不允许key、value为null。
- 迭代器:HashMap的Iterator是fail-fast迭代器;Hashtable还使用了enumerator迭代器。
- hash的计算方式:HashMap计算了hash值;Hashtable使用了key的hashCode方法。
- 默认容器大小和扩容方式:HashMap默认初始大小16,容量必须是2的整数次幂,扩容时将容量变为原来的2倍;Hashtable默认初始大小11,扩容时将容量变为原来的2倍加1。
- contains方法:HashMap没有contains方法;Hashtable包含contains方法,类似于containsValue。
- 父类:HashMap继承自AbstractMap;Hashtable继承自Dictionary。
如何决定使用 HashMap 还是 TreeMap?
HashMap基于数组和链表,TreeMap基于红黑树。
因HashMap不支持排序,而TreeMap默认按照key升序排序的,所以在没有排序要求的情况下使用HashMap会有更好的性能。
说一下 HashMap 的实现原理?
1.8以前HashMap使用的是数组+链表的方式实现,首先它会拿到key值计算hash值,确认hash值后再将数据放到对应的槽中。
既然是计算hash值来找槽的话,那必然就会有hash冲突,java中解决hash冲突是采用链表的方式,也就是说具有向hash值key会放到同一个链表中。
而当HashMap数据过大的话势必会产生链表长度多大,导致访问数据过慢。
所以在1.8+的HashMap会在链表长度超过8的时候,将链表转为红黑树。
说一下 HashSet 的实现原理?
HashSet 是基于 HashMap 实现的,查询速度特别快。
ArrayList 和 LinkedList 的区别是什么?
实现:ArrayList基于动态数组;LinkedList基于链表。
随机访问:ArrayList随机访问速度快(下标访问);LinkedList随机访问速度慢(链表需要遍历全表)。
插入、删除数据:ArrayList插入删除会移动数组速度慢;LinkedList只需改变前后链表的引用速度快。
如何实现数组和 List 之间的转换?
array to list:Arrays.asList();
list to array:List.toArray();
ArrayList 和 Vector 的区别是什么?
相同点:
- 都基于数组实现,动态扩容。
- 功能相同,操作方法类似。
区别:
- ArrayList是线程不安全的,Vector是线程安全的;ArrayList性能优于Vector。
- 默认容器大小都是10,ArrayList扩容50%,Vector扩容一倍且可指定扩容大小。
Array 和 ArrayList 有何区别?
Array是数组,ArrayList是Array的扩展,实现了动态扩容。
在 Queue 中 poll()和 remove()有什么区别?
remote未找到元素会抛出异常,poll未找到只会返回null。
哪些集合类是线程安全的?
- Vector
- Stack
- Hashtable
- java.util.concurrent 包下所有的集合类 ArrayBlockingQueue、ConcurrentHashMap、ConcurrentLinkedQueue、ConcurrentLinkedDeque...
迭代器 Iterator 是什么?
用于顺序访问集合对象的元素,无需知道集合对象的底层实现。
优点:Iterator 是可以遍历集合的对象,为各种容器提供了公共的操作接口,隔离对容器的遍历操作和底层实现,从而解耦。
缺点:缺点是增加新的集合类需要对应增加新的迭代器类,迭代器类与集合类成对增加。
怎么确保一个集合不能被修改?
使用Collections.unmodifiableList()方法。
public class TestCollectionUnmodify {
static List<String> list = new ArrayList<String>();
static Set<String> set = new HashSet<String>();
static Map<String, String> map = new HashMap<String, String>();
static {
list.add("1");
list.add("2");
list.add("3");
set.add("1");
set.add("2");
set.add("3");
map.put("1", "1");
map.put("2", "2");
map.put("3", "3");
}
public static void main(String[] args) {
list = Collections.unmodifiableList(list);
set = Collections.unmodifiableSet(set);
map = Collections.unmodifiableMap(map);
listModify();
setModify();
mapModify();
}
public static void listModify() {
list.add("4");
}
public static void setModify() {
set.add("4");
}
public static void mapModify() {
map.put("3", "4");
}
}
菜鸟刷面试题(五、Java容器篇)的更多相关文章
- java容器篇
引言 第三天卡... 今天主要看了下java容器方面的知识,很累但是很充实.吃两把鸡去了,休息一下,再战. 开始 -Collection 存储对象的集合:Map 存储键值对的映射表 -Itera ...
- 菜鸟刷面试题(一、Java基础篇)
目录: JDK 和 JRE 有什么区别? == 和 equals 的区别是什么? 两个对象的 hashCode()相同,则 equals()也一定为 true,对吗? final 在 java 中有什 ...
- 菜鸟刷面试题(四、Spring/Spring MVC/Spring Boot/Spring Cloud篇)
目录: 为什么要使用 spring? 解释一下什么是 aop? 解释一下什么是 ioc? spring 有哪些主要模块? spring 常用的注入方式有哪些? spring 中的 bean 是线程安全 ...
- 菜鸟刷面试题(三、Redis篇)
目录: redis是什么?都有哪些使用场景? redis有哪些功能? redis和memecache有什么区别? redis为什么是单线程的? 什么是缓存穿透?怎么解决? redis支持的数据类型有哪 ...
- 菜鸟刷面试题(二、RabbitMQ篇)
目录: rabbitmq 的使用场景有哪些? rabbitmq 有哪些重要的角色? rabbitmq 有哪些重要的组件? rabbitmq 中 vhost 的作用是什么? rabbitmq 的消息是怎 ...
- Java面试题(Java Web篇)
Java Web 64.jsp 和 servlet 有什么区别? jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将 ...
- Regex阅读笔记(五)java操作篇
首先一个demo程序 Java的正则表达式包为java.util.regex,主要是使用其中的Pattern和Matcher. groupCount方法时候都可调用,而大多数方法都必须在匹配尝试成功之 ...
- Java面试题(Java基础篇)
Java 基础 1.JDK 和 JRE 有什么区别? JDK:Java Development Kit 的简称,java 开发工具包,提供了 java 的开发环境和运行环境. JRE:Java Run ...
- Java面试题(容器篇)
容器 18.java 容器都有哪些? 如图: 首先分为Collection.Map: Collection下分为List.Set和Queue: List下分为ArrayList和LinkedLis ...
随机推荐
- HDU 1325 有根树的判断
Is It A Tree? Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total ...
- php实现只需要一个QQ号就可以获得用户信息
<?php // 通过QQ号即可获取用户信息 // 获取QQ头像接口 // http://q1.qlogo.cn/g?b=qq&nk=QQ号&s=100&t=154790 ...
- k8s之调度器、预选策略及优选函数
1.调度器(scheduler) 调度器的功能是调度Pod在哪个Node上运行,这些调度信息存储在master上的etcd里面,能够和etcd打交道的只有apiserver; kubelet运行在no ...
- 牛客 201 J Princess Principal (括号, 栈模拟)
大意: 给定序列$a$, $a_i$为偶数代表第$\frac{a_i}{2}$种左括号, 否则为第$\frac{a_i-1}{2}$种右括号. 询问区间是否是合法括号序列. #include < ...
- vue开发中利用正则限制input框的输入(手机号、非0开头的正整数等)
我们在前端开发中经常会碰到类似手机号输入获取验证码的情况,通常情况下手机号的输入需要只能输入11位的整数数字.并且需要过滤掉一些明显不符合手机号格式的输入,那么我们就需要用户在输入的时候就控制可以输入 ...
- 【原创】编程基础之Jekins
Jenkins 2.164.2 官方:https://jenkins.io 一 简介 Build great things at any scale The leading open source a ...
- python selenium2 模拟点击+拖动 测试对象 58同城验证码
#!/usr/bin/python # -*- coding: UTF-8 -*- # @Time : 2019/12/5 17:30 # @Author : shenghao/10347899@qq ...
- 初学java2 认识面向对象 以及运算符 输入输出
面向对象 面向对象是一种程序设计思路,在设计一个程序时不需要考虑内部如何实现,只需要想他要实现什么功能 就像在餐馆点菜一样,你不需要知道他应该怎么做,你只需要决定你要吃什么 面向对象三大特征 继承 封 ...
- 关于阮一峰老师es6(第三版)中管道机制代码的理解浅析
最近正在学习阮一峰老师的es6(第三版)教材,在学到第七章<函数的扩展>中的箭头函数嵌套时,文中提到了一个关于“管道机制”的示例,文中源代码如下: //es6(第三版)教材中的管道机制源代 ...
- 单变量图形的pandas方法
数据加载与展示: 1. 类别数据的Bar图 1.1 每一类对应有多少个 1.2 每类数量占整体的比值 1.3 对X轴进行排序