Java 容器

Java 容器都有哪些?

常用容器的图录:
常用容器


CollectionCollections 有什么区别?
  • java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。Collection 接口在 Java 类库中有很多具体的实现。Collection 接口的意义是为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有 ListSet
  • Collections 则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,用于对集合中元素进行排序、搜索以及线程安全等各种操作

ListSetMap 之间的区别是什么?
比较ListSetMap
继承接口CollectionCollection
常见实现类AbstractList(其常用子类有 ArrayListLinkedListVectorAbstractSet(其常用子类有 HashSetLinkedHashSetTreeSetHashMapHashTable
常见方法add()remove()clear()get()contains()size()add()remove()clear()contains()size()put()get()remove()clear()containsKey()containsValue()keySet()values()size()
元素可重复不可重复(用 equals() 判断)不可重复
顺序有序无序(实际上由 HashCode 决定)
线程安全Vector 线程安全HashTable 线程安全

HashMapHashTable 有什么区别?
  • hashMap 去掉了 HashTablecontains 方法,但是加上了containsValue()containsKey() 方法
  • hashTable 同步的,而 HashMap 是非同步的,效率上比 hashTable 要高
  • hashMap 允许空键值,而 hashTable 不允许

如何决定使用 HashMap 还是 TreeMap

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


说一下 HashMap 的实现原理?

HashMap 概述:HashMap 是基于哈希表的 Map 接口的非同步实现。此实现提供所有可选的映射操作,并允许使用 null值null键。此类不保证映射的顺序,特别是它不保证该顺序恒久不变

HashMap的数据结构: 在 Java 编程语言中,最基本的结构就是两种,一个是数组,另外一个是模拟指针(引用),所有的数据结构都可以用这两个基本结构来构造的,HashMap 也不例外。HashMap 实际上是一个“链表散列”的数据结构,即数组和链表的结合体

当我们往 Hashmapput 元素时,首先根据 keyhashcode 重新计算 hash 值,根据 hash 值得到这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素将以链表的形式存放,新加入的放在链头,最先加入的放入链尾。如果数组中该位置没有元素,就直接将该元素放到数组的该位置上

需要注意 JDK 1.8 中对 HashMap 的实现做了优化,当链表中的节点数据超过八个之后,该链表会转为红黑树来提高查询效率,从原来的 O(n)O(logn)


说一下 HashSet 的实现原理?
  • HashSet 底层由 HashMap 实现
  • HashSet 的值存放于 HashMapkey
  • HashMapvalue 统一为 PRESENT

ArrayListLinkedList 的区别是什么?

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


如何实现数组和 List 之间的转换?
  • List 转换成为数组:调用 ArrayListtoArray 方法
  • 数组转换成为 List:调用 ArraysasList 方法

ArrayListVector 的区别是什么?
  • Vector 是同步的,而 ArrayList 不是。然而,如果你寻求在迭代的时候对列表进行改变,你应该使用CopyOnWriteArrayList
  • ArrayListVector 快,它因为有同步,不会过载
  • ArrayList 更加通用,因为我们可以使用 Collections 工具类轻易地获取同步列表和只读列表

ArrayArrayList 有何区别?
  • Array 可以容纳基本类型和对象,而 ArrayList 只能容纳对象
  • Array 是指定大小的,而 ArrayList 大小是固定的
  • Array 没有提供 ArrayList 那么多功能,比如 addAllremoveAlliterator

Queuepoll()remove() 有什么区别?

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


哪些集合类是线程安全的?
  • vector:就比 arraylist 多了个同步化机制(线程安全),因为效率较低,现在已经不太建议使用。在 web 应用中,特别是前台页面,往往效率(页面响应速度)是优先考虑的
  • statck:堆栈类,先进后出
  • hashtable:就比 hashmap 多了个线程安全
  • enumeration:枚举,相当于迭代器

迭代器 Iterator 是什么?

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


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

Java 中的 Iterator 功能比较简单,并且只能单向移动:

  1. 使用方法 iterator() 要求容器返回一个 Iterator 。第一次调用 Iteratornext() 方法时,它返回序列的第一个元素。注意:iterator() 方法是 java.lang.Iterable 接口,被 Collection 继承
  2. 使用 next() 获得序列中的下一个元素
  3. 使用 hasNext() 检查序列中是否还有元素
  4. 使用 remove() 将迭代器新返回的元素删除

IteratorJava迭代器 最简单的实现,为 List 设计的 ListIterator 具有更多的功能,它可以从两个方向遍历 List,也可以从 List 中插入和删除元素


IteratorListIterator 有什么区别?
  • Iterator 可用来遍历 SetList 集合,但是 ListIterator 只能用来遍历 List
  • Iterator 对集合只能是前向遍历,ListIterator 既可以前向也可以后向
  • ListIterator 实现了 Iterator 接口,并包含其他的功能,比如:增加元素,替换元素,获取前一个和后一个元素的索引,等等

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值