抽象类和接口的区别
声明方法的存在而不去实现的类是抽象类, 接口是抽象类的变体
- 自定义类可以实现多个接口, 但只能继承一个抽象类
- 接口内变量默认为 public static final 修饰的常量
-
运行时异常, 一般异常的区别
运行时异常是不需要用户处理的, 是程序运行的时候jvm抛出的异常
- 一般异常(编译时异常)是方法编译时可能抛出的异常, 需要用户处理
- 运行时异常在编写方法的时候不会被抛出, 一般异常是在编写方法的时候必须捕获或者抛出
- Error是Jvm中出现的重大错误
Excption分为三种 : 运行时期异常 一般异常(编译时期异常)
Collection和Collections的区别
Collection是集合类的父级接口, 下边实现的有set, list集合
Collections是集合类的一个辅助工具类, 可以帮助实现集合类的排序, 反转, 搜索, 程安全化等一系列功能操作集合类: List, Set, Queue, Map, Stack 的特点
List
有序可重复的集合, 可以在任意位置添加和删除元素, 使用Iterator可以实现单向遍历, 使用ListIterator可以实现双向遍历
Set
无序不可重复且集合中最多有一个null元素, 只能用Iterator实现单向遍历
Map
以键值对形式存储数据, key 值不可重复, value 可重复. 所以 keySet() 返回的是set集合, values() 返回的是collection集合
可以用 Iterator 实现单向遍历, 也可以使用 entrySet() 方法将Map 解构成一个个键值对放入 Set 集合, 然后进行遍历Queue
Stack
ArrayList, LinkedList, Vector 的储存性能和特性
ArrayList 和 Vector 底层都是用数组实现, 所以可以按索引直接获取元素, 但插入与删除会涉及到数组左移, 右移, 复制等操作, 所以查询快而增删慢.
Vector 使用了 Synchornized 方法(同步锁, 线程安全), 所以性能比 ArrayList 差.
LinkedList 实现了 List + Queue 双接口, 使用双向链表实现存储, 按序号索引需要向前或向后遍历, 但插入或删除数据只需要修改当前元素的前后项即可, 所以 LinkedList 增删快而查询慢ArrayList初始容量与扩容
初始容量为10
当ArrayList大小 >= 当前容量时扩容(当前容量+当前容量 > 1)
hashmap的扩容原理
hashmap的默认加载因子为0.75
- 当hashmap大小 >= 当前容量 * 加载因子时就会扩容(调用resize()方法)
- resize() 方法会新建一个容量为当前容量2倍的entry数组(上限2^30),然后将数据转存到新的entry数组中,最后修改阈值(扩容后容量*加载因子)
扩容后重新计算下标位置(下标位置通过 哈希值与数组长度的与运算得出)
hashmap 1.7与1.8的区别
hashMap采用链地址法解决哈希冲突(即数组+链表)
1.7底层是list+链表
- 1.8底层时list+链表(当链表长度>=8时转为红黑树,<=6时再转为链表)
- 阈值设为8的原因 :
- 当链表的长度比较小的时候,时间复杂度相差不会太多
- TreeNode是Node所占空间的2倍
- 阈值设为8的原因 :
concurrenthashmap怎么实现线程安全
https://blog.csdn.net/qq_41737716/article/details/90549847?ops_request_misc={“request_id”%3A”163996167116780271532254”%2C”scm”%3A”20140713.130102334.pc_all.”}&request_id=163996167116780271532254&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2allfirst_rank_ecpm_v1~rank_v31_ecpm-1-90549847.pc_search_result_cache&utm_term=concurrenthashmap怎么实现线程安全&spm=1018.2226.3001.4187
HashTable 和 HashMap 区别
- HasnTable 线程安全, HashMap 线程不安全
HashTable 不允许有 null 值, HashMap 允许有一个 key 为 null, value 可以有多个 null
Comparable和Comparator接口的区别
Comparator接口中的抽象方法是compare()方法, Comparable接口只有未实现的compareTo()方法
- Comparable接口中的方法compareTo(T o), 当需要对某个类的对象进行排序时, 该类需要实现Comparable接口并重写compareTo(T o)方法, 它强行将实现它的每一个类的对象进行整体排序称为该类的自然排序, 实现此接口的对象列表和数组可以用Collections.sort()和Arrays.sort()进行自动排序, 也就是说, 只要实现了这个接口的对象(数组)就相当于有了排序的能力
- Comparator接口是外部的比较器, 针对一些本身没有比较能力的对象(数组)为它们实现比较的功能
Collections.sort(List