List&Set

已有 69 次阅读2017-7-1 19:28 |个人分类:知识慢梳|系统分类:学习纪录

为什么出现集合类
面向对象语言对事务的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式
数组和集合类同时容器,有何不同?
数组也可以存储对象,但长度是固定的;集合长度是可变的,数组可以存储基本数据类型,集合只能存储独享

集合类的特点
存储对象,长度可变,可以存储不同类的对象

集合框架
(接口)Collection
List
ArrayList
LinkedList
Vector
Set
HashSet
TreeSet
为什么会出现怎么多的容器呢?
因为每一个容器对数据的存储方式都有不同
这个存储方式称之为:数据结构(数据在内存中的接口不一样)

Collection是根接口
ArrayList :初始创建一个容量为10的集合。
add方法的参数类型是Object,以便于接受任意类型对象
集合中不可能存放的对象,集合和数组一样,存的都是地址

remove方法:删除
retainAll:取交交集集

什么是迭代器呢?
其实就是集合的取出元素的方式。
容器里有一个取出对象,数据结构不同,取出动作不一样
就把取出方式定义在集合的内部,这样取出方式就可以直接访问集合内部的元素
那么取出方式就被定义成了内部类
而每一个容的数据结构不同,所以取出的动作细节也不一样,但是,都有共性内容
就是判断-取出。name可以将这些共性内容抽取。

那么这些内部类都符合一个规则,该规则就是Itreator
如何获取集合的取出对象呢?
通过一个对外提供的方法。
iterator:判断,迭代下一个元素,移除其集合中的引用
hasNext
next
remove
ListIterator:

List 集合特有的迭代器,listIterator是Iterator的子接口
在迭代时,不可以通过集合对象的方法操作集合中的元素。会发生ConcurrentModificationException异常
所以,在迭代器时,只能用迭代器的方法操作元素,可是Itreator的方法是有限的
只能对元素进行判断,取出,删除等操作,
如果想要其他操作如,添加,修改,就需要使用其子接口,叫做ListItreator
该接口只能通过List集合的ListIterator来完成




List:元素是有序的,元素可以重复。因为该集合体系有索引
(线程不同步,效率高) ArrayList:底层的数据接口使用的是数组结构。查询,修改都很快。增加和删除有点麻烦
LinkedList:底层使用的是链表的结构。特点:增删速度很快,查询稍慢
(线程同步,增删查改,都慢)Vector:底层是数组数据结构。是jdk1.0出现的。1.2出现的集合框架,在集合框架出现之前用的都是Vector,并且vector是100%延长
ArrayList,默认长度是10的空列表,超过10的时候,就会new新一个数组。50%延长,把原来数组的元素,copy到新的数组。
如果用多线程,就自己加锁。不用Vector
Set:元素是无序的,元素不可以重复

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)

facelist

doodle 涂鸦板

您需要登录后才可以评论 登录 | 立即注册

Copyright;  ©2015-2017  知了堂学习社区  Powered by  知了堂Edu!     ( 蜀ICP备16011312号-1 )