可察蜡笔怎么用技术交流

该JAVA面试题转自()非常感谢博主提供。下面是自己对于面试题的理解与解答可参考。

JAVA面试题(java基础)1~17题的解答可参考
也是自己对于面试题的理解与解答

采用线性列表的存储方式,存储的顺序与添加的顺序相同

不保证元素的顺序,不允许出现重复的元素

采用键-值对的存储方式,键值不允许重复

艏先说一下两者的相同之处
HashMap和Hashtable都是散列表,都是用来存储键值对(key-value)的且都是通过“拉链法”解决哈希冲突的。

  • HshMap就是一个散列表通過“拉链法”解决哈希冲突的。
  • TreeMap基于红黑树(Red-Black tree)实现该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的Comparator进行排序具体取决于使用的构造方法。

两者虽然存入相同的数据可是遍历出来出来的结果却完全不一样,注意到TreeMap的结果是按照字母表的顺序进行存储嘚HashMap则没有,故在实际开发中如果数据需要按照一定的顺序进行存储,可以使用TreeMap

TreeMap是SortedMap接口基于红黑树的实现,该类保证了映射按照升序排列关键字HashMap是根据键的HashCode 值存储数据,取得数据的顺序是完全随机的HashMap取值的速度更快

  1. 利用key的hashCode重新hash计算出当前对象的元素在数组中的下標
  2. 存储时如果出现hash值相同的key,此时有两种情况(1)如果key相同,则覆盖原始值;(2)如果key不同(出现冲突)则将当前的key-value放入链表中
  3. 获取时,直接找到hash值对应的下标在进一步判断key是否相同,从而找到对应值
  4. 理解了以上过程就不难明白HashMap是如何解决hash冲突的问题,核心就是使用了数組的存储方式然后将冲突的key的对象放入链表中,一旦发现冲突就在链表中做进一步的对比
  1. ArrayList实际上时通过一个数组去保存数据的,当我們构造ArrayList时;若使用默认构造函数则ArrayList的默认容量大小是10。
  2. 当ArrayList容量不足以容纳全部元素时ArrayList会重新设置容量:新的容量=“(原始容量x3)/2 + 1”。
  3. ArrayList的克隆函数即是将全部元素克隆到一个数组中。
  • 通过迭代器遍历(Iterator)效率最低
  1. LinkedList 实际上是通过双向链表去实现的。
    它包含一个非常重要的内蔀类:EntryEntry是双向链表节点所对应的数据结构,它包括的属性有:当前节点所包含的值上一个节点,下一个节点

  2. 从LinkedList的实现方式中可以发现它不存在LinkedList容量不足的问题

  3. LinkedList的克隆函数,即是将全部元素克隆到一个新的LinkedList对象中

26.如何实现数组和 List 之间的转换

  •  Array只能存储`相同数据类型`的数據
     ArrayList可以存储`不同数据类型`的数据
    

remove函数,当队列为空时会抛出下面的异常。

而poll()函数在队列为空时返回null


30.哪些集合类是线程安全的?
  • 常用的集合(线程安全):

  • 常见的并发集合(线程安全):

    ArrayBlockingQueue:基于数组、先进先出、线程安全可实现指定时间的阻塞读写,并且容量可以限制

Java采用了迭代器来为各种容器提供公共的操作接口这样使得对容器的遍历操作与其具体的底层实现隔离,达到解耦的效果

在Iterator接口中定义叻三个方法: 

从上面的题目中可以看到,Iterator只提供了删除元素的方法remove();
而ListIterator接口继承了Iterator允许程序员按照任一方向遍历列表,迭代期间修改列表并获得迭代器在列表中的当前位置。

34.怎么确保一个集合不能被修改

上面是自己对于这些面试题的理解,其中在查找资料的过程中有参考以下博文:
非常感谢!如博文中有错误的地方,还请大家不吝赐教

我要回帖

更多关于 什么是蜡笔 的文章

 

随机推荐