一. 什么是集合类?
二. Collection接口
2.1 Collection子接口(List接口和Set接口)
2.1 Collection的常用方法
三. 迭代器(Iterator)
3.1 关于迭代器
3.2 迭代其的用法
3.3 迭代器的简化:增强for循环
3.4 使用迭代器向集合添加元素
四. List接口
4.1 List接口的方法
4.2 List接口的实现类
4.3 List遍历的方法
4.4 并发修改异常
放了方便对多个对象操作,需要一个能对对象存储的容器,它得具备:1、可以存不同的对象类型,2、容器的长度可变(放多少个对象进来就有多大);
就酱~~ 满足这要求的容器就是集合啦;特点如下图~
Collection:集合框架的顶层接口。表示一组对象,这些对象也称为 collection 的元素。
Collection有两个子接口,他们的特点是:
List接口:可存放重复的元素,元素存取是“有序”的;
Set接口:不可以存放重复的元素,通常元素存取是“无序”的,也有一些实现类是“有序”的。
注意:上方提到的“有序,无序”指的是存放元素时是否会记住元素的存放顺序;并非对元素进行“排序”。
添加操作
删除操作
查询操作
判断操作
迭代操作
迭代是取出集合中元素的一种方式,因为Collection中有iterator方法,所以每一个子类集合对象都具备迭代器;迭代器的next方法返回值类型是Object,所以要记得类型转换。
迭代器读取元素示意图:
1 Collection c = new ArrayList(); //创建集合对象
2 Iterator it = c.iterator(); //获取此集合的迭代器
3 while(it.haxNext()){ //遍历这个集合
4 Object o = it.next();
5 }
说明:
1、迭代器不保证取出元素的顺序和存入的顺序一致,“有些”是靠集合实例本身保证的;
2、迭代器本身是一个接口,该方法返回的是一个迭代器实例对象,通常使用的是接口多态使用迭代器;
3、迭代器中常用的两个方法是:
boolean hasNext():判断是否有下一个元素;
boolean next();取出下一个元素。
1 //迭代器用法一
2 for(Iterator iter = iterator();iter.hasNext();){
3 System.out.println(iter.next());
4 }
5
6 //迭代器用法二
7 Iterator iter = l.iterator();
8 while(iter.hasNext()){
9 System.out.println(iter.next());
10 }
1 //for(数据类型 迭代变量名:集合对象)
2 for(Object obj : c){
3 //do something with obj
4 }
iterator接口没有添加元素的方法,但是它的子接口ListIterator有,故:用ListIterator迭代,迭代器添加元素。(集合本身迭代,使用集合本身方法添加元素,如add
特有方法
1. 迭代器遍历
1 //迭代器遍历list
2 Iterator it = list.iterator();
3 while(it.hasNext()){
4 Object obj = it.next();
5 System.out.println(obj);
6 }
2. 增强for循环
1 //增强for循环遍历集合
2 for(Object obj : list){
3 System.out.println(obj);
4 }
3. 普通for循环配合get方法
1 //普通for循环,获取指定位置的元素
2 for(int i = 0;i<list.size();i++){
3 System.out.println(list.get(i));
4 }
在使用迭代器遍历ArrayList的时候,若使用集合本身的方法修改了集合,将导致并发修改异常:ConcurrentModificationException,故需注意:
vector类
Vector类是1.0就已经有的,在1.2被整合到集合框架中,其中的大部分方法都和ArrayList相同,但它是线程安全的,所以效率要低,特有方法:
LinkedList类
LinkedList类底层使用的是链表结构保存数据,绝大多数方法和ArrayList相同,只不过多了一些对首尾元素操作的方法
LinkedList底层使用的是链表,但是自己维护了一个索引,所以提供了get(int index)的方法来通过索引获取元素,但此方法的效率很低,一般不使用
是否需要线程安全: 如果是,可以选择Vector,但是可以通过其他方式让其他两种类也达到线程安全的,所以一般也不会使用Vector;
如果不是,考虑是增删多还是查询多,增删多:使用LinkedList;查询多:使用ArrayList
原文:https://www.cnblogs.com/yiwanfan/p/8887591.html