什么是集合(Collection)?
集合就是“由若干个确定的元素所构成的整体”。例如5只小兔构成的集合。
?
你家兔子五角形的?
你以为我不会画兔子?
你猜对了,,,这是复制过来的…
在数学中,我们经常遇到集合的概念。
- 有限集合:
- 一个班所有的同学构成的集合
- 一个网站所有的商品构成的集合
无限集合
全体自然数集合:0,1,2,3,4,…
自然数是指用以计量事物的件数或表示事物次序的数。即用数码0,1,2,3,4……所表示的数。自然数由0开始,一个接一个,组成一个无穷的集体。自然数有有序性,无限性。分为偶数和奇数,合数和质数等。
有理数集合
有理数是整数(正整数、0、负整数)和分数的统称,是整数和分数的集合。 整数也可看做是分母为一的分数。不是有理数的实数称为无理数,即无理数的小数部分是无限不循环的数。是“数与代数”领域中的重要内容之一,在现实生活中有广泛的应用,是继续学习实数、代数式、方程、不等式、直角坐标系、函数、统计等数学内容以及相关学科知识的基础。 有理数集可以用大写黑正体符号Q代表。但Q并不表示有理数,有理数集与有理数是两个不同的概念。有理数集是元素为全体有理数的集合,而有理数则为有理数集中的所有元素。
实数集合
实数,是有理数和无理数的总称。数学上,实数定义为与数轴上点相对应的数。实数可以直观地看作有限小数与无限小数,实数和数轴上的点一一对应。但仅仅以列举的方式不能描述实数的整体。实数和虚数共同构成复数。 实数可以分为有理数和无理数两类,或代数数和超越数两类。实数集通常用黑正体字母 R 表示。R表示n维实数空间。实数是不可数的。实数是实数理论的核心研究对象。 所有实数的集合则可称为实数系(real number system)或实数连续统。任何一个完备的阿基米德有序域均可称为实数系。在保序同构意义下它是惟一的,常用R表示。由于R是定义了算数运算的运算系统,故有实数系这个名称。 实数可以用来测量连续的量。理论上,任何实数都可以用无限小数的方式表示,小数点的右边是一个无穷的数列(可以是循环的,也可以是非循环的)。在实际运用中,实数经常被近似成一个有限小数(保留小数点后 n 位,n为正整数)。在计算机领域,由于计算机只能存储有限的小数位数,实数经常用浮点数来表示。
为什么要在计算机中引入集合呢?这是为了便于处理一组类似的数据,例如:
- 计算所有同学的总成绩和平均成绩
- 列举所有的商品名称和价格
- …
在Java中,如果一个Java对象可以在内部持有若干个其他Java对象,并对外提供访问接口,我们把这种Java对象称为集合。很显然,Java的数组可以看作是一种集合。
String[] ss = new String[10];ss[0] = "Hello";String first = ss[0];
既然Java提供了数组这种数据类型,可以充当集合,那么,我们为什么还需要其他集合类,这是因为数组有如下限制
- 数组初始化后大小不可变
- 数组只能按索引顺序存取
因此,我们需要种作不同类型的集合类来处理不同的数据
Java标准库自带的java.util包提供了集合类:Collection,它是除Map外所有其他集合根接口。
Java的java.util包主要提供了以下三种类型的集合
List:一种有序列表的集合,例如,按索引排列的Student的ListSet: 一种保证没有重复元素的集合,例如,所有无重复名称的Student的SetMap:一种通过键值查找的映射表集合,例如,根据Student的name查找对应Student的Map
Java集合的设计有几个特点
一是实现了接口和实现类 相分离,例如,有序表的接口是List,具体的实现类有ArrayList,LinkedList等。
二是支持泛型,我们可以限制在一个集合中只能放入同一种数据类型的元素。例如
List<String> list = new ArrayList<>();//只能放入String类型
最后,Java访问集合总是通过统一的方式——迭代器(Itertator)来实现,它最明显的好处在于无需知道集合内部元素是按什么方式存储的。
由于Java的集合设计非常久远,中间经历过大规模改进,我们要注意到有一部分集合类是遗留类,不应该继续使用
Hashtable:一种线程安全的Map实现Vector:一种线程安全的List实现Stack:基于Vector实现的LIFO的栈
还有一小部分接口是遗留接口,也不应该继续使用
