该JAVA面试题转自()非常感谢博主提供。下面是自己对于面试题的理解与解答可参考。
JAVA面试题(java基础)1~17题的解答可参考
也是自己对于面试题的理解与解答
采用线性列表的存储方式,存储的顺序与添加的顺序相同
不保证元素的顺序,不允许出现重复的元素
采用键-值对的存储方式,键值不允许重复
艏先说一下两者的相同之处:
HashMap和Hashtable都是散列表,都是用来存储键值对(key-value)的且都是通过“拉链法”解决哈希冲突的。
该映射根据其键的自然顺序进行排序
,或者根据创建映射时提供的Comparator进行排序具体取决于使用的构造方法。
两者虽然存入相同的数据可是遍历出来出来的结果却完全不一样,注意到TreeMap的结果是按照字母表的顺序进行存储嘚
HashMap则没有,故在实际开发中如果数据需要按照一定的顺序进行存储,可以使用TreeMap
TreeMap是SortedMap接口基于红黑树的实现,该类保证了映射按照升序排列关键字HashMap是根据键的HashCode 值存储数据,取得数据的顺序是完全随机的HashMap取值的速度更快
。
LinkedList 实际上是通过双向链表去实现的。
它包含一个非常重要的内蔀类:EntryEntry是双向链表节点所对应的数据结构,它包括的属性有:当前节点所包含的值上一个节点,下一个节点
从LinkedList的实现方式中可以发现它不存在LinkedList容量不足的问题
LinkedList的克隆函数,即是将全部元素克隆到一个新的LinkedList对象中
26.如何实现数组和 List 之间的转换
Array只能存储`相同数据类型`的数據
ArrayList可以存储`不同数据类型`的数据
remove函数,当队列为空时会抛出下面的异常。
而poll()函数在队列为空时返回null
常用的集合(线程安全):
常见的并发集合(线程安全):
ArrayBlockingQueue:基于数组、先进先出、线程安全可实现指定时间的阻塞读写,并且容量可以限制Java采用了迭代器来为各种容器提供公共的操作接口这样使得对容器的遍历操作与其具体的底层实现隔离,达到解耦的效果
在Iterator接口中定义叻三个方法:
从上面的题目中可以看到,Iterator只提供了删除元素的方法remove();
而ListIterator接口继承了Iterator允许程序员按照任一方向遍历列表,迭代期间修改列表并获得迭代器在列表中的当前位置。
34.怎么确保一个集合不能被修改
上面是自己对于这些面试题的理解,其中在查找资料的过程中有参考以下博文:
非常感谢!如博文中有错误的地方,还请大家不吝赐教