第二个模块容器面试

容器

18. java 中容器都有哪些?

19. Collection 和 Collections 有什么区别?

  • - Collection 是以一个集合的接口(集合的顶尖接口)。它提供了对集合对象的基本操作。意义是为了各种具体的集合提供了最大化的同统一操作方法。
    - Collections 则是集合类的一个工具类,其中提供了一系列的静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作。

20. List、Set、Map 之间的区别是什么?

21. HashMap 和 Hashtable 有什么区别?

  • - hashTable 是线程安全(同步)的,而 hashMap 是非线程(安全)同步的,效率必 hashTable 要高。
    - hashMap 允许空键值对,而 hashTable 不允许。

22. 如何决定使用 HashMap 还是 TreeMap?

对于在 Map 中插入、删除和定位元素这类操作,HashMap 是最好的选择。然而,假如你需要对一个有序的 key 集合进行遍历,TreeMap是更好的选择。基于你的 Collection 的大小,也许向 HashMap 中添加元素会更快,将 map 换为TreeMap 进行有序 key 的遍历。

23. 说一下 HashMap 的实现原理?

  • - HashMap 是基于哈希表来实现的。提供了所有可选的映射操作,并允许使用 null 值 和 null 键。
    - HashMap 数据结构:HashMap 实际上是一个“链表散列”的数据结构,底层是使用数组和链表实现的 。
    - Jdk 1.8 中对HashMap 的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为 红黑数 来提高查询效率。

24. 说一下 HashSet 的实现原理?

  • - HashSet 底层是由 HashMap 实现的。
    - HashSet 的值存放于 HashMap 的 key(键) 上 。
    - HashMap 的 value(值)统一为 present(静态常量)。

25. ArrayList 和 LinkedList 的区别?

ArrayL 的底层的数据结构是数组,支持随机访问,而 LinkedList 的数据结构是双向循环的链表,不支持随机访问。使用下标访问一个元素,ArrayList 的时间复杂度是 O(1),而 LinkedList 是 O(n)。

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

  • - List 转换成为数组:调用 ArrayList 的 toArray 方法。
    - 数组转换成为 List:调用 Arrays 的 asList 方法。

27. ArrayList 和 Vector 的区别是什么?

  • - Vector 是线程安全(同步)的,而 ArrayList 不是。
    - ArrayList 必 Vector 快,因为它有线程同步,不会发生过载。
    - ArrayList 则更加通用,因为我们可以使用 Collections 工具类轻易地获取同步列表和只读列表。

28. Array 和 ArrayList 有何区别?

  • - Array 可以容纳基本数据类型和对象,而 ArrayList 只能容纳对象。
    - Array 是指定大小的,而 ArrayList 大小是国定的。
    - Array 没有提供 ArrayList 那么多功能,比如 说 addAll、removeAll 和 iterator 等。

29. 在 Queue 中 poll() 和 remove() 有什么区别?

poll() 和 remove() 都是从队列中取出一个元素,但是 poll() 在获取元素失败的时候会返回 空,而 remover() 失败的时候会抛出异常。

30.哪些集合类是线程安全的?

  • - Vector:就比 ArrayList 多了个同步化机制(线程安全),因为效率较低,所有现在不推荐使用。
    - Statck:堆栈类,先进先出。
    - HashTable:就比HashMap 多了个线程安全。
    - Enumeration:枚举,相当于迭代器。

31. 迭代器 Iterator 是什么?

迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。

32. Iterator 如何使用?有什么特点?

Java中的Iterator功能比较简单,并且只能单向移动: 
- 使用方法iterator()要求容器返回一个lterator。
- 第一次调用Iterator的next()方法时,它返回序列的第一个元素。
- 注意:iterator()方法是java.lang.lterable接口,被Collection继承。
- 使用next()获得序列中的下一个元素。
- 使用hasNext()检查序列中是否还有元素。
- 使用remove()将迭代器新返回的元素删除
    lterator是Java迭代器最简单的实现,为List设计的Listlterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。

33. Iterator 和 ListIterator 有什么区别?

  • - Iterator 可用来遍历 Set 和 List 集合,但是 ListIterator 只能用来遍历 List。
    - Iterator 对集合只能是前向遍历,ListIterator 既可以向也可以后向。
    - ListIterator 实现了 Iterator 接口,并包含其它 的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值