Java基础二 容器

1.Java容器有哪些?

Java容器.png
具体如下结构:
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 的区别主要体现在两个方面:元素是否有序、是否允许元素重复。
List_set_Map.png

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。

你可能感兴趣的:(Java基础二 容器)