java基础教程:集合概述(27)

来源:互联网 发布:ubuntu下安装jdk9 编辑:程序博客网 时间:2022/05/27 13:57


今天要讲的内容是集合。集合是我们编程时非常频繁的对象,必须花费大量时间学习。

我们还是从是什么和为什么两个角度进行引入。


集合是什么?

集合是存储和操作一组对象的对象。类似一个池子,可以存储操作一组元素。


为什么要有集合?

从集合是什么来看,集合和我们之前提到的数组没有差别,都是一组对象的集合。

既然数组就能实现这些功能,为什么还要集合?当然是数组有些功能的限制,达不到我们的需求。

1、数组是定长的。一旦一个数组声明实例化完成后,它的长度是固定的,不能动态的增减。

如果我们的元素个数是不可预知的,那么无法定义一个合适长度的数组来存储。存储之后进行元素的增减时,

也是不能动态的扩容和缩减。

2、数组是一个类型固定的集合。当它声明完成后,只能存储声明类型的对象。如int[],User[]。

并且只能单个对象线性存储,如{1,2,3,4}。当我们希望能够存储一些键值对时,无法满足需求。

如{username:"张三", sex:"男"}。

3、数组的排序是复杂的,需要自己规划算法进行排序。但是,大多数的排序都是相似的,

我们希望能够有一种快捷的方式能够排序元素。

4、数组的元素增删改查代码复杂,完全可以提供公共的实现方案。


基于以上但不仅限于以上的原因,便出现了集合。集合就是解决以上问题的。


集合的概述

集合是java当中存储一组对象的复合对象。集合在java当中的设计结构如下(图片来自其他博客):



从上图可以看出,java的集合设计始于两个接口collection 和 map

collection下的元素是单列元素,如[1,2,3],每一个单位是一个对象。

map下的对象是键值对双列元素,如{username:aa, sex:man,  age:23},每一个单位是两个对象,一个键,一个值。

然后collection下,又派生了List,set,queue三个接口,分别表示列表,集,队列

列表是一组有序的、可重复的元素集合,元素按顺序排列。有实现类LinkedList(链表列表集合),ArrayList(数组列表集合),Vector(向量数组列表,线程安全)

集是一组无序的,不可重复的元素集合。有实现类HashSet(哈希集),TreeSet(树形集),LinkedHashSet(链表哈希集)。

单向队列是一组有序的,先进先出的元素集合。也就是说先进入集合的元素先被取出,后进入的元素后被取出,元素只能从队列头部被取出。

还有一个继承单向队列的接口Deque,双向队列,也是一组有序的元素集合,元素可以从队列的头部或尾部被取出

LinkedList就是实现了Deque的类。所以,LinkedList可以从列表头部或尾部取出元素。

还有我们碰到的栈,先进后出的模型,也可以使用Deque实现。从双向队列的尾部取元素即可。



后面的几个章节我们就一些常见集合进行详细的介绍。

集合和String应该是java当中使用最频繁的两种对象。大家一定要学会,熟练使用。

有精力能力的,可以详细研究下集合的实现。