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面试题整理文章插图
【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提供的方法更丰富 。
十四.集合使用
java面试题整理文章插图
十五.Set 里的元素是不能重复的 , 那么用什么方法来区分重复与否呢?是用 == 还是 equals()?它们有何区别?
equals
十六.Comparable 和 Comparator 接口是干什么的?列出它们的区别?
如果想对一个对象进行排序 , 可以有两种方式 。 一个是这个对象实现comparable接口、另一个是单独写一个类 , 这个类实现Comprator接口 。 相当于一个在需要排序的内部实现 , 一个可以在外部实现 。
十七.Collection 和 Collections 的区别 。
Collection是集合的接口、Collections是操作集合的一个工具类
十八.java类加载过程?
1.加载->链接(验证、准备、解析)->初始化
2.加载:加载二进制流、静态结构转化为方法区和数据结构、生成类对象
十九.jvm加载class的原理和机制?
1.java通过双亲委派机制加载类 , 这样的好处是安全 。
2.有三个类加载器:系统类加载器(加载java的系统类)扩展类加载器(继承和实现的类)程序类加载器(程序员自定义的类)