Java 集合框架
1 集合的体系介绍
上图为Java集合体系介绍,本片介绍 ArrayList、LinkedList、Collection、Vector由于用的不多,不过多介绍。
java集合框架的建立是围绕着一个祖先接口Collection完成的,Collection里定义了几盒的框架性功能,对于数据的处理,添加、删除、判断、获取、获取交集、集合变数组
1,添加
add(e);
addAll(collection);
2,删除
remove(e);
removeAll(collection);
clear();
3,判断。
contains(e);
isEmpty();
4,获取
iterator();
size();
5,获取交集。
retainAll();
6,集合变数组。
toArray();
2 Iterator
迭代器是什么?
迭代器的作用是从集合中取出元素,它只是一种取出方式,迭代器可以直接访问集合元素,可以通过容器中的方法iterator( )进行数据访问。
迭代器是怎么实现功能的?
其实取出方式就定义在集合的内部,比如在ArrayList集合中、也可以在LinkedList集合中,或者在Vector中,不同的集合有不同的取出方法,也有一些集合特有的方法,帮助java对数据进行操作,需要强调的点有:
- Iterator( )容器方法,将不同集合的不同方法访问数据的方法进行了共性抽取
- 它们都有各自判断取出的方法
- 取出方式定义在集合内部,可以直接访问集合内的元素
3 集合体系中的重点内容
上面的集合框架内容太多了,如果只要我们需要的话
- Collection:集合的接口祖先,定义着集合的功能性框架
- List:元素是有序的,元素可以重复。因为该集合体系有索引。
- ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
- LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
- Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
- Set:元素是无序,元素不可以重复。
- List:元素是有序的,元素可以重复。因为该集合体系有索引。
关于list的特有方法?
特有方法。凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index):
subList(from,to);
listIterator();
int indexOf(obj):获取指定元素的位置。
ListIterator listIterator();
5 ListItreator迭代器
关于list迭代,一般有两种写法,一个是使用普通的列表操作,另一个是使用迭代器,需要注意,对于同一组list集合,能进行迭代的方式只有一种,否则会出现并发访问的错误,意思就是,不能同时在迭代器对象中使用collection集合内定义的方法:
Iterator it = al.iterator()
while(it.hasNext())
{
Object obj = it.next();
if(obj.equals("java02"))
al.add("java08");// 到底是取出呢?还是加入呢?
sop("obj="obj);
}
- list集合有自己特有的迭代器listIterator(),它是Iterator()的子接口
- 但是迭代器内没有加入的方法,怎么办么?使用Iterator()的子接口listIterator()帮助完成加入。
6 Linkedlist中存在的特有方法,模拟堆栈与队列
LinkedList:特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素。如果集合中没有元素,会出现NoSuchEle mentException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了替代方法。
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素。如果集合中没有元素,会返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,会返回null。
但是它可以做的事情是什么呢? 他可以模拟队列、堆栈两种数据结构
队列:先进先出,像一个水管。
堆栈:先进后出,像一个杯子。
队列的模仿:
class DuiLie
{
private LinkedList link;
DuiLie()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addFirst(obj);
}
public Object myGet()
{
return link.removeFirst();
}
public boolean isNull()
{
return link.isEmpty();
}
}
class LinkedListTest
{
public static void main(String[] args)
{
DuiLie dl = new DuiLie();
dl.myAdd("java01");// 在头部加
dl.myAdd("java02");
dl.myAdd("java03");
dl.myAdd("java04");
while(!dl.isNull())
{
System.out.println(dl.myGet());// 在尾部取出
}
System.out.println(dl);
}
}
删除ArrayList中的重复元素
import java.util.ArrayList;
import java.util.Iterator;
public class ArryListDemo {
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add("java_1");
al.add("java_2");
al.add("java_3");
al.add("java_4");
al.add("java_2");
al.add("java_3");
al.add("java_1");
sop(al);
al = singleArr(al);
sop(al);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
public static ArrayList singleArr(ArrayList arr)
{
ArrayList NewAl = new ArrayList(); // 新建空列表,剔除多余元素
Iterator arr_I = arr.iterator(); // 将传入进行迭代
while (arr_I.hasNext())
{
Object obj = arr_I.next();
if(!NewAl.contains(obj)) // 进行判断,是否加入
NewAl.add(obj);
}
return NewAl;
}
}