[音乐]
嗨,你好!下面我们一起学习集合类
集合呢它叫Collection,Java
里面提供了Collection的API呢是专门呢处理这些"集合"或者叫"收集"的- 这个功能
它里面包含了一系列的接口或者类 其中呢这个Collection呢不太好翻译
我们看中文的版Java,它这个Collection就直接叫Collection 如果我们把它叫做"集合",有人把它叫"收集"
或者你不翻译,就直接叫Collection也可以 Collection API呢主要包含了三大类,其中呢就是一个
是Collection的两个子接口,一个是List,一个是Set 另外还有这个叫Map
那么List呢实际上是我们说的是列表 或者呢是记录元素的顺序的一个列表
顺序的一个线性表,它是允许有重复元素的。
那Set呢 它是不记录这个顺序,也就是说顺序是无关的
但是它不允许有重复的元素 这个有点像集,我们数学里面的集合的那个集。
这个List呢 我们叫表,或者叫线性表。
Map呢就是映射 那就从一个映射到另一个就是Map,所以它是
键值对的一个集合,或者叫key-value pair的集合
就这三大类,List表,Set 集,然后呢Map是映射
我们下面先看那个Collection这个接口。
Collection这个接口呢 它里面有比如说add增加,remove
减少或者移出的意思,size就是个数,isEmpty判断它是否为空
然后contains判断是否包含某个元素,然后还有一个iterator
这个得到一个Iterator这样一个对象 可以呢对它里面的元素呢进行遍历进行迭代。
Collection里面有很多的类
其中呢,这里列出的是我们常用的重要的一些接口和类
我们看Collection呢它是继承了 Iterable是可以迭代的可以遍历的这样一个
嗯这样一个接口,那我们Collection呢是表示 一些元素的收集或者集合。
这里面呢又有几个子的接口 一个是Set,就是集合的集,里面它呢也有一些 子类。
然后List呢这个接口呢,又有一些实现类,比如说ArrayList
然后LinkedList都是它的一个,这个接口的实现类
还有一个呢就是Queue,这个呢就是队列
这个队列这个接口呢有点怪啊,它也是Collection的一个
子接口,同时呢它有一个实现,重要的实现类LinkedList
所以这个LinkedList呢既实现了List接口也实现了队列这个接口
还有一些呢 这里就是具有优先级的队列。
这个图呢我们可以经常来复习一下 下面我们介绍这里面重要的一个List
这个List这个接口呢,代表的是线性表,它主要实现的就是有
顺序的这个元素,线性关系 它的重要的实现类呢一个是ArrayList
就相当于数组列表,也就是我们数据结构里面讲的顺序结构的 这个线性表。
还有个LinkedList 就是链接的线性表 也简称为链表。
这是两个重要的实现类,但它都是List
还有早期的Vector,也是类似于实现了 List,这个线性的表。
但这个Vector呢 相当于ArrayList,但是用的,我们用的比较少了
List接口呢,它是继承了Collection这个接口
同时它还有get和set,这两个呢带一个位子
下标或者叫位子,那么所以呢也就是这个List 它是跟顺序有关的,还有add
remove,indexOf等等一些方法 那么这种List呢它都
有一个迭代器,这个迭代器呢是所有的Collection 或者呢所有的iterable这种对象
它都有个iterrator这个方法,得到的是一个Iterator这样的一个对象
那么这个对象呢它就是可以用来迭代或者说可以用来遍历的 那它的基本方法就是hasNext有下一个元素
hasNext有下一个元素以及呢再循环的
next就得到下一个元素,但这种写法呢有一点点啰嗦啊,就先得到iterator
然后再用while里面hasNext,然后呢用next方法
再得到它的元素,所以有点啰嗦写起来,那么从JDK1.5以后呢
它就针对所有的这种iterator这种
它都实现了一个就所谓的增强的for语句 enhanced
for或者叫for-each语句,针对每一个的意思 那它的基本写法呢跟数组里面的这个for
冒号这样的写法相似 所以它里面的就是这个元素的类型元素名,然后
冒号可以读成in,就是针对每一 个这里面的一个元素然后做什么什么事情,比如说
Photo在album,每一个Photo然后我们做了一些什么什么事情
实际上所有的这个针对Iterator这样的
对象,它的增强的for语句呢,它自动就生成了刚才所说的
Iterator的hasNext然后next的这样的一个 方法。
好,下面我们看了一个例子,就是用List的例子
请看这个例子,在这个例子里面呢我们有一个
Photo这个类,包括了 标题、
时间、 以及呢这个备注 然后有一个构造方法,还有呢override那个toString,我们把这个
title、 日期和memo都把它转到字符串里头
好下面我们看看这里面的这个 List的用法。
List然后呢 这个列表呢或者说线性表呢,它里面
的元素呢都是Photo,所以我们用个<Photo>来表示是 什么类型的一个列表,那这种呢
尖括号的这种表示呢,它就称为有个专用名词叫泛型 啊,泛型,我们,我们后面会提到
我们简单理解呢就是什么样的线性表呢?就是Photo的一个线性表
啊,这是一个List,这个album =
new new呢我们要具体的这个类,所以一种写法呢就是用ArrayList
一种呢就是LinkedList,这两种呢对我们这里呢都差不多
当然我们知道呢这个顺序表和链表 它的实现方法不同,它在访问的
比如说增加元素或者遍历元素的方便性也有所不同
但对我们这个简单例子呢这两种 都可以使用。
另外呢 这里面这个尖括号呢实际上是省略了这个Photo,当然你写上也可以
编译器呢它能推断出来这个地方呢就是一个Photo的 LinkedList。
好,这个album我们可以用add方法添加几张照片 每张照片呢有不同的属性。
然后我们就可以用Iterator 来进行遍历,那么这个album
iterator呢然后hasNext就判断while 就只要还有下一个,然后我们就可以得到next,那么这个next就是下一个元素
它是一个Photo,然后我们就可以做处理,这里呢只是把它显示出来
当然我们可以把它简单的用for-each 语句来解,for-each然后每一个photo
:album 然后我们显示它,那这两种写法呢是完全一样的。