面试题-容器1

1、java容器都有哪些?
  • Collection:List、Queue、Set
  • List:Vector、ArrayList、LinkedList
  • Queue:LinkedList、Priority Queue
  • Vector:Stack
  • Set:HashSet、TreeSet
  • HashSet:LinkHashSet
  • Map:HashMap、TreeMap
2、Collection和Collections有什么区别?
  • java.util.Collection是一个集合接口。提供了List、Queue、Set等对象基本操作的通用接口方法。直接继承的接口有List和Set。
  • Collections是集合类的一个工具类,提供了一系列静态方法。包括对集合中元素进行排序、搜索以及线程安全的操作。
3、HashMap和HashTable有什么区别?
  • HashMap去掉了HashTable的contains方法,但是加上了containsKey()和containsValue()方法。
  • HashTable是同步的,HashMap是非同步的,效率上HashMap要高;
  • HashMap允许空键值,HashTable不允许。
4、如何决定使用HashMap还是TreeMap?

如果要插入、删除和定位元素的操作,HashMap是最好的选择。
如果要对一个有序的key集合进行遍历,TreeMap是最好的选择。

5、HashMap的实现原理
  • HashMap的数据结构:是数组和链表的结合体。
  • 当我们向HashMap中put元素时,首先根据key的hashcode重新计算hash值,根据hash值得到这个元素在数组中的位置,如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放到链头,最先加入的放到链尾。如果数组中该位置没有元素,就直接将该元素放到数组的该位置上。
  • 当链表节点数据超过8个之后,该链表会转为红黑树来提高查询效率。
6、HashSet的实现原理
  • HashSet底层是由HashMap实现;
  • HashSet的值存放于HashMap的key上;
  • HashMap的value统一为PRESENT。
private static final Object PRESENT = new Object();
7、ArrayList和LinkedList区别是什么?
  • ArrayList的底层是数组,支持随机访问,根据下标访问一个元素,时间复杂度是O(1);
  • LinkedList底层是双向循环链表,不支持随机访问,时间复杂度是O(n)。
8、如何实现数组和List之间的转换?
  • List转换为数组:ArrayList的toArray方法;
  • 数组转化为List:Arrays的asList方法。
9、ArrayList和Vector的区别?
  • Vector是同步的,ArrayList不是。
  • ArrayList比Vector更快,Vector有同步,不会过载。
10、Array和ArrayList的区别?
  • Array可以容纳基本类型和对象,ArrayList只能容纳对象;
  • Array是指定大小的,ArrayList大小是固定的;
  • Array没有提供ArrayList的诸多功能,如addAll、removeAll和iterator等。
11、在Queue中poll()和remove()有什么区别?

poll()和remove()都是从队列中取出一个元素,如果poll()失败返回空,remove()失败抛出异常。

12、哪些集合类是线程安全的?
  • Vector:比ArrayList多了一个同步化机制,因为效率低所以不太使用。
  • Stack:堆栈类,先进后出。
  • Enumeration:枚举,相当于迭代器。
  • HashTable:比HashMap多了线程安全。
13、迭代器Iterator是什么?

迭代器是一种设计模式,是一个对象,可以遍历并选择序列中的对象。

14、迭代器Iterator怎么使用?有什么特点?

java中Iterator只能单项移动:

  • 使用方法iterator()要求容器返回一个Iterator对象。第一次调用next()方法时,返回序列的第一个元素。
  • 使用next()获取下一个元素;
  • 使用hasNext()检查序列中是否还有元素;
  • 使用remove()将迭代器新返回的元素删除。

你可能感兴趣的:(java,面试题,容器)