一、概述
1、为什么出现集合类?
面向对象语言对事物的体现都是以对象的形式,
所以为了对多个对象的操作,就对对象进行存储,
集合就是存储对象最常用的一种方式。
2、数组和集合类同是容器,有何不同?
数组虽然也可以存储对象,但长度是固定的;
集合长度是可变的。数组中可以存储基本数据类型,集合只能存储对象。
3、集合类的特点
集合只用于存储对象,集合长度是可变的,集合可以存储不同类型的对象。
4、为什么会出现那么多的容器呢?
因为每一个容器对数据的存储方式都有不同。
这个存储方式称之为:数据结构。
二、Collection接口常见操作
ArrayList al=new ArrayList();
1、添加元素
2、获取个数。集合长度。//集合中存储的都是对象的引用(地址)
3、删除元素
clear();//晴空集合
4、判断元素
isEmpty();//是否为空
5、取交集
removeAll();//移除此 collection 中那些也包含在指定 collection 中的所有元素
三、迭代器
1、概述
如:Iterator it =al.iterator(); //获取迭代器,用于取出集合中的元素。
2、常见操作
两种应用方法,效果相同,但后一个更严谨
如:
方案一
while(it.hasNext())
{
sop(it.next());
}
方案二
for(Iterator it=al.iterator();it.hasNext(); )
{
sop(it.next());
}
三、List
1、组成
Collection
|--List:元素师有序的,元素可以重复。因为该集合体系有索引。
|--ArrayList:底层的数据结构实用的是数组结构。特点:查询速度快,但是增删稍慢,并且线程不同步。
|--LinkedList:底层实用的链表数据结构。特点:增删速度很快,查询稍慢。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
|--Set:元素师无序的,元素不可以重复。
List:特有方法。凡是可以操作角标的方法都是该体系特有的方法。
2、常见操作
2.1 增
add(index,element);
addAll(index,Collection);
如:al.add(1,"java09");
2.2 删
remove(index);
如:al.remove(2);
2.3 改
set(index,element);
如:al.set(2,"java07");
2.4 查
get(index);
subList(from,to);
listIterator();
如:sop("get(1):"+al.get(1));
3、ListIterator
在迭代时,不可以通过集合对象的方法操作集合中的元素。
因为会发生ConcurrentModificationException异常。
所以,在迭代器时,只能用迭代器的方法操作元素,课时Interator方法时有限的。
只能对元素进行判断,取出,删除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。
该接口只能通过List集合的ListInterator方法获取。
4、Enumeration
发现枚举和迭代器很像。
其实枚举和迭代时一样的。
因为枚举的名称以及方法的名称都过长。
所以被迭代器取代了。
枚举郁郁而终䠾。
5、LinkedList
LinkedList:特有方法:
5.1添加
addFirst();
addLast();
5.2 获取
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchElementException
5.3移除
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6中出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
练习1:
/*
需求:使用LinkedList模拟一个堆栈或者队列数据结构。
思路:1.堆栈:先进后出 如同:手枪的弹夹
队列:先进先出 First in First out 如同:水管
2.选用LinkedList中的getFirst()和getLast()方法
3.封装方法
*/
import java.util.*;
class DuiLie
{
private LinkedList link;
DuiLie()
{
link=new LinkedList();
}
public void myAdd(Object obj)//添加元素
{
link.addFirst(obj);
}
public Object myGet() //移除末尾的元素
{
return link.removeLast();
}
public boolean isNull()//判断是否为空
{
return link.isEmpty();
}
}
class LinkedListDemo
{
public static void main(String[] args)
{
DuiLie dl=new DuiLie();
dl.myAdd("java05");
dl.myAdd("java04");
dl.myAdd("java03");
dl.myAdd("java02");
dl.myAdd("java01");
while (!dl.isNull())//不为空时循环获取
{
sop(dl.myGet());
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
结果输出: