1.Java容器有哪些?
具体如下结构:
Collection
List
ArrayList
LinkedList
Vector
Stack
Set
HashSet
LinkedHashSet
TreeSet
Map
HashMap
LinkedHashMap
TreeMap
ConcurrentHashMap
Hashtable
2. Collection 和 Collections 有什么区别
1.java.util.Collection 是一个集合接口(集合类的一个顶级接口)。它提供了对集合对象进行基本操作的通用接口方法。
Collection接口在Java 类库中有很多具体的实现。Collection接口的意义是
为各种具体的集合提供了最大化的统一操作方式,其直接继承接口有List与Set。
2.Collections则是集合类的一个工具类/帮助类,其中提供了一系列静态方法,
用于对集合中元素进行排序、搜索以及线程安全等各种操作
3.List、Set、Map 之间的区别是什么
1.List、Set、Map 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
4.说一下HashMap实现原理
1.HashMap 基于 Hash 算法实现的,我们通过 put(key,value)存储,get(key)来获取。
2.HashMap的数据结构: 在Jdk 1.8中对HashMap的实现做了优化,当链表中的节点数据超过8个之后,
该链表会转为红黑树来提高查询效率,从原来的O(n)到O(logn). 链表+ 红黑树
3.我们往Hashmap中put元素时,首先根据key的hashcode重新计算hash值,根绝hash值得到
这个元素在数组中的位置(下标),如果该数组在该位置上已经存放了其他元素,那么在这个位置上的元素
将以链表的形式存放,新加入的放在链头,最先加入的放入链尾.如果数组中该位置没有元素,
就直接将该元素放到数组的该位置上。
5. HashSet 的实现原理?
HashSet底层由HashMap实现
HashSet的值存放于HashMap的key上
HashMap的value统一为present
6.HashMap 和 Hashtable 有什么区别?
1.存储上: hashMap允许空键值,而hashTable不允许。
2.线程安全: HashMap是线程非安全的(多线程建议使用ConcurrentHashMap ),
Hashtable是线程安全的
3.Hashtable同步的,而HashMap是非同步的,效率上比hashTable要高
7.如何决定使用 HashMap 还是 TreeMap
对于在Map中插入、删除和定位元素这类操作,HashMap是最好的选择。
然而,假如你需要对一个有序的key集合进行遍历,TreeMap是更好的选择。
List
8.ArrayList和LinkedList的区别
1.底层数据结构: Arraylist 底层使用的是Object数组,支持快速随机访问(实现了RandomAccess接口),而
LinkedList 的底层数据结构是双向循环链表,不支持随机访问。
2.Arraylist: 优点 get和set调用花费常数时间, 查询速度快.
缺点 插入和删除元素时间复杂度为O(n-i), 速度慢
LinkedList: 优点: 插入和删除时间复杂度不受位置影响,O(1)
缺点: get和set 花费时间多.
3.内存占用: ArrayList的空间浪费主要体现在在list列表的结尾会预留一定的容量空间,
LinkedList的空间花费则体现在它的每一个元素都需要消耗比ArrayList更多的空间
(链表结构需要存放指向下一个地址)
9.Array 和 ArrayList 有何区别?
1.Array可以容纳基本类型和对象,而ArrayList只能容纳对象。
2.Array是指定大小的, 而ArrayList是动态数组,自动扩容。
3.Array没有提供ArrayList那么多功能,比如addAll、removeAll和iterator等。
10. ArrayList 和 Vector 的区别是什么?
1.线程安全:Vector 使用了 Synchronized 来实现线程同步,是线程安全的,而 ArrayList 是非线程安全的
2.性能:ArrayList 在性能方面要优于 Vector。
3.扩容:ArrayList 和 Vector 都会根据实际的需要动态的调整容量,只不过在 Vector 扩容每次会增加 1 倍,
而 ArrayList 只会增加 50%。
11.迭代器 Iterator 是什么?
迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。
12. Iterator 怎么使用?有什么特点?
(1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。
(2) 使用next()获得序列中的下一个元素。
(3) 使用hasNext()检查序列中是否还有元素。
(4) 使用remove()将迭代器新返回的元素删除。
13.Iterator 和 ListIterator 有什么区别?
(1).Iterator对集合只能是前向遍历,ListIterator既可以前向也可以后向。
(2).Iterator可用来遍历Set和List集合,但是ListIterator只能用来遍历List。