集合类(常用集合类、Iterator迭代器、)

一、集合类是什么?为什么要使用集合类?
java集合类就像是一个容器,专门用来储存java类的对象。
java数组可以保存多个对象,但是一旦建立,数组的长度是无法改变的。为了保存这些数目不确定的对象,JDK提供了一系列特殊的类,这些类可以存储任意类型的对象,并且长度可变,称为集合。这些类全都位于java.util包中,使用时需要注意包的导入。

二、集合的区分
集合按照存储结构分为两大类,单列集合Collection和双列集合Map。
下面是整个集合类的继承体系(来源自传智播客)
这里写图片描述
两种集合的特点具体如下:
Collection(单列)接口有两个子接口List和Set。
List的特点是元素有序,元素可重复。Set的特点是元素无序不可重复。
List主要实现类是ArrayList和LinkedList,Set接口主要实现类是HashSet和TreeSet。
Map(双列)是用于存储键值映射关系的元素,主要实现接口是HashMap,TreeMap。
使用Map的时候可以通过Key找到指定的Value。

三、Collection接口

Collection接口的一些方法

add(xx)//像集合中添加一个元素 xx为元素
addAll(xx)//将指定的Collection接口中的所有元素添加到该集合 xx为指定Collection
clear()//删除该集合中的所有元素
remove(xx)//删除该集合中的指定元素,xx为元素
removeAll(xx)//删除指定集合中的所有元素,xx为指定集合
isEmpty()//判断该集合是否为空
contains(xx)//判断该结合中是否包含某个元素   xx为元素
containsAll(xx)//判断该集合中是否包含指定集合中的所有元素 xx为集合
iterator()//返回该集合的元素上进行迭代的迭代器 ,用于遍历该集合所有元素
size()//获取该集合元素个数

四、List接口

是Collection接口的一个分支,习惯将实现了list接口的对象成为list集合。
该集合允许出现重复元素,所有元素通过线性方式存储,可以通过索引来访问指定元素。该集合是元素有序的,即元素的存入顺序和取出顺序一致。

add(xx,yy)//将元素yy插入到List集合的xx处
addAll(xx,yy)//将集合yy包含的所有元素插入到List集合的xx处
get(x)//返回集合索引x处的元素
remove(x)//删除x所引出的元素
set(x,y)//将x处的元素换为y,并将替换后的元素返回
indexOf(x)//返回对象x 在list集合中出现的位置索引
lastIndexOf(x)//返回对象x在list集合中最后一次出现的位置索引
subList(x,y)//返回将索引x(包括)到y(不包括)处所有元素集合组成的子集合

五、ArrayList集合

ArrayList是List的一个实现类,是最常见的一种集合。在该集合内部封装了一个长度可变的数组对象,当存入的元素超过数组长度时,ArrayList会在内存中分配一个更大的数组来存储,因此可将ArrayList看做一个长度可变的数组
该集合中的大部分方法都是继承两个父类的,其中add方法和get方法实现了元素的存取。
但是该方法的底层是使用数组保存的,增加和删除时会导致新数组的创建。因此不适合做大量的增删操作。但是该集合可以通过索引的方式来访问元素,因此使用该集合查找元素很便捷。

六、LinkedList集合
该集合改善了ArrayList集合增删不方便的局限。内部维护了一个双向循环链表,链表中的每一个元素都使用引用的方式记住他的前后元素,从而将所有元素连接起来。
该集合为了提高增删效率,还专门定义了一些增删特有方法。

add(x,y)//在此列表中x位置插入y元素
addFirst(x)//将x元素插入到此列表开头
addLast(x)//将x元素插入到此列表结尾
getFirst()//获取第一个元素
getLast()//返回此列表最后一个元素
removeFirst()//移除并返回此列表第一个元素
removeLast()//移除并返回此列表最后一个元素

七、Iterator接口
这是JDK专门提供的用来遍历集合中所有元素的接口。
该接口不用来存储元素,而是用来迭代访问(遍历)Collection中的元素,因此又称Iterator对象又称为迭代器。
迭代器的使用

ArrayList list=new ArrayList();
list.add("data-1");
list.add("data-2");
list.add("data-3");
list.add("data-4");
Iterator it=list.iterator();
while (it.hasNext()){
    Object obj=it.next();
    System.out.println(obj);
}

需要注意的是,通过迭代器获取ArrayList集合中的元素时,都会将这些元素当做Object类型来看待,如果想得到特定的类型元素,需要进行强制类型转换。
在使用迭代器对元素进行迭代时,如果调用了集合对象的remove方法去删除元素会造成异常。如果使用迭代器本身的remove方法则可解决问题。因为迭代器本身的remove方法删除元素导致的迭代次数的变化,对于迭代器对象本身来说时可以预知的。

八、foreach循环
该循环的作用是替代Iterator迭代器,因为该迭代器使用实在是比较麻烦。foreach循环是for循环更加简洁的体现,也成增强for循环。
foreach循环用于便利数组或集合中的元素

for(容器中元素类型 临时变量:容器变量){
    执行语句
}
//foreach循环不需要获取容器长度,不需要根据索引来访问容器中的元素,会自动遍历容器中的每一个元素

但是该方法也有局限,使用该方法循环遍历集合和数组时,只能访问集合中的元素,不能修改。for循环是可以修改的。

九、ListIterator接口

该接口的出现是因为Iterator接口只能实现正向迭代,而ListIterator在Iterator的基础上增加了一些特有方法。

add(x)//将元素插入列表(可选操作)
hasPrevious()//如果以逆向遍历列表,列表迭代器有多个元素,则返回true
previous()//返回列表中的前一个元素
remove()//从列表中移除有next或previous返回的最后一个元素(可选操作)

该迭代器只能用于List集合

十、Enumeration接口

这个接口是没有Iterator接口之前的方法,现在有了还学习他是因为很多程序中依然在使用。
jdk中提供了一个Vector集合,该集合是List的一个实现类,用法和ArrayList完全相同,区别在于Vector集合是线程安全的,ArrayList不安全。在Vector类中提供了一个elements( )方法用于反回Enumeration对象,通过该对象就可以遍历结合中的元素

Vector v=new Vertor();
v.add("jack");
v.add("rose");
v.add("tom");
Enumeration en=v.elements();
while(en.hasMoreElements()){
    Object obj=en.nextElement();
    System.out.println(obj);
}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值