java面试题整理

【java面试题整理】一.ArrayList、LinkedList 和 Vector 的区别 。
1.ArrayList非线程安全的 , Vector是线程安全的 。
2.ArrayList扩容时按照50%增加 , Vector按照100%增加 。
3.ArrayList的性能要高于Vector
4.LinkedList是链表实现的 , 因此查询慢 , 增删快 。
5.LinkedList提供了List接口没有提供的方法 , 方便数据的头尾操作 。
二.快速失败 (fail-fast) 和安全失败 (fail-safe) 的区别是什么?
1.快速失败:如果用迭代器遍历集合时 , 如果集合内容发生了改变 。 这时会抛出一个ConcurrentModificationException.
2.安全失败:迭代器遍历时用的是原集合的拷贝 , 因此改变原集合不会引起一场 , 但是这样也就无法感知原集合的变化了 。
三.hashmap的数据结构
1.是由数组和链表/红黑树组成的 , 链表的数据多了就会转为红黑树 。 转换的阈值是8.
2.通过key的hashcode取模数组长度来确定将数据放到哪里
3.如果存放的位置已经有了数据了就形成链表向后放 , node记录了next的节点 。
4.默认初始容量是16 , 加载因子是0.75.意味着容量超过75%就会扩容一倍
5.key的equals用来确定在链表中是否有相同的key
四.List、Map、Set 三个接口 , 存取元素时 , 各有什么特点?
1.list可以有重复的元素 , 可以通过执行索引取元素 , 也可以在指定的位置存放元素
2.map键值对的方式存取元素 , key不可以重复 , 可以通过key获取指定的键值对
3.set不允许存重复的元素 , 也就是equals相同的对象 , 也无法获取指定的元素 。 只能通过遍历 。
五.两个对象值相同 (x.equals(y) == true) , 但却可有不同的 hash code , 这句话对不对?
1.分不同的情况 , 如果对象的equals没有被重写的话 , 那么equals都是继承的Object的 。 即为== , 也就是说equals相同证明了是同一个对象 , hashcode也一定相同 。
2.针对上面的这种规范 , java倡导如果equals被重写了那么hashcode也要重写 。 以此来保证equals相同时hashcode也相同
3.而这个问题是对的 , 因为如果不遵守这个规范 , 当然equals相同hashcode可以不同了 。
六.Java 集合类框架的基本接口有哪些?
java面试题整理文章插图
add,addAll,clear,contains,containsAll,remove,removeAll
java面试题整理文章插图
clear,containsKey,containsValue,get,put
七.HashSet 和 TreeSet 有什么区别?
1.HashSet是无序的 , 可以有一个null , 非同步 。 TreeSet是有序的 , 不能有null , 通过compare方法决定放置的位置 。 TreeSet有两种排序方法:自然排序、自定义排序
2.HashSet是通过哈希表实现的、TreeSet二叉树实现的
八.HashSet的底层实现是什么?
1.通过hashmap来实现的 , 用key来存储数据 , 保证key的唯一性
九.LinkedHashMap 的实现原理?
hashmap+双向链表实现的 , 是有序的 , 分为插入顺序和访问顺序 。
十.为什么集合类没有实现 Cloneable 和 Serializable 接口?
应该有具体的实现来完由
十一.什么是迭代器?
为了方便容器的遍历 , 和具体的容器进行解耦 。 提供了公共的实现方法 。
十二.Iterator 和 ListIterator 的区别是什么?
Iterator是一个接口 , ListIterator是对它的具体实现
十三.数组 (Array) 和列表 (ArrayList) 有什么区别?
1.Array是定长的 , ArrayList是变长的 。
2.Array适合处理不变的数据 , ArrayList提供的方法更丰富 。


推荐阅读