Collection
|–list 元素是有序的,可以重复
|–ArrayList
|–LinkedList
|–Vactor
|–set 元素是无序的,不可以重复
|–HashSet
|–TreeSet
ArrayList
collection接口的子类 ArrayList
Emp e1 = new Emp();
e1.setName("e1");
Emp e2 = new Emp();
e2.setName("e2");
Emp e3 = new Emp();
e3.setName("e3");
ArrayList arr = new ArrayList();
/**
* 1、add方法的参数类型是Object,以便于接收任意类型对象
* 2.集合中存储的都是对象的引用(地址)
*/
arr.add(e1);
arr.add(e2);
arr.add(e3);
/**
* 把取出方式定义在集合的内部,
* 这样取出方式就可以直接访问集合内部的元素
* 那么取出方式就被定义成了内部类
* 而每一个容器的数据结构不同
* 所以取出的动作细节也不一样。但是都有共性内容
* 判断和取出。那么可以将写共性抽取
* 内部类(接口),直接访问集合元素
*/
//*********************************************
Iterator it = arr.iterator();
//*********************************************
while(it.hasNext()){
Object obj = it.next();
if(obj.equals(e1)){
//it.remove();
arr.add(e2);
}
}
//当方法检测到对象的并发修改,但不允许这种修改时,抛出此异常。
//迭代器对集合的引用进行操作,同时集合本身对自己进行操作,引发并发修改异常
//要么用集合的方法,要么用迭代器的方法,此时用
//*********************************************
ListIterator li = arr.listIterator();
//*********************************************
System.out.println(li.hasNext()+"|1|"+li.hasPrevious());
//(true |1| false)
//正向遍历
//*********************************************
while(li.hasNext()){
Object obj=li.next();
if(obj.equals(e2)){
li.set(e1);
li.add(e1);
}
}
System.out.println(li.hasNext()+"|2|"+li.hasPrevious());
//(false |2|true)
//逆向遍历
//*********************************************
while(li.hasPrevious()){
Object obj=li.previous();
if(obj.equals(e2)){
System.out.println("1");
}
}
System.out.println(li.hasNext()+"|3|"+li.hasPrevious());
//(true |3| false)
ArrayList:
底层的数据结构使用的是数组结构(JDK1.2)。(线程不同步,速度快)(带下标)特点:查询速度快,增加和删除速度稍慢
构造一个初始容量为 10 的空列表。超过元素数量超过10的时候,再添加元素,会new一个新的数组,长度50%延长,将原有的拷贝过来,然后再后面加新的元素,可变长度数组
LinkedList:
底层使用的是链表数据结构。特点:增加和删除速度很快,查询速度慢。
public class LinkedListDem {
/**
* LinkedList:特有方法
* addFirst();将指定元素插入此列表的开头。
* addLast();将指定元素添加到此列表的结尾。
* getFirst(); 获取元素,但不删除元素,如果集合中没有元素,
* getLast();--,会出现java.util.NoSuchElementException
* removeFirst();获取元素,并删除元素,如果集合中没有元素,
* removeLast();会出现java.util.NoSuchElementException
* 在JDK1.6出现了替代方法:
* offrt();将指定元素添加到此列表的末尾(最后一个元素)。
* offerFirst();在此列表开头插入指定的元素
* offerLast();在此列表末尾插入指定的元素
* peekFirst();获取元素,但不删除元素,
* peekLast();--如果集合中没有元素,返回null
* pollFirst();获取元素,并删除元素,
* pollLast();--如果集合中没有元素,返回null
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Emp e1 = new Emp ();
e1.setName("a1");
Emp e2 = new Emp ();
e2.setName("a2");
Emp e3 = new Emp ();
e3.setName("a3");
Emp e4 = new Emp ();
e4.setName("a4");
LinkedList <Emp> ll = new LinkedList<Emp>();
// System.out.println(ll.getFirst());//java.util.NoSuchElementException
// System.out.println(ll.removeFirst());//java.util.NoSuchElementException
// System.out.println(ll.peekFirst());//null
// System.out.println(ll.pollFirst());//null
ll.add(e1);
ll.add(e2);
ll.add(e3);
// System.out.println(ll.getLast()+"||"+ll);//此人的人名是:a3||[此人的人名是:a1, 此人的人名是:a2, 此人的人名是:a3]
// System.out.println(ll.removeFirst()+"||"+ll);//此人的人名是:a1||[此人的人名是:a2, 此人的人名是:a3]
// System.out.println(ll.peekFirst()+"||"+ll);//此人的人名是:a1||[此人的人名是:a1, 此人的人名是:a2, 此人的人名是:a3]
// System.out.println(ll.pollFirst()+"||"+ll);//此人的人名是:a1||[此人的人名是:a2, 此人的人名是:a3]
ll.offer(e4);
ll.offerFirst(e4);
System.out.println(ll);//[此人的人名是:a4, 此人的人名是:a1, 此人的人名是:a2, 此人的人名是:a3, 此人的人名是:a4]
}
}
package test;
import java.util.LinkedList;
public class LinkedListTest {
/**
* 使用LinkedList 模拟一个堆栈或者队列数据结构
* 堆栈:先进后出,如同一个杯子
* 队列:现金新出,如图一个水管 First in First out
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
DuiLie dui = new DuiLie();
Emp e1 = new Emp ();
e1.setName("a1");
Emp e2 = new Emp ();
e2.setName("a2");
Emp e3 = new Emp ();
e3.setName("a3");
dui.addEm(e1);
dui.addEm(e2);
dui.addEm(e3);
System.out.println(dui.getBordor());//321
while(!dui.isNull()){
System.out.println(dui.getEm());
}
/* [此人的人名是:a3, 此人的人名是:a2, 此人的人名是:a1]
此人的人名是:a3
此人的人名是:a2
此人的人名是:a1
*/
}
}
class DuiLie{
private LinkedList bordor;
public LinkedList getBordor() {
return bordor;
}
public void setBordor(LinkedList bordor) {
this.bordor = bordor;
}
public DuiLie(){
bordor = new LinkedList();
}
public void addEm(Emp e){
bordor.offerFirst(e);
}
public Object getEm(){
return bordor.pollFirst();
// return bordor.pollLast();
}
public Boolean isNull (){
return bordor.isEmpty();
}
}
Vector:
底层的数据结构使用的是数组结结构(JDK1.0)(线程同步,速度慢,被ArrayList替代了)