您的位置:首页 > 编程语言 > Java开发

Java---集合初入门

2017-11-09 14:40 309 查看
一、集合的由来

java是一种面向对象的语言,面向对象语言对事物的描述是通过对象表现出来的,试想如果我们需要将多个对象储存起来,那么应该用什么呢?

我们接触过的,用来储存多个数据的,第一个想到的就是数组了,但是数组有个缺陷就是他的长度固定,不能扩展,当然字符串缓存区也可以储存数据,但是字符串缓冲区始终返回的是字符串类型的数据,这就极大的限制了数据类型。所以java就提出了集合的概念。集合可以储存多种类型的元素,而且长度是不固定的。

集合和数组的区别在于:

1、长度:

数组长度固定,集合长度可变

2、储存的数据类型的区别:

数组既可以储存基本数据类型还可以储存引用数据类型,集合只能储存引用数据类型

3、储存元素的区别

数组只能储存同一种数据类型的数据,集合可以储存不同类型的数据类型

在初学集合时,我们需要了解一些他的继承体系图,下面是一张集合的部分继承体系图(先给出单列集合的部分体系图):



从图可以看出Collection、List、ArrayList等部分接口和类的关系,List继承自Collection,ArrayList实现List,那么应该从哪里入手学习集合比较合理呢?这里一般是从根接口Collection开始学习的。试想,子类继承父类或者子类实现接口,是会继承父类中的方法和成员,然后可能子类会有自己的特有成员或方法,那这样从根接口开始学习就能一层层的学习掌握其每个子类或者接口的各种方法以及他们继承了哪些部分,又有哪些是自己特有的。

这里我们就先只看Collection、List、ArrayList这三者的关系,先理清一个单支。从图中可以看出,ArrayList是一个子类,它实现了List接口,而List接口是Collection的子接口,那么我们现在就先看看根接口Collection集合。

Collection:

表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。

Collection中的一些方法(功能):

1) 添加功能:

boolean add(Object e):给集合中添加指定的元素

boolean addAll(Collection c):添加一个集合中的所有元素

2) 删除功能:

void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)

boolean remove(Object o):删除一个集合中的指定元素

boolean removeAll(Collection c):删除一个集合中的所有元素

3)判断功能:

boolean contains(Object o):判断一个集合中是否包含指定的单个元素

boolean containsAll(Collection c):判断一个集合中是否另一个集合;思考:是包含一个元素算是包含还是包含所有.

boolean isEmpty():判断集合是否为空,如果为空,则返回true

4)交集功能:

boolean retainAll(Collection c):A集合给B集合做交集,交集之后的值放入A,如果A集合有改变,返回ture.

5)获取功能;

int size():获取集合中的元素数

Iterator iterator():迭代器获取

6)转换功能:

Object[] toArray():将集合转换成数组

这里给出一个这些方法的小例子帮组理解:

代码: public class CollectionDemo {

public static void main(String[] args) {

//创建一个Collection集合对象

Collection c = new ArrayList() ;//通过子类创建对象

//添加功能:

boolean add(Object e):给集合中添加指定的元素

boolean flag = c.add(“hello”) ;

c.add(“hello”) ;

c.add(“world”) ;

c.add(“Java”) ;

//void clear():删除一个集合中的所有元素,暴力删除,(不建议使用)

c.clear() ;

//boolean remove(Object o):删除一个集合中的指定元素

System.out.println(“remove:”+c.remove(“hello”)) ;

//boolean contains(Object o):判断一个集合中是否包含指定的单个元素

System.out.println(“contains:”+c.contains(“world”));

// boolean isEmpty():判断集合是否为空,如果为空,则返回true System.out.println(“isEmpty:”+c.isEmpty());

//int size():获取集合中的元素数

System.out.println(“size:”+c.size());

System.out.println(“c:”+c);

}

}

从这个例子中可以看出,集合Collection是通过它的子实现类ArrayList创建对象的,在这些方法中需要注意的是集合长度的获取方法size(),这个和数组以及字符串长度的获取有所区别,数组中的获取为length,字符串为length()方法。

看了上面的例子之后,我们对Collection集合有了一定了解,那么当我们想遍历一个集合应该怎么做呢?

通过看前面的成员方法,我们可以发现,其中有一个成员方法是Object[] toArray():将集合转换成数组,可以将集合转换为数组进行遍历,Object[] objs = c.toArray() ;以上个题的集合c为例,因为所以类都是继承自Object类,所以创建一个Object数组接收。转换为数组之后再用for循环进行遍历。这种方式是可以的。但是在集合里面有专门的遍历方式,那就是迭代器Iterator。

迭代器Iterator也是一个接口:

interace Iterator{

public abstract boolean hasNext();

public abstract Object next() ;

}

这是Iterator迭代器的源码,里面只有两个抽象方法,而另外一个接口 Iterable的源码为

interface Iterable{

Iterator iterator();

}

它也只有一个方法,返回类型为Iterator迭代器。

为什么要写Iterable接口呢?因为Collection接口继承了Iterable接口,同时继承了他的方法,而List接口继承了Collection接口,ArrayList实现了List接口,最后在ArrayList类中重写了Iterator iterator();方法,重写后的方法为public Iterator iterator() {

return new Itr();//Iterator it=new Itr();

}

其中Itr是ArrayList的一个内部类,它实现了iterator接口,并重写了hasNext();和next();方法。而这两个方法的作用是

boolean hasNext():判断一个集合中是否有下一个可以迭代的元素: 判断功能

Object next()返回迭代的下一个元素:获取功能

这两个方法就是迭代器实现遍历的关键,下面给出遍历代码:

while(it.hasNext()){

System.out.println(it.next());//获取字符串的内容

}

这样就能实现迭代器遍历了。

这就Collection集合中的一部分方法了,下篇再继续介绍List中的特有方法。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: