3) HashTable同步 , 而HashMap非同步 , 效率上比HashTable要高6.ConncurrentHashMap和hashtable比较两个线程并发访问map中同一条链 , 一个线程在尾部删除 , 一个线程在前面遍历查找 , 问为什么前面的线程还能正确的查找到后面被另一个线程删除的节点)ConcurrentHashMap融合了hashtable和hashmap二者的优势 。
hashtable是做了同步的 , 即线程安全 , hashmap未考虑同步 。所以hashmap在单线程情况下效率较高 。hashtable在的多线程情况下 , 同步操作能保证程序执行的正确性 。但是hashtable是阻塞的 , 每次同步执行的时候都要锁住整个结构 , ConcurrentHashMap正是为了解决这个问题而诞生的 , ConcurrentHashMap允许多个修改操作并发进行 , 其关键在于使用了锁分离技术(一个Array保存多个Object , 使用这些对象的锁作为分离锁 , get/put时随机使用任意一个) 。
它使用了多个锁来控制对hash表的不同部分进行的修改 。在JDK 1.6中 , 有HashEntry结构存在 , 每次插入将新添加节点作为链的头节点(同HashMap实现) , 而且每次删除一个节点时 , 会将删除节点之前的所有节点拷贝一份组成一个新的链 , 而将当前节点的上一个节点的next指向当前节点的下一个节点 , 从而在删除以后有两条链存 在 , 因而可以保证即使在同一条链中 , 有一个线程在删除 , 而另一个线程在遍历 , 它们都能工作良好 , 因为遍历的线程能继续使用原有的链 。
Java8中 , 采用volatile HashEntry保存数据 , table元素作为锁;从table数组 单向链表加上了红黑树 。红黑树是一种特别的二叉查找树 , 特性为:1.节点为红或者黑 2.根节点为黑 3.叶节点为黑 4.一节点为红 , 则叶节点为黑 5.一节点到其子孙节点所有路径上的黑节点数目相同 。7.ArrayList与 LinkedList 的区别?最明显的区别是ArrrayList 底层的数据结构是数组 , 支持随机访问 , 而 LinkedList 的底层数据结构书链表 , 不支持随机访问 。
使用下标访问一个元素 , ArrayList 的时间复杂度是 O(1) , 而 LinkedList 是 O(n) 。LinkedList是双向链表8.Java 中 , Comparator 与Comparable 有什么不同?Comparable 接口用于定义对象的自然顺序 , 是排序接口 , 而 comparator 通常用于定义用户定制的顺序 , 是比较接口 。
我们如果需要控制某个类的次序 , 而该类本身不支持排序(即没有实现Comparable接口) , 那么我们就可以建立一个“该类的比较器”来进行排序 。Comparable 总是只有一个 , 但是可以有多个 comparator 来定义对象的顺序 。9.抽象类是什么?它与接口有什么区别?你为什么要使用过抽象类?抽象类是指不允许被实例化的类;一个类只能使用一次继承关系 。
但是 , 一个类却可以实现多个interface 。abstract class和interface所反映出的设计理念不同 。其实abstract class表示的是"is-a"关系 , interface表示的是"like-a"关系实现抽象类和接口的类必须实现其中的所有方法 。抽象类中可以有非抽象方法 。接口中则不能有实现方法 。
但在Java8中允许接口中有静态默认的方法 。用抽象类是为了重用 。减少编码量 , 降低耦合性 。10.描述 Java 中的重载和重写?重载和重写都允许你用相同的名称来实现不同的功能 , 但是重载是编译时活动 , 而重写是运行时活动 。你可以在同一个类中重载方法 , 但是只能在子类中重写方法 。重写必须要有继承重写:1、在子类中可以根据需要对从基类中继承来的方法进行重写 。
推荐阅读
- 游戏界面设计流程,软件界面设计流程
- 小花仙怎么在手机上面玩,《小花仙大电影
- 骁龙高通性能怎么样,小米的K30怎么样
- 三星曲面小屏手机怎么样,三星S10e怎么样
- 10平方店面可以做什么生意好,将10元店生意做到极致
- 纪检监察面临新形势,如何认识纪检监察面临的形势
- 请问在手机界面怎么找到百度云下载的资料?
- 国产手机哪个曲面屏好,为什么那么多人不喜欢曲面屏
- 店面装修怎么办,商铺装修怎么做
- 公司季度总结怎么写,吧台季度总结怎么写