麻豆小视频在线观看_中文黄色一级片_久久久成人精品_成片免费观看视频大全_午夜精品久久久久久久99热浪潮_成人一区二区三区四区

首頁 > 學院 > 開發設計 > 正文

持有對象

2019-11-11 04:49:34
字體:
來源:轉載
供稿:網友

鏈表

arrayList:隨機訪問性能好,插入和刪除效率差LinkedList:插入和刪除效率高,隨機訪問性能差

初始化

// 1.使用 Arrays.asList 將數組轉化為容器進行初始化,速度最慢List<Integer> list1 = new ArrayList<Integer>(Arrays.asList(1,2,3));// 2.使用 Collection.addAll() 進行初始化,速度比第一種方案快,但是只能接受容器作為參數List<Integer> list2 = new ArrayList<Integer>();list2.addAll(list1);// 3. 使用 Collections.addAll() 進行初始化,速度最快且參數靈活,首選方案List<Integer> list3 = new ArrayList<Integer>();Collections.addAll(list3,1,2,3);// Array.asList() 與 Collections.addAll() 都是可變參數列表,但是他們有一些區別List<Snow> snow1 = Arrays.asList(new Powder(),new Crusty(),new Slush());// 這樣創建編譯器會報錯, 方法無法得到要創建的鏈表的類型信息//List<Snow> snow2 = Arrays.asList(new Powder(),new Light(),new Heavy());List<Snow> snow3 = new ArrayList<Snow>();// 方法從第一個參數獲取類型信息Collections.addAll(snow3,new Powder(),new Crusty(),new Slush());class Snow {}class Powder extends Snow {}class Light extends Powder {}class Heavy extends Powder {}class Crusty extends Snow {}class Slush extends Snow {}

打印

// 對于數組打印需要使用 Array.toString() 但是容器可以直接打印System.out.PRintln(Arrays.toString(new Integer[]{1,2,3}));System.out.println(list1);

鏈表常用方法

ArrayList<String> arrayList = new ArrayList<String>();arrayList.isEmpty();arrayList.contains("red");arrayList.containsAll(Arrays.asList("red","black"));arrayList.addAll(Arrays.asList("red","blue","green","white","yellow","grey"));arrayList.add("black");//在當前位置插入即 2arrayList.add(2,"pink");arrayList.get(2);arrayList.set(2,"red");arrayList.remove(4);//刪除出現的第一個arrayList.remove("red");arrayList.add("red");arrayList.add("red");// 遍歷,所有的都刪除arrayList.removeAll(Arrays.asList("red","blue"));arrayList.indexOf("red");arrayList.lastIndexOf("red");List<String> subList = arrayList.subList(1,3);System.out.println(subList);System.out.println(subList.indexOf("yellow"));// 對 subList 的修改會作用到原鏈表subList.add("golden");System.out.println(arrayList);subList.clear();System.out.println(arrayList);

LinkedList 除了與 ArrayList 提供的鏈表常用的方法之外,還提供了對棧,隊列,以及雙端隊列的支持。所以 LinkedList 的方法比 ArrayList 豐富,并且將 LinkedList 向上轉型為 List 時,這些這棧,隊列,雙端隊列支持的方法也將不能使用。

隊列

Queue 接口 繼承了 Collection 接口,并在 COllection 接口的基礎上擴展了對容器元素的插入,提取,以及檢查操作。每種操作都提供了兩種不同的方法,當相應的操作失敗時,一種拋出異常而另一種返回一個特殊值(null 或者 false)。插入失敗的接口設計針對的是容量大小有限制的隊列,一般情況下不會失敗。

拋出異常 返回特殊值
add(e) offer(e)
remove() poll()
element() peek()

在隊列的使用中,不應該插入 null 值,盡管它的實現 LinkedList 允許插入,但是也不應該這樣做,應為隊列 poll() 使用 null 作為隊列為空的標志。

雙端隊列(double ended queue)

拋出異常 返回特殊值
addFirst(e)/addLast(e) offerFirst(e)/offerLast(e)
removeFirst()/removeLast() pollFirst()/pollLast()
getFirst()/getLast() peekFirst()/peekLast()

queue和deque 方法對比

queue deque
add(e) addFirst(e)
offer(e) offerFirst(e)
remove() removeFirst()
poll() pollFirst()
element() getFirst()
peek() peekFirst()

雙端隊列的接口設計時提供了對棧的支持,即可以將雙端隊列作為棧來操作。而這種用法要優于舊的 Stack 類。

stack deque
push(e) addFirst(e)
pop() removeFirst()
peek() peekFirst()

優先隊列

在優先隊列上調用 offer() 方法插入對象時,這個對象在隊列內會被排序。自己定義的類需要實現 comparable 或者提供自動的比較器。

Set

HashSetTreeSetLinkedHashSet

Map

