Java集合

我们都知道Java是一种面向对象编程的语言,在Java中我们有很多种的数据结构,我们今天主要是来讲一讲Java集合的知识。Java集合在Java整个知识点中所占比例也是比较大的,为什么这样说呢?我们先来看看集合的相关知识点。

Collection和Collections

正如标题所言,我们很多时候容易把这两个分不清,这个是为什么呢?当然是他们太相似了三,这都不明白哇。答案是否定的,因为如果我们还是傻傻分不清,那就说明我们并没有把这个知识点弄清楚,那我们一起再来学习一下这个知识点,巩固一下相关知识,达到温故而知新的目的。那我们就走起。

Collection接口

你没看错,就是Collection接口,这个可是一个十分重要的接口,不明白?没关系,接着看。很多面试题都在问List、Set、Map是否都是继承Collection接口,如果熟悉,那我们很容易得出答案—不是。因为咱们Java中有两大类集合,分别是Collection接口和Map接口。那么很多同学看到这里又想起我刚刚说的Collections,别着急,咱们一个一个地说,肯定都会讲到的,别着急。

Collection接口包括了List接口和Set接口,这两个有什么区别喃?List是有序,而Set是无序的。那么这样一说,就很容易得出下一个知识点,正是因为List有序,那么我们List中可以出现重复的数据,但是Set则不可以,如果在Set接口中出现,那么电脑一定会出现傻傻分不清的状况,所以说我们是肯定不会允许电脑出现这种失误的。

都说到这里了,我们肯定也要来看看List接口和Set接口下面还有哪些三。

List

我们在刚刚才说了List是一个有序的集合,那它的实现类有哪些呢?一共有三类,分别是ArrayList、LinkedList、Vector。看着有点熟悉,那肯定的三,ArrayList是可变数组,我们可能在学习数组的时候已经有接触,有的小伙伴说,我没有接触啊,这个是啥啊。别着急,我接下来也会再讲一下关于ArrayList、LinkedList、Vector的相关知识。

ArrayList

如果我突然提一句ArrayList,可能没啥反应,但是我们说Array数组,那么显而易见,ArrayLIst实现是数组,我们都知道数组的特点,查询快,增删慢,主要用于查询遍历数据,是我们最常用集合。那么他在底层肯定也和我们数组一样,都是使用的联系存储空间。那么他和数组的区别是什么呢?我们都知道数组是固定的长度,但是我们ArrayList是可变的长度,那么他是怎么实现的。我们实现数组的长度拓展其实就是重新创建一个新的数组,然后把旧数组拷贝过去,从而实现数组长度的拓展。

LinkedList

LinkList是我们链表实现,它特点和ArrayList相反,主要是增删快,查询慢。

Vector(基本没用)

我们都知道他的底层原理是数组,和ArrayList是相似的,但是区别是在哪里呢?我们都知道Java有多线程,那么线程安全就是特别重要的,Vector是线程安全的,但是同时也意味着效率相对较低。

Set

set元素和list不一样,我们区别在哪里呢?我们之前说了Set是无序的,所以元素是不能重复,因为没有索引,所以我们不能使用for循环。

HashSet

HahSet特点是查询快,元素无序,元素不可以重复,没有索引。其底层是数组和链表实现,我们在JDK1.8之前,哈希表(数组+单向链表);JDk1.8之后是哈希表(数组+单向链表+红黑树)。

LinkedHashSet

LinkedHashSet特点是查询快,元素有序,元素不可重复,没有索引。其底层实现原理在JDK1.8之前,哈希表(数组+双向链表);JDK1.8之后是哈希表(数组+双向链表+红黑树)

TreeSet

TreeSet特点是查询快,元素有序,不可能重复,没有索引。

在上面我们简单的讲解了一下LIst和Set数据结构,但是我们集合除了Collection还有Map接口,我们后面会继续讲一些关于Map的知识。

Map接口

map是我们集合一个重要知识点,元素包含了key和value,但是我们key值是不允许的重复,value可以重复。Map接口下面还有很多分类,主要是HashMap、LinkedHashMap、HashTable、TreeMap。我们主要讲一下HashMap和HashTable的知识点。

HashMap

HashMap的特点是无序、查询快,key不允许重复但是可以为null,value可以重复。我们在JDK1.8之前哈希表是数组+单向链表;然而我们JDk1.8之后,哈希表的结构式数组+双向链表+红黑树,但是他是线程不安全的,更适用于单线程。

HashTable

HashTable的特点是元素无序,key不可重复且不能为空值,但是value可以重复,与HashMap相似,重要的不同点是在于它是线程安全的,适用于多线程。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值