基础--关于集合,我了解这些

文章目录

  • 集合
    • 1、List--可重复
      • 1、ArrayList
      • 2、Vector
      • 3、LinkedList
    • 2、Set--不可重复
      • 1、HashSet:HashMap实现,无序
      • 2、TreeSet:二叉树实现
      • 3、LinkedHashSet:继承HashSet
    • 3、Map--键值对形式存储
      • 1、HashMap
      • 2、HashTable
      • 3、TreeMap
    • 4、总结

集合

对于初学者来说,我们存储数据首先想到的是数组,但在Java当中,数组的长度是固定不变的,当我们想让容器的大小可变,这时就需要考虑到集合了,而集合又分为Collection体系和Map体系,Collection下有三个接口List、Queue、Set,Map下有三个实现类HashMap、TreeMap、HashTable。我们可以看下这个图,就能很清楚的了解集合的结构了。接下来我们就一一分析
基础--关于集合,我了解这些_第1张图片

1、List–可重复

对于List接口下,说出三个具体实现类,一个是ArrayList,一个是LinkedList,还有一个是Vector

1、ArrayList

ArrayList是使用最广泛的List实现类,它是底层是基于数组实现的,提供了对List的增加、删除和访问功能。由于它定位索引下标的时间复杂度是O(1),所以决定了它的优点查询效率快,优点之后也伴随着缺点,因为数组的存储的特点–需要连续空间存储,所以它在中间位置插入和删除的时候,需要移动该位置及以后的元素,所以插入和删除效率慢;还有一点就是,它是线程不安全的。

2、Vector

它和ArrayList的区别就是,它是线程安全的。它的所有方法都被synchronized关键字修饰,随之而来的便是他的查询效率要比ArrayList低

3、LinkedList

它底层是基于双向链表实现的,它不需要连续的存储空间,所以在对它进行插入和删除操作时,只需要在对应节点上插入或删除元素,并将上一个节点的下一个节点指针指向该元素,如果在中间插入,还需要将当前元素的下一节点指针指向对应下一个节点。所以它的插入和删除效率高,由于是不连续的存储空间,所以在查询上需要遍历链表,所以相应的查询效率低

2、Set–不可重复

1、HashSet:HashMap实现,无序

我们先来看下底层
基础--关于集合,我了解这些_第2张图片
基础--关于集合,我了解这些_第3张图片
其实,HashSet底层实现了一个HashMap对象和一个对象常量,利用HashMap的键来存储HashSet的值,HashMap的值就只是一个对象常量(不重要);这也就是为什么HashSet的值不能重复的原因。

2、TreeSet:二叉树实现

todo…

3、LinkedHashSet:继承HashSet

todo…

3、Map–键值对形式存储

1、HashMap

HashMap这里不做解释了,我另一篇博客对它做了一个较为详细的解答。—>传送门(戳戳戳)

2、HashTable

基础--关于集合,我了解这些_第4张图片
HashTable是一个遗留类,它从jdk1.0就引入了,它继承自Dictionary类,并且是线程安全的,同一时刻只有一个线程能写HashTable,常用的功能和HashTable类似

3、TreeMap

它是基于二叉树的数据结构,同时实现了SortedMap接口以保障元素的顺序存取,默认按键值的升序排序,也可以自定义排序比较器

4、总结

其实,在集合里面,面试常考的List的三个实现类、Set中的HashSet和Map中HashMap以及HashTable,这几个集合类型一定要掌握,其他可做了解

你可能感兴趣的:(秋招之路)