/*
* Collection
* |--List:元素是有序的,元素是可以重复的。因为该集合体系有索引
* |--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。增删稍慢。 线程不同步
* |--LinkList:底层使用的是链表数据结构。特点:增删速度很快,查询慢。
* |--Vector:出现是1.0版本,那个时候还没有集合框架。线程同步。被ArrayList替代了
*
* |--Set:元素是无序的,元素不可以重复。
*
*
* List:
* 特有方法。凡是可以操作角标的方法都是该体系特有的方法。
*
* 增
* add(index,element);
* addAll(index,Collection);
* 删
* remove(index);
* 改
* set(index,element);
* 查
* get(index);
* subList(from,to);
* ListIterator();
*
*
* */
//List集合特有的迭代器。ListIterator是Iterator的子接口。
//在迭代时,不可以通过集合对象的方法操作集合的元素。
//因为会发生ConcurrentModificationException异常
//所以,在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的
//只能对元素进行判断,取出,删除的操作,
//如果想要其他的操作,如添加,修改等,就需要使用其子接口ListIterator。
//该接口只能通过List集合的ListIterator完成
//List集合中的元素都带角标
import java.util.*;
public class ListDemo {
/**
* @param args
*/
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void method()
{
ArrayList al = new ArrayList();
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
sop("原集合是:"+ al);
//在指定位置添加元素。
al.add(1,"java09");
sop(al);
//删除指定位置的元素
//al.remove(2);
al.set(2, "java07");
sop("get(1):" + al.get(1));
sop(al);
//获取所有元素。
for(int x=0; x<al.size();x++)
{
System.out.println("al("+x+")"+al.get(x));
}
Iterator it = al.iterator();
while(it.hasNext())
{
sop("next:" + it.next());
}
//通过indexof获取对象的位置
sop("index="+al.indexOf("java01"));
//包含首不包含尾
List sub = al.subList(1, 3);
sop("sub="+ sub);
}
public static void main(String[] args) {
ArrayList al = new ArrayList();
//添加元素
al.add("java01");
al.add("java02");
al.add("java03");
al.add("java04");
sop(al);
ListIterator li = al.listIterator();
sop("hasPrevious()"+li.hasPrevious());
while(li.hasNext())
{
Object obj = li.next();
if(obj.equals("java02"))
//li.add("java009");
li.set("java006");
}
sop("hasNext:"+li.hasNext());
sop("hasPrevious:"+li.hasPrevious());
while(li.hasPrevious())
{
sop("pre::"+li.previous());
}
sop("hasNext:"+li.hasNext());
sop("hasPrevious:"+li.hasPrevious());
/*Iterator it = al.iterator();
//在迭代过程中,准备添加或者删除元素
while(it.hasNext())
{
Object obj = it.next();
//if(obj.equals("java02"))
//al.add("java008");
//会报错误,一个在添加,一个在修改。。。。出现并发修改会报此异常
// java.util.ConcurrentModificationException
if(obj.equals("java02"))
it.remove();//将java02的引用从集合中删除,
//元素还被obj使用,能打印不能添加
sop("obj=" + obj);
}*/
sop(al);
}
}
package day14;
/*
* LinkList:特有方法:
* addFirst();
* addlast();
*
* getFirst();
* getLast();
* 获取元素,但不删除元素
*
* removeFirst();
* removeLast();
* 获取元素,并且删除元素.如果集中没有元素,会出现NoSuchElementException
*
* 在JDK1.6出现了替代方法。
*
* offerFirst();
* offerLast();
* 添加元素
* 返回boolean !--Inserts the specified element at the front of this list.
* offer 将指定元素添加到此列表的末尾(最后一个元素)。
*
* peekFirst();
* peekLast();
* 获取元素但不删除元素。如果集合中没有元素。会返回null.
* peek() 找到但不移除此列表的头(第一个元素)。
* Retrieves, but does not remove, the first element of this list,
* or returns null if this list is empty.
*
* pollFirst();
* pollLast();
* 获取元素而且并被元素删除。如果集合中没有元素。会返回null.
* poll() 找到并移除此列表的头(第一个元素)。
* pollFirst();
* Retrieves and removes the first element of this list,
* or returns null if this list is empty.
* */
import java.util.*;
public class LinkedListDemo {
/**
* @param args
*/
public static void main(String[] args) {
LinkedList link = new LinkedList();
/*link.addFirst("java01");
link.addFirst("java02");
link.addFirst("java03");
link.addFirst("java04");*/
link.addLast("java01");
link.addLast("java02");
link.addLast("java03");
link.addLast("java04");
sop(link);
//
//sop(link.getFirst());
//sop(link.getFirst());
//sop(link.getLast());
//sop(link.removeFirst());
//sop(link.removeFirst());
sop(link);
sop("size="+link.size());
link.pollFirst();
while(!link.isEmpty())
{
sop(link.removeFirst());
}
sop(link);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
package day14;
/*
* 使用linkedlist模拟一个堆栈或者队列数据结构。
*
* 堆栈:先进后出。。如同一个杯子。 先进先出堆如杯,后来居上喝凉水。
* 对列:先进先出 First in First out FIFO 如同一个水管。 先进先出列似管,一马当先抢饭碗。
*
* */
import java.util.*;
//队列
class Queue {
private LinkedList link;
Queue()
{
link = new LinkedList();
}
public void myAdd(Object obj)
{
link.addFirst(obj);
}
public Object myGet()
{
return link.removeLast();
}
public boolean isNull()
{
return link.isEmpty();
}
}
public class LinkedListtest {
/**
* @param args
*/
public static void main(String[] args) {
Queue que = new Queue();
que.myAdd("java01");
que.myAdd("java02");
que.myAdd("java03");
que.myAdd("java04");
while(!que.isNull())
{
System.out.println(que.myGet());
}
}
}
package day14;
/*
* 枚举就是Vector特有的取出方式。
* 发现枚举和迭代器很像。
* 其实枚举和迭代时一样的。
*
* 因为枚举的名称以及方法都过长。
* 所以被迭代器取代了。
* 枚举郁郁而终了。
*
*
* */
import java.util.*;
public class VectorDemo {
/**
* @param args
*/
public static void main(String[] args) {
Vector v = new Vector();
v.add("java01");
v.add("java02");
v.add("java03");
v.add("java04");
Enumeration en = v.elements();
while(en.hasMoreElements())
{
System.out.println(en.nextElement());
}
}
}