集合(上)

Java集合框架

目录

Java集合框架

 一.集合的应用

 二.集合框架的体系结构

 三.Collection的子类——List的实现类及其方法

 三.迭代器以及并发修改异常


 一.集合的应用

 1. 无法预测存储的数据的数量
 2. 同时存储具有一对一关系的数据
 3. 需要进行数据的增删
 4. 数据重复问题

 二.集合框架的体系结构

集合框架的体系结构主要分为Collection和Map。Collection由三部分构成,分别是List(序列)、Set(集)、Queue(队列)。从Collection到它的子类List、Set、Queue,都是接口,而再往下则是其实现类。List下的实现类有ArrayList、Vector、LinkedList。Set下的实现类有HashSet、TreeSet、LinkedHashSet。而Map下则以HashMap为主。


 三.Collection的子类——List的实现类及其方法

Collection中三个主要部分是 List(序列)、Set(集)、Queue(队列)。在List中有三个常用实现类,分别是ArrayList、Vector、以及LinkedList。ArrayList的数据结构是数组,查询快,增删慢。线程不安全,效率高,Vector的数据结构是数组,查询快,增删慢线程安全,效率低。LinkedList 数据结构是链表,查询慢,增删快,线程不安全,效率高。

List的实现类数据结构查询速度增删速度线程安全性
Vector数组线程安全
ArrayList数组线程不安全
LinkList链表线程不安全

而在Collection中写了许多方法,这些方法是实现类中通用的,以下是一些常用方法:

元素的添加方法,添加成功则返回true:public boolean add​(E e)

元素移除方法,若有传入的元素则返回true: public boolean remove​(Object o)

如果此集合包含指定集合中的所有元素,则返回true:  public boolean containsAll​(Collection<?>

将指定集合中的所有元素添加到此集合,成功则返回true:  public boolean addAll​(Collection<? extends E>

删除指定集合中包含的所有此集合的元素。此调用返回后,此集合将不包含与指定集合相同的元素。:

public boolean removeAll​(Collection<?> c)

从该集合中删除所有不包含在指定集合中的元素。: public boolean retainAll​(Collection<?> c)

清空集合:public void clear​()

返回此集合的字符串表示形式:  public String toString​()

 返回包含在该集合中的元素的迭代器:   public abstract Iterator<E> iterator​()

返回集合大小: public abstract int size​()

集合为空则返回true: public boolean isEmpty​()

如果此集合包含指定的元素,则返回true: public boolean contains​(Object o)

返回一个包含此集合中所有元素的数组:public Object[] toArray​()


除此之外,在Collection的子类List中有一些特有的方法,可以通过索引,对于数据元素进行操作。

将指定元素放在指定的索引处:void add​(int index, E element)

删除指定下标的元素,返回被删除的元素:E remove​(int index)

返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。:int indexOf​(Object o)

返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1:int lastIndexOf​(Object o)

返回列表中的列表迭代器(按适当的顺序):ListIterator<E> listIterator​()

从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器:ListIterator<E> listIterator​(int index)

根据指定的Comparator引发的顺序排列此列表:default void sort​(Comparator<? super E> c)

返回此列表中指定位置的元素。:E get​(int index)

用指定的元素替换此列表中指定位置的元素,并将被替换的元素返回E set​(int index,E element)。

除过Collection和List接口中的方法之外,每个实现类中也具有各自特有的方法,在此不再赘述。

 四.迭代器以及并发修改异常

迭代器Iterator是提供一种方法对一个集合对象中的各个元素进行访问,而又不暴露该对象容器的内部细节。

迭代器的创建主要是通过集合的具体实现中的.iterator();方法来实现,该方法会返回一个迭代器对象,再通过迭代器中的.hasNext();和.next();方法来实现集合遍历,List中具有一个独特的迭代器:listiterator。它是List中独有的迭代器,支持对集合进行倒序迭代,但是在倒序迭代前需要对集合进行正序迭代,否则无法正常输出想要的倒序集合。

迭代器通过集合的具体实现进行创建,在创建时会将集合数据放入迭代器之中,在迭代器循环时对集合进行修改(添加或删除),导致集合改变会出现并发修改异常(ConcurrentModificationException)。

因为再迭代之前,迭代器已经被通过.itertor()创建出来了,如果在迭代的过程中,又对list进行了改变其容器大小的操作,那么Java就会给出异常。因为此时Iterator对象已经无法主动同步集合做出的改变,Java会认为你做出这样的操作是线程不安全的,就会给出善意的提醒(抛出ConcurrentModificationException异常)。

并发修改异常避免的最好方法是在集合进行遍历的时候,若想要操作集合(添加或删除),使用迭代器自身所有的添加和删除方法,对集合进行操作,这样就可以很好的避免并发修改异常。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值