【java资深研发工程师系列】集合体系详解(一):概览

为什么要使用集合?

  • java是一门面向对象语言,为了便于存储和处理对象,就需要一个合适的容器,而缓冲区、数组等具有很大的局限性,所以集合(Collection)横空出世。

集合和数组有啥区别?

集合数组
长度长度可变长度固定
存储的内容可以存储不同类型的元素(一般不建议)存储的是同一种类型的元素
元素的数据类型集合只能存储引用类型(即便存储基本类型,也会自动封装成包装类)可以存储基本数据类型,也可以存储引用类型

java集合框架

作用和本质

  • 主要作用:存储对象的容器。
  • 本质:用于存储对象的数据结构。

集合类型

在这里插入图片描述
在这里插入图片描述

  • Java集合主要由2大致系构成,分别是Collection体系和Map体系,其中CollectionMap分别是2大t体系中的顶层接口。
  • Collection主要有三个子接口,分别为List(列表)Set(集合)Queue(队列)。其中,List、Queue中的元素有序可重复,而Set中的元素无序不重复。
  • Map同属于java.util包中,是集合的一部分,但与Collection是相互独立的,没有任何关系。Map中都是以key-value的形式存在,其中key必须唯一。
  • Iterator:迭代器,可以通过迭代器遍历集合中的数据。

迭代器(Iterator)介绍

  • Collection继承自Iterable,而Iterable接口中存在iterator()方法,返回的是Iterator。
    在这里插入图片描述
    在这里插入图片描述
  • Iterator也是一个接口,点开发现它有4个方法,其中forEachRemaining()方法为java8以后引入,这里不做讨论,主要是hasNext()、next()、remove()3个方法,它只提供了迭代的基本规则,具体由各个集合类通过内部类的方式进行实现:
    在这里插入图片描述
    在这里插入图片描述

Collection

  • List(列表):有序,可重复
    • ArrayList:底层数据结构为数组。具有查询快,增删慢,线程不安全,效率高等特点。
    • Vector: 底层数据结构为数组。具有查询快,增删慢,线程安全,效率低等特点。
    • LinkedList:底层数据结构为双向链表,具有查询慢,增删快,线程不安全,效率高等特点。
  • Set(集合):无序,唯一
    • HashSet:底层数据结构是哈希表(是一个元素为链表的数组) + 红黑树。
    • TreeSet:底层数据结构是红黑树(是一个自平衡的二叉树),保证元素的排序方式。
    • LinkedHashSet:底层数据结构由哈希表(是一个元素为链表的数组)和双向链表组成。

Map

  • Map接口将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
    • Hashtable:底层是哈希表数据结构,线程是同步的,不可以存入null键,null值。效率较低,被HashMap 替代。
    • HashMap:底层是哈希表数据结构,线程是不同步的,可以存入null键,null值。
      要保证键的唯一性,需要覆盖hashCode方法,和equals方法。
    • LinkedHashMap:底层是哈希表+链表数据结构。可以进行增删提高效率。
    • TreeMap:底层是二叉树数据结构。可以对Map集合中的键进行排序。需要使用Comparable或者Comparator 进行比较排序。return 0,来判断键的唯一性。

为什么还要引入Map映射表这个集合结构?

  • 作为学生来说,我们是根据学号来区分不同的学生。只要我们知道学号,就可以获取对应的学生信息。或者通过身份证号(key)证明你自己的身份(value)等等。这就是Map映射的作用,通过key可以唯一锁定value。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值