集合框架(中)
/*
Collection|--List:元素是有序的,元素可以重復。因為該集合體系有索引。|--ArrayList:底層的數據結構使用的是數組結構。特點:查詢速度很快。但是增刪稍慢。線程不同步。|--LinkedList:底層使用的鏈表數據結構。特點:增刪速度很快,查詢稍慢。線程不同步。|--Vector:底層是數組數據結構。線程同步。被ArrayList替代了。因為效率低。|--Set:元素是無序,元素不可以重復。、List:特有方法。凡是可以操作角標的方法都是該體系特有的方法。增add(index,element);addAll(index,Collection);刪remove(index);改set(index,element);
查get(index):subList(from,to);listIterator();int indexOf(obj):獲取指定元素的位置。ListIterator listIterator();List集合特有的迭代器。ListIterator是Iterator的子接口。在迭代時,不可以通過集合對象的方法操作集合中的元素。
因為會發生ConcurrentModificationException異常。所以,在迭代器時,只能用迭代器的方法操作元素,可是Iterator方法是有限的,
只能對元素進行判斷,取出,刪除的操作,
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator。該接口只能通過List集合的listIterator方法獲取。*/import java.util.*;
class ListDemo
{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");sop("原集合是:"+al);//在指定位置添加元素。al.add(1,"java09");//刪除指定位置的元素。//al.remove(2);//修改元素。//al.set(2,"java007");//通過角標獲取元素。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("java02"));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");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");}while(li.hasPrevious()){sop("pre::"+li.previous());}//sop("hasNext():"+li.hasNext());//sop("hasPrevious():"+li.hasPrevious());sop(al);/*//在迭代過程中,準備添加或者刪除元素。Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(obj.equals("java02"))//al.add("java008");it.remove();//將java02的引用從集合中刪除了。sop("obj="+obj);}sop(al);*/}
}/*
LinkedList:特有方法:
addFirst();
addLast();getFirst();
getLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會出現NoSuchElementExceptionremoveFirst();
removeLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會出現NoSuchElementException在JDK1.6出現了替代方法。offerFirst();
offerLast();peekFirst();
peekLast();
獲取元素,但不刪除元素。如果集合中沒有元素,會返回null。pollFirst();
pollLast();
獲取元素,但是元素被刪除。如果集合中沒有元素,會返回null。*/class LinkedListDemo
{public static void main(String[] args) {LinkedList link = new LinkedList();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("size="+link.size());while(!link.isEmpty()){sop(link.removeLast());}}public static void sop(Object obj){System.out.println(obj);}
}/*
使用LinkedList模擬一個堆棧或者隊列數據結構。堆棧:先進后出 如同一個杯子。
隊列:先進先出 First in First out FIFO 如同一個水管。*/import java.util.*;
class DuiLie extends LinkedList
{public LinkedList link;DuiLie(){link =new LinkedList();}public void myAdd(Object obj){link.offerFirst(obj);}public Object myGet(){return link.pollLast();}public boolean isNull(){return link.isEmpty();}
}class DuiZhan extends DuiLie
{DuiZhan(){super();}public void myAdd(Object obj){link.offerLast(obj);}
}
class LinkedListTest
{public static void main(String[] args) {DuiLie dl =new DuiLie();dl.myAdd("beijing");dl.myAdd("nanjing");dl.myAdd("dongjing");DuiLie dz =new DuiZhan();/*dz.myAdd("na");dz.myAdd("ran");dz.myAdd("li");*/dz=dl;//疑惑:用賦值的這種方式調用的結果和獨立定義結果為何不同呢?sop("dz:"+dz.myGet());for (Iterator it =dz.iterator();it.hasNext() ; ){sop(it.next());}while(!dl.isNull()){sop(dl.myGet());}}public static void sop(Object obj){System.out.println(obj);}
}
轉載于:https://www.cnblogs.com/lfjean/p/3654825.html
總結
- 上一篇: 【CF1063B】Labyrinth [
- 下一篇: C#事件与委托的区别