容器(集合)简介

我们为什么需要容器(集合)?

  Java编程中我们常与一个非常重要的东西打交道,那就是“数据”。我们可以将数据存在变量里、存在数组里、存在类里,然后进行操作。但仅仅用变量和数组,并不能满足我们对于存储数据的数据结构要求,我们希望有更实用、支持更多数据结构类型的方式存储我们的数据,所有这时,Java提供了容器类,通过Java定义好的容器类,我们可以使用更多结构来存储数据。

  其实容器的底层,都是由基本的数组、变量、类等形式做出来的。不同容器的关键,在于它们使用了不同的数据结构思想,如果你有一个更好的数据结构思想,也可以自己定义一个容器出来。

  如果你听到有人提到Java集合,那就是说的这些容器。容器 = 集合,翻译的不同而已。

  此处,我又又双叒想吐槽这个命名问题了,就喊它的英文不好吗,英文的表述还比翻译准确些。我就曾经在面试字节跳动时,面试官问我对容器的理解,我那时候,只知道它叫集合,所以把容器理解成了Web容器:Tomcat、JBoss、Weblogic等,然后答非所问场面一度尴尬,在我幼小的心灵上留下了巨大的阴影,求我的阴影面积。。。

常用容器分类

  我们经常使用的Java提供的容器主要分两类:Collection与Map。

  Collection与Map都是一个接口,依靠子孙类来实现,来能实例化使用。

  在Collection接口下面,常用的又有List接口,与Set接口。

  List接口中的常用实现类有:ArrayList、LinkedList、Vector

  Set接口中的常用实现类有:HashSet、TreeSet。

  Map接口中常用的实现类有:HashMap、TreeMap。

  关于以上接口和实现类的具体介绍,我会每个单独写博客介绍,这里主要进行总结。

  我画了一个继承关系图,方便整体了解Java常用容器之间的关系:
在这里插入图片描述

常用容器实现类对比

  有这么多种实现类,都有其存在的原因。每种容器都有其不同的底层原理,以及优点与缺点,我从以下几个角度对比分析一下:

实现类实现接口底层主要结构特点
ArrayListList(Collection)数组有序(存取顺序一致);可重复;查询效率高、增删效率低;
LinkedListList(Collection)双向链表有序(存取顺序一致);可重复;增删效率高、查询效率低;
VectorList(Collection)数组同ArrayList,但它是线程安全的synchronized
TreeSetSet(Collection)TreeMap无序(存取顺序不同);可以排序(根据值的大小排序);元素不可重复;
HashSetSet(Collection)HashMap无序(存取顺序不同);不可排序;元素不可重复;
TreeMapMap红黑二叉树无序(存取顺序不同);可以排序(根据值的大小排序);Key不可重复,Value可重复;
HashMapMap数组+单向链表无序(存取顺序不同);不可排序;Key不可重复,Value可重复;
HashTableMap数组+单向链表同HashMap ,但它是线程安全的synchronized

  每个容器的具体介绍,可以阅读我的如下博客:

序号标题链接
1容器(集合)简介https://blog.csdn.net/HhmFighting/article/details/105075276
2Collection接口、List接口与Set接口https://blog.csdn.net/HhmFighting/article/details/105079093
3ArrayList实现类https://blog.csdn.net/HhmFighting/article/details/105079881
4LinkedList实现类https://blog.csdn.net/HhmFighting/article/details/105081226
5Vector实现类https://blog.csdn.net/HhmFighting/article/details/105081079
6HashSet实现类https://blog.csdn.net/HhmFighting/article/details/105107572
7TreeSet实现类https://blog.csdn.net/HhmFighting/article/details/105107783
8Map接口https://blog.csdn.net/HhmFighting/article/details/105104052
9HashMap与HashTable实现类https://blog.csdn.net/HhmFighting/article/details/105105237
10TreeMap实现类https://blog.csdn.net/HhmFighting/article/details/105107160
11容器遍历与迭代器Iteratorhttps://blog.csdn.net/HhmFighting/article/details/105122695
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值