HashMapTreeMapLinkedHashMap

Collection,Iterator,Iterable

Collection 和 Iterator 提供了面向接口而不是具體實現的編程方式。除 Map 以外其他的容器都實現了Collection 接口,而所有的 Collection 都有一個返回 Iterator 的方法。public static <T> void display(Collection<T> collection){ for(T obj : collection){ System.out.print(obj + " "); } System.out.println();}public static <T> void display(Iterator<T> iterator){ while(iterator.hasNext()){ T obj = iterator.next(); System.out.print(obj + " "); } System.out.println();}public static void main(String[] args){ String[] array = new String[]{"red","blue","black","red"}; List<String> linkedList = new LinkedList<String>(Arrays.asList(array)); Set<String> hashSet = new HashSet<String>(Arrays.asList(array)); CollectionTest.display(linkedList); CollectionTest.display(hashSet); CollectionTest.display(linkedList.iterator()); CollectionTest.display(hashSet.iterator());}

Map 通過 keySet(),values() 可以返回 COllection ,從而與 Collection 建立聯系。

Collection 可以直接使用 foreach 語法,但是 Iterator 不能。但是兩者各有優缺點。Collection 接口可以通過繼承 AbstractColleciton 類因此有多繼承的限制,而使用 Iterator 只需要在類定義一個返回該接口實例的方法。

public class MyCollection extends AbstractCollection<String> { private String[] array; public MyCollection(){ super(); array = new String[]{"red","blue","black"}; } public Iterator<String> iterator() { return new Iterator<String>() { private int index = 0; public boolean hasNext() { return index < size(); } public String next() { return array[index++]; } }; } public int size() { return array.length; } public static void main(String[] args){ MyCollection myCollection = new MyCollection(); CollectionTest.display(myCollection); }}public class MyCollection { private String[] array; public MyCollection(){ super(); array = new String[]{"red","blue","black"}; } public Iterator<String> iterator() { return new Iterator<String>() { private int index = 0; public boolean hasNext() { return index < size(); } public String next() { return array[index++]; } }; } public int size() { return array.length; } public static void main(String[] args){ MyCollection myCollection = new MyCollection(); CollectionTest.display(myCollection.iterator()); }}Iterable 是 java SE5 之后添加的新接口,任何實現該接口的類都可以使用 foreach 語句,Colleciton 接口繼承了 Iterable 接口。但是數組雖然可以使用 foreach,但是數組并沒有實現 Iterable 接口。public class MyCollection implements Iterable<String> { private String[] array; public MyCollection(){ super(); array = new String[]{"red","blue","black"}; } public Iterator<String> iterator() { return new Iterator<String>() { private int index = 0; public boolean hasNext() { return index < size(); } public String next() { return array[index++]; } }; } public int size() { return array.length; } public static void main(String[] args){ MyCollection myCollection = new MyCollection(); for(String color : myCollection){ System.out.print(color + " "); } }}使用適配器模式顯式的調用 foreach 語法。

通過上面的例子可以知道,當需要支持 foreach 語法時可以實現 Iterable 接口。但是假設我們希望有多個不同方式來進行迭代,這時可以采用適配器模式。

public Iterable<String> reversed(){ return new Iterable<String>() { public Iterator<String> iterator() { return new Iterator<String>() { private int i = size(); public boolean hasNext() { return i > 0; } public String next() { return array[--i]; } }; } };}MyCollection myCollection = new MyCollection();for(String color : myCollection){ System.out.print(color + " ");}System.out.println();for(String color : myCollection.reversed()){ System.out.print(color + " ");}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 撅高 自己扒开 调教 | 欧美成人一级片 | 国产成年人小视频 | 美女被免费网站在线软件 | 欧美色另类 | 大学生一级毛片 | 久草在线手机视频 | 国产美女视频免费 | 精品国产久 | 中文字幕在线观看免费 | 特级黄一级播放 | 久久精品视频12 | 久久亚洲精品久久国产一区二区 | 久久99深爱久久99精品 | 国产成人精品免费视频大全最热 | 羞羞视频免费观看网站 | 精品国产一区二区三 | 亚洲人成网站免费播放 | 毛片在线免费视频 | 禁漫天堂久久久久久久久久 | 一区二区精品在线 | 七首小情歌泰剧在线播放 | 国产1级视频 | 成人在线免费视频观看 | 77成人影院| 失禁高潮抽搐喷水h | 国产精品久久久久久久久久 | 日本黄色大片免费 | 午夜视频色 | 国产精品视频二区不卡 | 九一免费国产 | www.91视频com | 美国一级黄色毛片 | 特级毛片免费 | 黄色特级视频 | 久久国产精品小视频 | 国产一区在线免费 | 午夜久久久精品一区二区三区 | 国产色片在线观看 | 亚洲国产成人久久成人52 | 日日草日日干 |