JAVASE之集合框架-----List

来源:互联网 发布:期货 期权 知乎 编辑:程序博客网 时间:2024/05/21 11:12

为了方便对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式

特点:集合只用于存储对象;集合的长度是可变的,集合可以存储不同类型的对象

 

数组和集合类的区别:

数组的长度是固定的,可以存储基本数据类型

集合的长度是可变的,只能存储对象

 

常见集合类:

Collection

|-----List

|  |-----ArrayList

|  |-----LinkedList

|  |-----Vector

|-----Set

 |-----HashSet

                 |-----TreeSet

每一种容器对应的数据的数据结构都不同

 

List集合中的元素是有序的,并且元素是可以重复的,此集合体系中有索引

  |-----ArrayList:底层的数据结构是数组,线程不同步

  |-----LinkedList:底层的数据结构是链表结构,线程不同步

  |-----Vector:底层是数据结构是数组,线程同步


都是数组ArrayListVector的区别:

二者长度的初始化都是10,但是当长度不够时:

ArrayList重新new一个新的ArrayList,长度50%增长,把原来的copy到新的集合中

Vector当长度超过十时,长度100%延长,也就是2倍延长。

 

Vector是JDK1.0的,而ArrayList是JDK1.2。Vector出现的时候集合框架还没出现。


List特有方法:凡是可以操纵角标的方法都是该体系的特有方法

 

增删改查:

    增:add(index,element)

addAll(index,Collection);

    删:remove(index)

    改:set(index,element);

    查:get(index);

subList(from,to);

  indexOf(obj)


集合的取出方式和数组的大不相同,使用迭代器对其进行遍历


迭代器:

 

对于取出元素操作不止一个动作(包括判断有无元素),因为每个集合的的数据结构不同,所以取出动作细节也不同,但都有共性方法(判断,取出),抽取出来形成一个接口。

所以通过一个类描述取出方式,每个类的实现方式不一样,这个类定义在集合内部,由于元素在集合内部,所以定义为内部类最方便。这些内部类都符合一个规则,该规则是Iterator

将取出动作封装成一个对象,而对象在内部实现,通过iterator()方法获取集合的取出对象

Iterator取出方法演示:


Iterator内部只有判断,取出,移除,三个方法,所以在遍历的时候只能使用对象的add方法来添加,下面的程序说明了不能用add方法的原因
此程序运行时会报错,如下所示:
ConcurrentModificationException

错误分析:

程序执行al.iterator()后,将al的内容全部读取到li中,循环内部,li在取元素,但是对象在添加元素,会产生异常,抛出ConcurrentModificationException

所以不能既用集合又用迭代器同时操作同一组元素,有可能会引发并发修改异常

这时候:列表迭代器ListIterator出世了

 

ListIteratorList集合特有的迭代器,ListIteratorIterator的子接口。

在迭代时,不可以通过集合对象的方法操作集合中的元素

因为会发生ConcurrentModificationException异常

所以,在迭代时,只能用迭代器的方法操作元素,但是Iterator的方法是有限的

只能对元素进行判断,取出,删除的操作

如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator

该接口只能通过List集合的listIterator方法获取

 

将上述程序的Iterator换成ListIterator就可以执行成功



LinkedList

LinkedList特有方法:

addFirst(e):将指定元素插入次列表的开头

addLast(e)

 

获取元素但不删除元素,获取不到会抛出NoSuchElementException异常

getFirst():

getLast()

 

获取元素,但是元素被删除,如果集合中没有元素,或出现异常NoSuchElementException

removeFirst();

removeLast();

 

JDK1.6出现了替代方法

  offerFirst():将指定元素插入次列表的开头

offerLast();

 

获取元素,但不删除元素,如果集合中没有元素,会返回null

peekFirst();

peekLast();

 

获取元素,但是元素被删除,如果集合中没有元素,会返回null

pollFirst();

pollLast();

 

LinkedList具体方法演示,构建栈或者队列



vetcor

Vector与其他两者不同的是,特有取出方式是枚举,其实和迭代器的功能相同

Vector属于比较元老级的集合,枚举演示:


Notes:

List 中的元素是可以重复的,若需要去掉重复的元素,则需要contains(obj)

底层调用的是equals(obj)方法,覆盖了Object类中的equals

所以有时候需要根据需求重写equals(obj)方法,比如当集合中存入的是对象的时候

0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 新生儿吐奶吐一次吐的特别多怎么办 把孩子打了一次现在说话结巴怎么办 宝宝五岁了口吃越来越严重了怎么办 幼儿把自己的舌头扣破皮了怎么办 6岁宝贝烧到39度怎么办 2岁半的宝宝说话结巴怎么办 2周3宝宝不会说话胆小怎么办 宝宝我2岁多了说话有点结巴怎么办 两岁宝宝说话突然结巴了怎么办 两岁3宝宝叫她名字不理人怎么办 九个月的宝宝身高不达标怎么办 3岁宝宝又吐又拉怎么办 宝宝发烧39度怎么办手脚很烫 两岁宝宝吃什么吐什么怎么办 7岁宝宝吃多了吐怎么办 7个月的宝宝大便干燥怎么办 10个月宝宝便秘大便干燥怎么办 一岁半宝宝老是拉糊糊状大便怎么办 外阴部长了一个疙瘩有点痒怎么办 小孩打架被另一个小孩家人告怎么办 德保豆浆机有电但不工作怎么办 刚买的笔记本c盘不足怎么办 qq糖粘在喉咙气管里怎么办 穿上旗袍后感觉后腰处不平整怎么办 机打票给客人给错联怎么办?急 ps修证件照感觉不太立体怎么办 手机百度上下载的文档打不开怎么办 5岁宝宝乘飞机没带证件怎么办 网上订飞机票忘记订儿童票了怎么办 两岁宝宝对牛奶鸡蛋过敏了怎么办 两岁宝宝坐不住好跑怎么办 宝宝两岁多了不愿意坐小马桶怎么办 坐火车小孩拉屎在被子上怎么办 川航飞机票名字错了一个字怎么办 胜战本领怎么看走向战场怎么办 数数字油画你的颜料干了怎么办? 数字油画涂颜料涂错了怎么办 绝地求生模拟器注册已达上限怎么办 孕妇把番茄和虾一起吃了怎么办 4岁宝贝吃了玩具小电池怎么办 微信使用零钱需完善实名信息怎么办