Java为什么会有集合存在?
在编程中,我们常常需要集中存放多个数据,比如:学校的学生花名册,考试成绩等等,类似情况。有人会会说:数组也可以呀!没错,但是数组有它的优点也有它的不足之处:
1.我们在使用数组时,一旦为数组指定长度,那么这个数组的长度就会是不可变的,如果需要保存数量变化的数据,数组就显的无能为力了。
2.数组固然方便使用,但是数组没有办法保存映射关系的数据,比如:语文:89,数学:100。。。或者:某某 :男,某某:女等等。
为了保存数量不确定的数据,以及保存具有映射关系的数据(也称为关联数组),Java提供了集合类。集合类主要负责保存、盛装其他数据,因此集合类也被称为容器类。
集合类贴士
集合类集中在Java.util包下,为了处理多线程环境下的并发问题在Java 5时,Java.util.concurrent包下提供了一些支持多线程的集合类。
集合与数组的不同
数据元素既可以是基本类型的值,也可以是对象(实际上保存的是对象引用的变量),集合只能保存对象(实际上也是保存对象的引用变量,通常习惯上认为集合里保存的是对象)。
Java集合继承树
Java集合实际上是由两个接口派生出来的它们是:Collection和Map,Collection和Map是集合框架的根接口,这两个接口又包含一些子接口或实现类。
Collection继承树
Set 无序,不允许重复。List 有序,允许重复。
Map体系的继承树
所有的Map实现类都是用于保存具有映射关系的数据(前面说的关系数组)。这些实现类对冉在实现与用法上存在差异但是它们却拥有共同点:Map保存的每项数据都是以Key-Value 对,也就是由key和value两部分组成。就像成绩单:key(语文) -value(89),每项数据都是由题目与分数组成。
Map中,key是不允许重复的,因为key用于标识集合里的每项数据,如果需要查询Map中的数据总是根据key来查看。而value是可以重复的。
Java集合三大类
Set 集合类似一个罐子,包一个数据添加到集合时,Set无法记住添加这个元素的顺序,所以Set集合内的元素不允许重复(否则系统无法准确识别这个元素);如果访问Set中的元素,只能根据元素本身来访问(这也是Set不能有重复的原因)。
List 集合非常像一个数组,它可以记住每次添加元素的数序,且List的长度可变。如果访问List中的元素可以直接根据元素的索引来访问。
Map 集合也像一个罐子,只是它里面的数据都是由key-value两部分组成。如果访问Map中的数据,则需要根据key来获取value数据。
常用集合
对于Set、List、Queue和Map 四种集合,最常用的实现类分别是:HashSet、TreeSet、ArrayList、ArrayQueue、LinkedList、HashMap、TreeMap等。
对于Java 5新增的具有并发控制的集合类,与Java 7新增的TransferQueue及实现类linkedTransferQueue,将在后续更新。
We come nearest to the great when we are great in humility.
我们最为谦卑时便最接近伟大。