Java---集合初入门

来源:互联网 发布:风火轮打单软件 编辑:程序博客网 时间:2024/06/08 00:42

一、集合的由来
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中的特有方法。

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 淘宝上发货后12天未收到款怎么办 京东购买的东西烂了怎么办 苹果4s手机激活密码忘了怎么办 小米4c返回键失灵了怎么办 小米4c下面三个键失灵怎么办 谷歌浏览器打不开指定的网址怎么办 电脑上我的电脑图标没了怎么办 手机上的短信图标没了怎么办 qq密保手机被别人换了怎么办 苹果六手机很卡网络不给力怎么办 堡垒之夜卡在载入界面怎么办 登录新福建一直说网络不给力怎么办 开发游戏平台给了钱不给东西怎么办 代号英雄与服务器断开连接了怎么办 千牛聊天页面买家信息不显示怎么办 秒拍存草稿箱的视频没了怎么办? 登录山东掌厅出现服务器错误怎么办 微信号被多人投诉被限制登录怎么办 联想平板电脑开机密码忘记了怎么办 申请的qq没登录忘了账号怎么办 炫舞时代由于网络原因登不上怎么办 qq申请太多进不了热聊怎么办 手机号申请的微信号被盗了怎么办 买菜别人少找了钱不还怎么办 在掌上英雄联盟买皮肤买错区怎么办 win8我的电脑图标没了怎么办 英雄联盟老是卡在安全扫描怎么办 英雄联盟活动送皮肤没送怎么办 电脑换完系统有些页面打不开怎么办 王卡助手交手机费页面打不开怎么办 在浏览器上打不开路由器页面怎么办 英雄联盟读条的时候自动关机怎么办 手机的位置信息开不了怎么办呢 滴滴车主接到乘客返回路程要怎么办 移动换话费积分是发什么短信怎么办 手机店积分换手机被贷款怎么办 心悦俱乐部礼包已过期是怎么办 心悦兑换的东西不是账号绑定怎么办 心悦会员绑定的手机号不用了怎么办 想在京东商城开个网店怎么办呢 京东买了东西收货了不想要了怎么办