JavaSE基础知识(二十一)--Java集合(容器)之概述

Java SE 是什么,包括哪些内容(二十一)?

本文内容参考自Java8标准
再次感谢Java编程思想对本文的启发!
首先,来看3个问题:
1、如果一个程序只包含固定数量的且其生命周期都是已知的对象,那么这是一个非常简单的程序。
2、Java中的集合(容器)是专门用来存放对象(实际上是对象的引用)的,同时它本身也是一种对象。
3、 一般情况下,我们都是依靠命名的引用来持有对象:
MyType Reference = new MyType();
通常,一个程序总是到运行时才会根据某些条件去创建新的对象,在此之前,并不知道要运行完整个程序实际需要多少个对象(程序代码的实现逻辑是,你需要一个对象,就去创建,尤其是你将创建对象的代码放在一个while循环中,所以你根本无法知道执行完整个程序到底会创建多少个对象),甚至不知道确切的类型(当发生多态的创建对象的代码的时候,将子类的对象赋值给父类的引用,这个时候,你仅仅使用父类引用既可,而不需要知道子类的确切对象),存在需要在任意时刻和任意位置创建任意数量的对象的可能性。所以,就不能依靠创建命名的引用来持有每一个对象,因为,你不知道实际上会需要多少这样的引用。
大多数语言都提供某种方法来解决这个基本问题。Java有多种方式保存对象(实际是对象的引用),例如前面博文曾经提到过的数组,它是编译器直接支持的类型,数组是保存一组对象的最有效的方式。如果你想保存一组基本类型数据,推荐直接使用数组。但是数组具有固定的尺寸(就是在编译期的时候需要确定它的大小,在运行期是无法改变它的大小的),前面已经说了,在更一般的情况中,你并不能提前知道程序在执行的过程中将需要多少个对象,或者是否需要更复杂的方式来存储对象,因此,数组尺寸固定这一限制显得过于受限了。
鉴于以上情形,Java实用类库提供了一套相当完整的容器类来解决问题。其中,基本的类型有以下四种:
①、List(接口)
有序存放,有序访问。
List(接口)
②、Set(接口)
无序存放,无序访问,不能重复
Set(接口)
③、Queue(接口)
只能在"端"上操作,而不涉及容器的其它位置,要么从一端插入,要么从一端取出。
Queue(接口)
它们统称为集合,称作集合类。它们都有一个共同的父接口:

Collection(接口)

Collection(接口)
Collection是一个根接口,它定义了除键值对类型的集合以外的其他所有集合接口/集合类的标准。所有有关集合的接口、类都直接或间接extends(接口与接口之间是extends)/implements(接口与类之间是implements)它。

④、Map(接口)
键值对
Map(接口)
虽然文档中没提,但是个人认为,Map是键值对的集合的根接口,所有有关键值对集合的接口、类都直接或间接extends(接口与接口之间是extends)/implements(接口与类之间是implements)它。
Map和Collection的关系是:
Map和Collection的关系
虽然Map和Collection没有直接的关系,但是将Map的键集合,值集合或者键-值集合单独拿出来,都是一个Collection
Collection接口继承结构图:
Collection接口继承结构图
因为Map本身就是根接口,所以就目前涉及到的内容,不足以形成一个继承结构图,暂时不提供。待后面了解了更多的子接口和子类时再提供。
正是因为"Collection"的缘故,以上提到的所有类有一个更形象贴切的称呼:容器(当你将对象放入它们当中时就好比将物体放入一个容器中)
容器提供了完善的方法来保存对象,你可以使用这些容器类来解决程序中对象数量进人的问题。
Java容器类都可以自动地调整自己的尺寸。因此,容器类与数组不同,在编程时,你可以将任意数量的对象放入容器中,并且不需要担心容器的容量应该设置为多大。
在Java中,容器没有直接的关键字支持(都是通过普通的类以及内部类构造的,实际上也不需要专门的关键字)。容器类是可以显著增强你的编程能力的基本工具。
在后续的博文中,将会重点介绍每种容器类的源码实现以及实现原理。
PS:时间有限,有关Java SE的内容会持续更新!今天就先写这么多,如果有疑问或者有兴趣,可以加QQ:2649160693,并注明CSDN,我会就博文中有疑义的问题做出解答。同时希望博文中不正确的地方各位加以指正。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值