Java面试题之容器

导读:本篇文章讲解 Java面试题之容器,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

二、容器

18. java 容器都有哪些?

String,数组以及java.util下面的集合类
List:存放有序,列表存储,元素可重复  ArrayList    LinkedList Vector
Set:无序,元素不可重复    HashSet  TreeSet
Map:无序,元素可重复  HashMap        TreeMap     LinkedHashMap    HashTable

19. Collection 和 Collections 有什么区别?

Collection是集合类的一个顶级接口,它提供了对集合对象进行基本操作的通用接口方法.
 Collections是集合类的一个工具类,它提供了一系列的静态方法,用于对集合中元素进行排序,搜索以及线程同步等操作.

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

List:可以允许重复的对象;
       可以插入多个null元素;
       有序,输入顺序就是输出顺序;
Set: 不允许重复对象;
        无序,且只允许一个null对象;
 Map: 存储键值对,只能有唯一的key,value可以重复
          只能有一个null键

21. HashMap 和 Hashtable 有什么区别?

一.    HashMap可以接受null键和值,HashTable不行
二.    HashTable是线程安全的,通过synchronized来保证,而HashMap线程不安全
三.    HashMap的迭代器是fail-fast迭代器,而HashTable的enumerator迭代器不是fail-fast.

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

HashMap基于散列表实现,适用于查询频繁的情况
TreeMap基于红黑树实现,适用于创建比较多的情况.且TreeMap存储数据是按照字母表的顺序存储的,如果对顺序有要求也可以选用TreeMap.

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

数组+链表,初始16,0.75扩容,数据存在内部类Map.Entry中,其中包含key value hashcode和next.

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

HashSet基于HashMap实现,默认构造函数是构造一个初始容量为16的HashMap,所有放入HashSet
集合的元素实际上由HashMap的key来保存,而value则保存了一个PRESENT的静态Object对象,因为元素都保存在key中,所以才能不重复.

25. ArrayList 和 LinkedList 的区别是什么?

  • ArrayList底层基于动态数组,LinkedList基于链表实现,底层是循环双向链表
  • 对于随机访问get和set,ArrayList优于LinkedList.
  • 对于新增add和删除remove,LinkedList比较快

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

  • List转数组:toArray()方法.在方法参数中指定原集合的长度的数组即可.
  • 数组转List:Arrays的asList()方法.

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

  • Vector的方法都是同步的,是线程安全的,ArrayList则不是.
  • 在进行扩容的时候,Vector扩容至原来的一倍,ArrayList增加至原来的0.5倍.

28. Array 和 ArrayList 有何区别?

  • Array(数组)可以包含基本数据类型和对象类型,ArrayList只能包含对象类型.
  • ArrayList可以自动扩容,Array则不行.

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

Queue中,add方法和offer方法都可以添加元素,而remove和poll都是删除队列的头元素,区别在于:
add方法在队列满的情况下抛异常,而offer方法则返回false.
remove方法在队列为空时抛异常,poll方法将返回null.

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

Vector    HashTable    ConcurrentHashMap   Stack      

31. 迭代器 Iterator 是什么?

Iterator是个接口,它提供了很多对元素进行迭代的方法.迭代器可以在迭代过程中删除底层集合的元素,可以直接调用Iterator的remove()方法来删除. 因为在Conllection接口中定义了获取集合迭代器的方法,所以每一个集合都包括了可以返回迭代器实例的方法.    

32. Iterator 怎么使用?有什么特点?

每个集合都可以用iterator()方法一个Iterator实例.
使用next()方法获取序列中的下一个元素,使用hasNext()方法检查序列中是否有元素
使用remove()方法将迭代器新返回的方法删除.
特点:Iterator将集合的遍历和其底层的结构分离.

33. Iterator 和 ListIterator 有什么区别?

ListIterator是Iterator的子接口,用于扩展Iterator.
在Iterator中,我们只能向前移动,无法操纵或者修改集合中的元素.ListIterator弥补了这种缺点
区别:    1.范围不同,Iterator适用于所有集合,而ListIterator只适用于List及其子类
            2.ListIterator有add方法可以添加元素,Iterator则不行.
            3.ListIterator可以实现双向遍历,Iterator则不行.
            4.ListIterator可以实现对象的修改,Iterator不行
            5.ListIterator可以获取集合中的所有,Iterator不行.

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

可以使用Collections或者Guava来快速实现.如Collections.unmodifiableMap(xxxMap);

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97010.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!