今天的博客主题
基础篇 --》常用类 --》Java集合类
集合类
集合类存放于java.util包中
集合的由来:面向对象语言对事物都是以对象的形式来体现,为了方便对多个对象的操作,就需要将对象进行存储,集合就是存储对象最常用的一种方式。
集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用(reference)。
集合类型主要有3种:set(集合)、list(列表)和map(映射)
集合接口分为:Collection、Map
特点
用于存储对象的容器。(容器本身就是一个对象,存在于堆内存中,里面存的是对象的地址)
集合的长度是可变的。
集合中不可以存储基本数据类型值。 (只能存对象)
集合和数组区别
数组的长度固定,不可变
集合的长度可变
数组存储的是同一种类型的元素
集合可以存储不同类型的元素(但是一般我们不这么干..)
数组可以存储基本数据类型,也可以存储引用类型
集合只能存储引用类型(你存储的是简单的int,它会自动装箱成Integer)
集合是基础阶段里面比较重要的东西。
而提到这些的集合都是一些基础上的使用,还有一些更高级的集合。
Collection介绍
带着三个疑问开启集合Collection之旅...
1、为什么需要Conllection?
我们知道Java是面向对象语言,既然是面向对象就肯定少不了对象。为了方便操作多个对象,那么就需要把这个多个对象存到一个容器里,之前我们有说过StringBuffered、还有接下来要说的数组(有对象数组,但是长度有限制),所以找个时候Java就提出了集合的概念。
2、Conllection是怎么来的?
集合可以存储多个元素,但对多个元素也有不同的需求
比如:元素不能有相同的。元素能够按照某个规则排序。
针对这些不同的需求,java就提供了很多集合类,每个集合类的数据结构都不同。别的都不重要,重要的是能够存储东西、判断、得到数据。把这些集合共性的内容不断往上提取,最终形成集合的继承体系。(前面讲的继承没听懂的,通过这个例子联想是不是对前面说的继承就有了一定的了解了)大概的一个体系是这样的:
猛一看这么多集合,我们只需要掌握在开发中常用的集合类就行了。这些就够了
3、Conllection能干什么呢?
提供的这些都可以干,通过方法名可以看出,添加功能,删除功能,判断功能,获取长度,获取交集,还有Java8新出的功能。
提供了对集合进行排序、遍历等多种算法的实现。
AbstractCollection
AbstractCollection 是 Collection 接口的一个直接实现类, Collection下的大多数子接口实现类都继承 AbstractCollection 。
它实现了一些方法,也定义了几个抽象方法去留给子类实现,因此它是一个抽象类。
它里面只有两个抽象方法。子类必须实现这两个方法。
public abstract Iterator<E> iterator();
public abstract int size();
AbstractCollection 中默认不支持添加单个元素,如果直接调用 add(E) 方法,会抛出异常的。
public boolean add(E e) {
throw new UnsupportedOperationException();
}
Iterable介绍
在读Collection源码的时候,发现Collection继承了Iterable,有iterator()这个方法,点击去之后发现它是一个接口。
在期这些接口实现类里面基本上都会有个内部类就实现了这个接口方法。并通过源码得知,Iterator是在遍历集合。
那就由此而知:遍历集合(Collection)的元素都可以使用Iterator,至于它的具体实现是以内部类的方式实现的!
说到这就知道了Iterable是用来遍历集合的,是遍历集合的一种方式...被称为迭代器。
迭代器的存在是依赖于集合的。
在介绍集合的时候这几篇只是对集合有个认知。如想深入了解,等后边做源码篇的时候会着重分析这块的。
the spirit of never giving up!!!