面向对象语言对对象进行操作,为方便对多个对象操作,就对对象存储,集合就是存储对象的最常用方式。
集合长度可变,存储的内容格式不唯一。
在集合框架中,为什么出现多种容器?
因为每一个容器对数据的存储方式不同。这种存储方式称为“数据结构”。
|---List :元素是有序的,元素可以重复,因为该集合体系有索引(即脚标)
collection--|--Set:元素是无序的,元素不可以重复。
一、添加
ArrayList al=new ArrayList();// 新建一个容器
al.add(对象1); al.add(对象2);// al.size()为 2.
add()方法的参数类型是Object,以便于接收任意类型对象, 集合中存储都是对象的引用。
二、打印
S.o.p(al); 打印结果:[对象1,对象2]
三、删除
al.remove(对象1);
四、是否包含
al.contains(对象1)
取交集:al.retain(al2); 此操作之后,al中存放的是al和al2的交集。
但是如果:System.out.println(al.retain(al2));//当两个对象有交集时,输出 true,反之输出false。
五、获取
使用迭代器,获取集合中的元素
Iterator it=al.iterator();//调用iterator方法得到迭代器 it。
什么是迭代器?
本质就是集合的元素取出方式。
将获取元素的这个方式定义在集合中,这样就可以直接访问其中元素。那么取出方法就是内部类, 而每个容器中的元素不一样,那么取出方式也不一样,但都有共性内容(比如都是要先判断是否有,再取)。那么将这些共性抽取成接口Iterator, 通过集合引用中iterator()方法建立。
对于List 体系中;其有些针对 脚标操作的特有方法。
1、添加
ArrayList al=new ArrayList();
al.add("java01"); al.add("java02");
al.add(1,"java03");//------------>al:[java01,java03,java02]
2、删除
al.remove(2),将脚标为2的元素删除
al:[java01,java03]
3、修改
al.set(1,"java007")
al:[java01,java007]
4、查找
al.get(1);----------------->脚标为1的元素:java007
获取所有元素:建议使用迭代器
List 集合特有的迭代器:ListIterator是Iterator 的子接口
在迭代时,不能用集合对象的方法去操作元素对象,因为会发生异常。所以,在此时用迭代器来操作元素,可是Iterator方法中只能判断(hasNext())、
取出(next()),删除(remove())操作,如果要进行添加,修改就需要其子接口,ListIterator 实现。 该接口能能通过List集合的listiterato方法获取
。
|---->ArrayList:底层的数据结构使用的数组结构,特点:查询快,删除,添加慢,线程不同步
|
|--->LinkedList 底层的数据结构是链表结构,特点:查询慢,删除、添加快
list ----------- |--->Vector 底层也是数组数据结构;线程同步
Vector 特有的取出方式:Enumeration 枚举:枚举的应用和迭代器相似。
LinkedList 的特有方法
addFirst()//添加到第一位置; addLast()//添加的末尾, getFirst()//获取第一位元素
getLast()//获取最后一个元素
removeFirst()//移除第一个元素,并返回该元素 removeLast().//移除并
返回最后一个元素
例子:用LinkedList方法设计堆栈和队列的数据结构
分析: 主要区别 堆栈:先进后出 队列:先进先出
class lianxi
{
private LinkedList link;
lianxi()
{
link=new LinkedList()
}
public void myAdd(Object obj)
{
link.addFirst(); //进入方法 1
}
public voie myGet(Object obj) 如果 进入方法1 和取出方法 1 结合,则是先进 先出,队列结构
{ 和取出方法2结合,是先进后出,堆栈结构。
link.getLast(); //取出方法 1
// link.removeFirst(); 取出方法2
}
}