日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java - Collection

發布時間:2025/3/14 java 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java - Collection 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Collection層次結構

?

Collection

[plain] view plaincopy print?
  • 子接口??
  • ?Set,List??
  • 集合中只能放置對象的引用,不能放置原生數據類型,??
  • ?我們需要使用原生數據類型的封裝類才能加入到集合中??
  • 子接口 Set,List 集合中只能放置對象的引用,不能放置原生數據類型, 我們需要使用原生數據類型的封裝類才能加入到集合中

    Ordered與Sorted接口

  • Ordered排序,按照某種由具體情況決定的順序排序,是后天指定的??
  • Sorted排序,按照天然順序進行排序,是先天指定的??
  • Ordered排序,按照某種由具體情況決定的順序排序,是后天指定的 Sorted排序,按照天然順序進行排序,是先天指定的

    List

  • 實現類包括??
  • ????LinkedList,Vector,ArrayList??
  • 列表接口,繼承與Collection,可以按索引的順序訪問,有索引的Collection??
  • ????具有列表的功能,元素順序均是按添加的先后進行排列的,??
  • ????允許重復的元素,允許多個null元素??
  • 實現類包括LinkedList,Vector,ArrayList 列表接口,繼承與Collection,可以按索引的順序訪問,有索引的Collection具有列表的功能,元素順序均是按添加的先后進行排列的,允許重復的元素,允許多個null元素

    List常用方法

  • package?com.itlwc;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.List;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????List?list?=?new?ArrayList();??
  • ????????//?向列表的尾部追加指定的元素??
  • ????????list.add("lwc");??
  • ????????//?在列表的指定位置插入指定元素??
  • ????????list.add(1,?"nxj");??
  • ????????//?追加指定?collection?中的所有元素到此列表的結尾??
  • ????????list.addAll(new?ArrayList());??
  • ????????//?從列表中移除所有元素??
  • ????????list.clear();??
  • ????????//?如果列表包含指定的元素,則返回true??
  • ????????list.contains("nxj");??
  • ????????//?如果列表包含指定?collection?的所有元素,則返回?true??
  • ????????list.containsAll(new?ArrayList());??
  • ????????//?比較指定的對象與列表是否相等??
  • ????????list.equals(new?ArrayList());??
  • ????????//?返回列表中指定位置的元素??
  • ????????list.get(0);??
  • ????????//?返回列表的哈希碼值??
  • ????????list.hashCode();??
  • ????????//?返回列表中首次出現指定元素的索引,如果列表不包含此元素,則返回?-1??
  • ????????list.indexOf("lwc");??
  • ????????//?返回列表中最后出現指定元素的索引,如果列表不包含此元素,則返回?-1??
  • ????????list.lastIndexOf("lwc");??
  • ????????//?如果列表不包含元素,則返回?true??
  • ????????list.isEmpty();??
  • ????????//?移除列表中指定位置的元素??
  • ????????list.remove(0);??
  • ????????//?移除列表中出現的首個指定元素??
  • ????????list.remove("lwc");??
  • ????????//?從列表中移除指定?collection?中包含的所有元素??
  • ????????list.removeAll(new?ArrayList());??
  • ????????//?用指定元素替換列表中指定位置的元素??
  • ????????list.set(0,?"lp");??
  • ????????//?返回列表中的元素數??
  • ????????list.size();??
  • ????????//?返回列表中指定的fromIndex(包括)和toIndex(不包括)之間的部分視圖??
  • ????????list.subList(1,?2);??
  • ????????//?返回以正確順序包含列表中的所有元素的數組??
  • ????????list.toArray();??
  • ????????//?返回以正確順序包含列表中所有元素的數組??
  • ????????list.toArray(new?String[]?{?"a",?"b"?});??
  • ????}??
  • }??
  • package com.itlwc;import java.util.ArrayList; import java.util.List;public class Test {public static void main(String[] args) {List list = new ArrayList();// 向列表的尾部追加指定的元素list.add("lwc");// 在列表的指定位置插入指定元素list.add(1, "nxj");// 追加指定 collection 中的所有元素到此列表的結尾list.addAll(new ArrayList());// 從列表中移除所有元素list.clear();// 如果列表包含指定的元素,則返回truelist.contains("nxj");// 如果列表包含指定 collection 的所有元素,則返回 truelist.containsAll(new ArrayList());// 比較指定的對象與列表是否相等list.equals(new ArrayList());// 返回列表中指定位置的元素list.get(0);// 返回列表的哈希碼值list.hashCode();// 返回列表中首次出現指定元素的索引,如果列表不包含此元素,則返回 -1list.indexOf("lwc");// 返回列表中最后出現指定元素的索引,如果列表不包含此元素,則返回 -1list.lastIndexOf("lwc");// 如果列表不包含元素,則返回 truelist.isEmpty();// 移除列表中指定位置的元素list.remove(0);// 移除列表中出現的首個指定元素list.remove("lwc");// 從列表中移除指定 collection 中包含的所有元素list.removeAll(new ArrayList());// 用指定元素替換列表中指定位置的元素list.set(0, "lp");// 返回列表中的元素數list.size();// 返回列表中指定的fromIndex(包括)和toIndex(不包括)之間的部分視圖list.subList(1, 2);// 返回以正確順序包含列表中的所有元素的數組list.toArray();// 返回以正確順序包含列表中所有元素的數組list.toArray(new String[] { "a", "b" });} }

    ArrayList

  • 構造方法??
  • ????public?ArrayList()??
  • ????public?ArrayList(int?initialCapacity)??
  • ????public?ArrayList(Collection?c)??
  • ArrayList依賴于數組實現的,初始長度為10的Object[],并且可隨需要而增加的動態數組??
  • ????當元素超過10,那么ArrayList底層會新生成一個數組,長度為原來的1.5倍+1,??
  • ????然后將原數組內容復制到新數組中,并且后續增加的內容會放到新數組中,??
  • ????當新數組無法容納增加的元素,重復該過程??
  • ArrayList對隨機訪問性能很好,但進行大量插入,刪除操作,性能很差,??
  • ????因為操作之后后續元素需要移動??
  • 構造方法public ArrayList()public ArrayList(int initialCapacity)public ArrayList(Collection c) ArrayList依賴于數組實現的,初始長度為10的Object[],并且可隨需要而增加的動態數組當元素超過10,那么ArrayList底層會新生成一個數組,長度為原來的1.5倍+1,然后將原數組內容復制到新數組中,并且后續增加的內容會放到新數組中,當新數組無法容納增加的元素,重復該過程 ArrayList對隨機訪問性能很好,但進行大量插入,刪除操作,性能很差,因為操作之后后續元素需要移動

    遍歷ArrayList

  • package?com.itlwc;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.Iterator;??
  • import?java.util.List;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????List<String>?list?=?new?ArrayList<String>();??
  • ????????list.add("lwc");??
  • ????????list.add("nxj");??
  • ????????//?方法一??
  • ????????Iterator<String>?ite1?=?list.iterator();??
  • ????????while?(ite1.hasNext())?{??
  • ????????????String?str?=?ite1.next();??
  • ????????????System.out.println(str);??
  • ????????}??
  • ????????System.out.println("---------------------");??
  • ????????//?方法二(方法一的變形)??
  • ????????for?(Iterator<String>?ite2?=?list.iterator();?ite2.hasNext();)?{??
  • ????????????String?str?=?ite2.next();??
  • ????????????System.out.println(str);??
  • ????????}??
  • ????????System.out.println("---------------------");??
  • ????????//?方法三??
  • ????????for(String?s?:?list){??
  • ????????????System.out.println(s);??
  • ????????}??
  • ????}??
  • }??
  • /*?
  • 打印結果:?
  • ????lwc?
  • ????nxj?
  • ????---------------------?
  • ????lwc?
  • ????nxj?
  • ????---------------------?
  • ????lwc?
  • ????nxj?
  • */??
  • package com.itlwc;import java.util.ArrayList; import java.util.Iterator; import java.util.List;public class Test {public static void main(String[] args) {List<String> list = new ArrayList<String>();list.add("lwc");list.add("nxj");// 方法一Iterator<String> ite1 = list.iterator();while (ite1.hasNext()) {String str = ite1.next();System.out.println(str);}System.out.println("---------------------");// 方法二(方法一的變形)for (Iterator<String> ite2 = list.iterator(); ite2.hasNext();) {String str = ite2.next();System.out.println(str);}System.out.println("---------------------");// 方法三for(String s : list){System.out.println(s);}} } /* 打印結果:lwcnxj---------------------lwcnxj---------------------lwcnxj */

    Vector

  • 向量,歷史比較悠久,Java誕生就有了,特點與ArrayList相同,??
  • ????不同的是Vector操作元素的方法是同步的,同一時刻只能有一個線程訪問,沒有特殊需求都使用ArrayList??
  • 構造方法??
  • ????public?Vector()??
  • ????public?Vector(int?initialCapacity)??
  • ????public?Vector(int?initialCapacity,int?capacityIncrement)??
  • ????????第一個參數是初始容量,第二個參數是當Vector滿時的增量??
  • ????public?Vector(Collection?c)??
  • Vector也是依賴數組實現的??
  • 向量,歷史比較悠久,Java誕生就有了,特點與ArrayList相同,不同的是Vector操作元素的方法是同步的,同一時刻只能有一個線程訪問,沒有特殊需求都使用ArrayList 構造方法public Vector()public Vector(int initialCapacity)public Vector(int initialCapacity,int capacityIncrement)第一個參數是初始容量,第二個參數是當Vector滿時的增量public Vector(Collection c) Vector也是依賴數組實現的

    案例

  • package?com.itlwc;??
  • ??
  • import?java.util.Enumeration;??
  • import?java.util.Vector;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Vector?v?=?new?Vector();??
  • ????????v.add("123");??
  • ????????v.add("lwc");??
  • ????????v.add("你好");??
  • ????????//?Vector轉換為枚舉??
  • ????????Enumeration?e?=?v.elements();??
  • ????????while?(e.hasMoreElements())?{??
  • ????????????System.out.println(e.nextElement());??
  • ????????}??
  • ????}??
  • }??
  • package com.itlwc;import java.util.Enumeration; import java.util.Vector;public class Test {public static void main(String[] args) {Vector v = new Vector();v.add("123");v.add("lwc");v.add("你好");// Vector轉換為枚舉Enumeration e = v.elements();while (e.hasMoreElements()) {System.out.println(e.nextElement());}} }

    Stack

  • Vector的子類??
  • Vector的子類 案例 [java] view plaincopy print?
  • package?com.itlwc;??
  • ??
  • import?java.util.Enumeration;??
  • import?java.util.Stack;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Stack?stack?=?new?Stack();??
  • ????????//?向棧里面壓一個整數??
  • ????????stack.push(new?Integer(123));??
  • ????????stack.push("lwc");??
  • ????????stack.push(new?Double(88.88));??
  • ????????//?遍歷??
  • ????????Enumeration?items?=?stack.elements();??
  • ????????while?(items.hasMoreElements())?{??
  • ????????????System.out.print(items.nextElement()?+?"?");??
  • ????????}??
  • ????????System.out.println();??
  • ????????//?出棧??
  • ????????while?(stack.size()?!=?0)?{??
  • ????????????System.out.print(stack.pop()?+?"?");??
  • ????????}??
  • ????}??
  • }??
  • /*?
  • 打印結果:?
  • ????123?lwc?88.88??
  • ????88.88?lwc?123?
  • */??
  • package com.itlwc;import java.util.Enumeration; import java.util.Stack;public class Test {public static void main(String[] args) {Stack stack = new Stack();// 向棧里面壓一個整數stack.push(new Integer(123));stack.push("lwc");stack.push(new Double(88.88));// 遍歷Enumeration items = stack.elements();while (items.hasMoreElements()) {System.out.print(items.nextElement() + " ");}System.out.println();// 出棧while (stack.size() != 0) {System.out.print(stack.pop() + " ");}} } /* 打印結果:123 lwc 88.88 88.88 lwc 123 */

    LinkedList

  • LinkedList功能與ArrayList,Vector相同,內部是依賴雙鏈表實現的,??
  • ????因此有很好的插入和刪除性能,但隨機訪問元素的性能很差??
  • 構造方法??
  • ????public?LinkedList()??
  • ????public?LinkedList(Collection?c)??
  • LinkedList類中有一個Entry內部類,Entry內部類包含3個部分向前的引用,向后的引用,數據??
  • ????header.next?=?header.previous?=?header;??
  • LinkedList功能與ArrayList,Vector相同,內部是依賴雙鏈表實現的,因此有很好的插入和刪除性能,但隨機訪問元素的性能很差 構造方法public LinkedList()public LinkedList(Collection c) LinkedList類中有一個Entry內部類,Entry內部類包含3個部分向前的引用,向后的引用,數據header.next = header.previous = header;

    遍歷LinkedList

  • package?com.itlwc;??
  • ??
  • import?java.util.LinkedList;??
  • import?java.util.List;??
  • import?java.util.ListIterator;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????List?link?=?new?LinkedList();??
  • ????????link.add(123);??
  • ????????link.add("lwc");??
  • ????????link.add(8.8);??
  • ????????link.add("nxj");??
  • ????????link.add(520);??
  • ????????printList(link);??
  • ????????printReversedList(link);??
  • ????}??
  • ??
  • ????private?static?void?printList(List?link)?{??
  • ????????System.out.println("正序鏈表中的元素");??
  • ????????//?的到鏈表的迭代器,位置指向鏈頭??
  • ????????ListIterator?li?=?link.listIterator();??
  • ????????//?判斷迭代器中是否有下一個元素??
  • ????????while?(li.hasNext())?{??
  • ????????????//?返回下個元素??
  • ????????????System.out.print(li.next()?+?"?");??
  • ????????}??
  • ????????System.out.println();??
  • ????}??
  • ??
  • ????private?static?void?printReversedList(List?link)?{??
  • ????????System.out.println("逆向鏈表中的元素");??
  • ????????//?的到鏈表的迭代器,位置指向link.size()結尾??
  • ????????ListIterator?li?=?link.listIterator(link.size());??
  • ????????//?判斷迭代器中是否有前一個元素??
  • ????????while?(li.hasPrevious())?{??
  • ????????????//?返回前一個元素??
  • ????????????System.out.print(li.previous()?+?"?");??
  • ????????}??
  • ????????System.out.println();??
  • ????}??
  • }??
  • /*?
  • 打印結果:?
  • ????正序鏈表中的元素?
  • ????123?lwc?8.8?nxj?520??
  • ????逆向鏈表中的元素?
  • ????520?nxj?8.8?lwc?123??
  • */??
  • package com.itlwc;import java.util.LinkedList; import java.util.List; import java.util.ListIterator;public class Test {public static void main(String[] args) {List link = new LinkedList();link.add(123);link.add("lwc");link.add(8.8);link.add("nxj");link.add(520);printList(link);printReversedList(link);}private static void printList(List link) {System.out.println("正序鏈表中的元素");// 的到鏈表的迭代器,位置指向鏈頭ListIterator li = link.listIterator();// 判斷迭代器中是否有下一個元素while (li.hasNext()) {// 返回下個元素System.out.print(li.next() + " ");}System.out.println();}private static void printReversedList(List link) {System.out.println("逆向鏈表中的元素");// 的到鏈表的迭代器,位置指向link.size()結尾ListIterator li = link.listIterator(link.size());// 判斷迭代器中是否有前一個元素while (li.hasPrevious()) {// 返回前一個元素System.out.print(li.previous() + " ");}System.out.println();} } /* 打印結果:正序鏈表中的元素123 lwc 8.8 nxj 520 逆向鏈表中的元素520 nxj 8.8 lwc 123 */

    自定義LinkedList結構

  • package?com.itlwc;??
  • ??
  • class?Node?{??
  • ????Node?previous;//?前驅??
  • ????String?data;//?數據??
  • ????Node?next;//?后驅??
  • ??
  • ????public?Node(String?data)?{??
  • ????????this.data?=?data;??
  • ????}??
  • }??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Node?node1?=?new?Node("node1");??
  • ????????Node?node2?=?new?Node("node2");??
  • ????????Node?node3?=?new?Node("node3");??
  • ????????node1.next?=?node2;??
  • ????????node2.previous?=?node1;??
  • ????????node2.next?=?node3;??
  • ????????node3.previous?=?node2;??
  • ????????node3.next?=?node1;??
  • ????????node1.previous?=?node3;??
  • ??
  • ????????//?增加node4??
  • ????????Node?node4?=?new?Node("node4");??
  • ????????node1.next?=?node4;??
  • ????????node4.previous?=?node1;??
  • ????????node4.next?=?node2;??
  • ????????node2.previous?=?node4;??
  • ????????//?刪除node4??
  • ????????node1.next?=?node2;??
  • ????????node2.previous?=?node1;??
  • ????????node4.previous?=?null;??
  • ????????node4.next?=?null;??
  • ??
  • ????}??
  • }??
  • package com.itlwc;class Node {Node previous;// 前驅String data;// 數據Node next;// 后驅public Node(String data) {this.data = data;} }public class Test {public static void main(String[] args) {Node node1 = new Node("node1");Node node2 = new Node("node2");Node node3 = new Node("node3");node1.next = node2;node2.previous = node1;node2.next = node3;node3.previous = node2;node3.next = node1;node1.previous = node3;// 增加node4Node node4 = new Node("node4");node1.next = node4;node4.previous = node1;node4.next = node2;node2.previous = node4;// 刪除node4node1.next = node2;node2.previous = node1;node4.previous = null;node4.next = null;} }

    依賴倒置原理

  • 依賴應該盡量在抽象層進行,避免在具體層進行,??
  • ????在實際開發中盡量使用接口類型的引用,避免采用具體類型的引用??
  • 依賴應該盡量在抽象層進行,避免在具體層進行,在實際開發中盡量使用接口類型的引用,避免采用具體類型的引用

    案例

    [java] view plaincopy print?
  • package?com.itlwc;??
  • ??
  • import?java.util.LinkedList;??
  • import?java.util.List;??
  • ??
  • public?class?Test?{??
  • ????//如果我們需要傳入參數是ArrayList就需要改動代碼??
  • ????public?void?printLinkedList(LinkedList?ll){??
  • ????????System.out.println(ll);??
  • ????}??
  • ????//如果我們傳入參數是List的子類,我們不需要改動代碼,靈活性大??
  • ????public?void?printList(List?l){??
  • ????????System.out.println(l);??
  • ????}??
  • }??
  • package com.itlwc;import java.util.LinkedList; import java.util.List;public class Test {//如果我們需要傳入參數是ArrayList就需要改動代碼public void printLinkedList(LinkedList ll){System.out.println(ll);}//如果我們傳入參數是List的子類,我們不需要改動代碼,靈活性大public void printList(List l){System.out.println(l);} }

    將數組轉換為列表

  • package?com.itlwc;??
  • ??
  • import?java.util.Arrays;??
  • import?java.util.List;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????String[]?str?=?{?"l",?"w",?"c"?};??
  • ????????//使用Java類庫中java.util.Arrays類的靜態方法asList()??
  • ????????List?l?=?Arrays.asList(str);??
  • ????????System.out.println(str);??
  • ????}??
  • ??
  • }??
  • /*?
  • 打印結果:?
  • ????[l,?w,?c]?
  • */??
  • package com.itlwc;import java.util.Arrays; import java.util.List;public class Test {public static void main(String[] args) {String[] str = { "l", "w", "c" };//使用Java類庫中java.util.Arrays類的靜態方法asList()List l = Arrays.asList(str);System.out.println(str);}} /* 打印結果:[l, w, c] */

    ArrayList VS LinkedList

  • ArrayList底層采用數組實現,LinkedList底層采用雙鏈表實現??
  • 如果為列表增加對象??
  • ????ArrayList是ArrayList底層數組維護的,LinkedList是LinkedList底層Entry對象維護的??
  • ????LinkedList底層Entry結構??
  • ????????Entry{??
  • ????????????Entry?previous;??
  • ????????????Object?element;??
  • ????????????Entry?next;??
  • ????????}??
  • ????????其中element就是我們添加的元素,最后將生成的Entry對象加入到鏈表中??
  • 插入和刪除操作時,采用LinkedList好,搜索時,采用ArrayList好??
  • ArrayList底層采用數組實現,LinkedList底層采用雙鏈表實現 如果為列表增加對象ArrayList是ArrayList底層數組維護的,LinkedList是LinkedList底層Entry對象維護的LinkedList底層Entry結構Entry{Entry previous;Object element;Entry next;}其中element就是我們添加的元素,最后將生成的Entry對象加入到鏈表中 插入和刪除操作時,采用LinkedList好,搜索時,采用ArrayList好

    List<Map>遍歷

  • package?com.itlwc;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.HashMap;??
  • import?java.util.Iterator;??
  • import?java.util.List;??
  • import?java.util.Map;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????Map<Integer,?String>?map1?=?new?HashMap<Integer,?String>();??
  • ????????map1.put(new?Integer(1),?"lwc");??
  • ????????map1.put(new?Integer(2),?"nxj");??
  • ????????Map<Integer,?String>?map2?=?new?HashMap<Integer,?String>();??
  • ????????map2.put(new?Integer(3),?"tom");??
  • ????????map2.put(new?Integer(4),?"cat");??
  • ????????List<Map<Integer,?String>>?list?=?new?ArrayList<Map<Integer,?String>>();??
  • ????????list.add(map1);??
  • ????????list.add(map2);??
  • ????????//?方法一??
  • ????????Iterator<Map<Integer,?String>>?ite1?=?list.iterator();??
  • ????????while?(ite1.hasNext())?{??
  • ????????????Map<Integer,?String>?m?=?ite1.next();??
  • ????????????System.out.println(m);??
  • ????????}??
  • ????????System.out.println("-----------------------------");??
  • ????????//?方法二(方法一的變形)??
  • ????????for?(Iterator<Map<Integer,?String>>?ite2?=?list.iterator();?ite2.hasNext();)?{??
  • ????????????Map<Integer,?String>?m?=?ite2.next();??
  • ????????????System.out.println(m);??
  • ????????}??
  • ????????System.out.println("-----------------------------");??
  • ????????//?方法三:??
  • ????????for?(Map<Integer,?String>?m?:?list)?{??
  • ????????????System.out.println(m);??
  • ????????}??
  • ????}??
  • }??
  • /*??
  • 打印結果:??
  • ????{1=lwc,?2=nxj}?
  • ????{3=tom,?4=cat}?
  • ????-----------------------------?
  • ????{1=lwc,?2=nxj}?
  • ????{3=tom,?4=cat}?
  • ????-----------------------------?
  • ????{1=lwc,?2=nxj}?
  • ????{3=tom,?4=cat}?
  • */??
  • package com.itlwc;import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;public class Test {public static void main(String[] args) {Map<Integer, String> map1 = new HashMap<Integer, String>();map1.put(new Integer(1), "lwc");map1.put(new Integer(2), "nxj");Map<Integer, String> map2 = new HashMap<Integer, String>();map2.put(new Integer(3), "tom");map2.put(new Integer(4), "cat");List<Map<Integer, String>> list = new ArrayList<Map<Integer, String>>();list.add(map1);list.add(map2);// 方法一Iterator<Map<Integer, String>> ite1 = list.iterator();while (ite1.hasNext()) {Map<Integer, String> m = ite1.next();System.out.println(m);}System.out.println("-----------------------------");// 方法二(方法一的變形)for (Iterator<Map<Integer, String>> ite2 = list.iterator(); ite2.hasNext();) {Map<Integer, String> m = ite2.next();System.out.println(m);}System.out.println("-----------------------------");// 方法三:for (Map<Integer, String> m : list) {System.out.println(m);}} } /* 打印結果: {1=lwc, 2=nxj}{3=tom, 4=cat}-----------------------------{1=lwc, 2=nxj}{3=tom, 4=cat}-----------------------------{1=lwc, 2=nxj}{3=tom, 4=cat} */

    Set

  • 實現類??
  • HashSet,LinkedHashSet??
  • 子接口??
  • SortSet??
  • 實現類??
  • TreeSet??
  • 不包含重復元素,最多包含一個null,元素沒有順序??
  • 實現類HashSet,LinkedHashSet 子接口SortSet實現類TreeSet 不包含重復元素,最多包含一個null,元素沒有順序

    HashSet

  • HashSet不是Ordered也不是Sorted,存儲對象引用時是按照哈希策略來實現的,??
  • HashSet中是否存在一個對象是通過equals()和hashCode()協同判斷??
  • 不保證順序??
  • 構造方法??
  • public?HashSet()????
  • public?HashSet(int?initialCapacity)????
  • public?HashSet(Collection?c)??
  • HashSet底層是使用HashMap實現的??
  • HashSet的add()方法詳解:??
  • 判斷已經存儲在集合中的對象hashCode值是否與增加對象的hashCode值一致??
  • 如果不一致,直接加進去??
  • 如果一致,再進行equals()比較??
  • 如果equals()返回true,對象已經存在不增加進去??
  • 如果equals()返回false,把對象增加進去??
  • HashSet不是Ordered也不是Sorted,存儲對象引用時是按照哈希策略來實現的,HashSet中是否存在一個對象是通過equals()和hashCode()協同判斷 不保證順序 構造方法public HashSet() public HashSet(int initialCapacity) public HashSet(Collection c) HashSet底層是使用HashMap實現的 HashSet的add()方法詳解:判斷已經存儲在集合中的對象hashCode值是否與增加對象的hashCode值一致如果不一致,直接加進去如果一致,再進行equals()比較如果equals()返回true,對象已經存在不增加進去如果equals()返回false,把對象增加進去

    LinkedHashSet

  • LinkedHashSet是Ordered,采用雙鏈表實現的??
  • 有固定順序,也就是插入順序??
  • LinkedHashSet底層是使用LinkedHashMap實現的??
  • 構造方法??
  • ????public?LinkedHashSet()????
  • ????public?LinkedHashSet(int?initialCapacity)????
  • ????public?LinkedHashSet(Collection?c)??
  • LinkedHashSet是Ordered,采用雙鏈表實現的 有固定順序,也就是插入順序 LinkedHashSet底層是使用LinkedHashMap實現的 構造方法public LinkedHashSet() public LinkedHashSet(int initialCapacity) public LinkedHashSet(Collection c)

    SortedSet接口

  • 保證迭代器按照元素遞增順序遍歷的集合,可以按照元素的自然順序進行排序??
  • 常用方法??
  • ????Object?first()??
  • ?????????返回此有序集合中當前第一個(最小的)元素??
  • ????Object?last()??
  • ????????返回此有序集合中最后一個(最大的)元素??
  • ????SortedSet?headSet(Object?toElement)??
  • ????????返回此有序集合的部分視圖,其元素嚴格小于toElement??
  • ????SortedSet?tailSet(Object?fromElement)??
  • ????????返回此有序集合的部分視圖,其元素大于或等于fromElement??
  • ????SortedSet?subSet(Object?fromElement,Object?toElement)??
  • ????????返回此有序集合的部分視圖,元素范圍從fromElement(包括)到toElement(不包括)??
  • ????Comparator?comparator()??
  • ????????返回與此有序集合關聯的比較器,如果使用元素的自然順序,則返回?null??
  • 保證迭代器按照元素遞增順序遍歷的集合,可以按照元素的自然順序進行排序 常用方法Object first()返回此有序集合中當前第一個(最小的)元素Object last()返回此有序集合中最后一個(最大的)元素SortedSet headSet(Object toElement)返回此有序集合的部分視圖,其元素嚴格小于toElementSortedSet tailSet(Object fromElement)返回此有序集合的部分視圖,其元素大于或等于fromElementSortedSet subSet(Object fromElement,Object toElement)返回此有序集合的部分視圖,元素范圍從fromElement(包括)到toElement(不包括)Comparator comparator()返回與此有序集合關聯的比較器,如果使用元素的自然順序,則返回 null

    TreeSet

  • TreeSet是SortedSet接口的實現,元素不論以什么元素插入,在遍歷的時候,都會以天然順序遍歷??
  • TreeSet底層是使用TreeMap實現的??
  • 構造方法??
  • ????public?TreeSet()??
  • ????public?TreeSet(SortedSet?s)????
  • ????public?TreeSet(int?initialCapacity)??
  • ????public?TreeSet(Comparator<??super?E>)??
  • ????public?TreeSet(Collection?c)??
  • 因為TreeSet是帶排序的,所以想要為TreeSet增加自定義類型,必須指定排序規則??
  • TreeSet是SortedSet接口的實現,元素不論以什么元素插入,在遍歷的時候,都會以天然順序遍歷 TreeSet底層是使用TreeMap實現的 構造方法public TreeSet()public TreeSet(SortedSet s) public TreeSet(int initialCapacity)public TreeSet(Comparator<? super E>)public TreeSet(Collection c) 因為TreeSet是帶排序的,所以想要為TreeSet增加自定義類型,必須指定排序規則

    TreeSet排序規則Comparator案例

  • package?com.itlwc;??
  • ??
  • import?java.util.Comparator;??
  • import?java.util.Iterator;??
  • import?java.util.TreeSet;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????TreeSet?set?=?new?TreeSet(new?PersonComparator());??
  • ????????set.add(new?Person("lwc",?80));??
  • ????????set.add(new?Person("nxj",?70));??
  • ????????set.add(new?Person("lp",?60));??
  • ????????set.add(new?Person("fy",?75));??
  • ????????Iterator?ite?=?set.iterator();??
  • ????????while?(ite.hasNext())?{??
  • ????????????Person?p?=?(Person)ite.next();??
  • ????????????System.out.println(p.name);??
  • ????????}??
  • ????}??
  • }??
  • ??
  • class?Person?{??
  • ????String?name;??
  • ????int?score;??
  • ??
  • ????public?Person(String?name,?int?score)?{??
  • ????????this.name?=?name;??
  • ????????this.score?=?score;??
  • ????}??
  • }??
  • ??
  • class?PersonComparator?implements?Comparator?{??
  • ????public?int?compare(Object?o1,?Object?o2)?{??
  • ????????Person?p1?=?(Person)?o1;??
  • ????????Person?p2?=?(Person)?o2;??
  • ????????return?p1.score?-?p2.score;??
  • ????}??
  • }??
  • package com.itlwc;import java.util.Comparator; import java.util.Iterator; import java.util.TreeSet;public class Test {public static void main(String[] args) {TreeSet set = new TreeSet(new PersonComparator());set.add(new Person("lwc", 80));set.add(new Person("nxj", 70));set.add(new Person("lp", 60));set.add(new Person("fy", 75));Iterator ite = set.iterator();while (ite.hasNext()) {Person p = (Person)ite.next();System.out.println(p.name);}} }class Person {String name;int score;public Person(String name, int score) {this.name = name;this.score = score;} }class PersonComparator implements Comparator {public int compare(Object o1, Object o2) {Person p1 = (Person) o1;Person p2 = (Person) o2;return p1.score - p2.score;} }

    Collections

  • 操作Collection類的工具類,類中方法都是靜態的??
  • 操作Collection類的工具類,類中方法都是靜態的

    Collections常用方法

    [java] view plaincopy print?
  • package?com.itlwc;??
  • ??
  • import?java.util.ArrayList;??
  • import?java.util.Collections;??
  • import?java.util.Comparator;??
  • ??
  • public?class?Test?{??
  • ????public?static?void?main(String[]?args)?{??
  • ????????//?將所有元素從一個列表復制到另一個列表??
  • ????????Collections.copy(new?ArrayList(),?new?ArrayList());??
  • ????????//?如果兩個指定collection中沒有相同的元素,則返回?true??
  • ????????Collections.disjoint(new?ArrayList(),?new?ArrayList());??
  • ????????//?使用指定元素替換指定列表中的所有元素??
  • ????????Collections.fill(new?ArrayList(),?new?Object());??
  • ????????//?返回指定?collection?中等于指定對象的元素數??
  • ????????Collections.frequency(new?ArrayList(),?new?Object());??
  • ????????//?返回指定源列表中第一次出現指定目標列表的起始位置,如果沒有出現這樣的列表,則返回?-1??
  • ????????Collections.indexOfSubList(new?ArrayList(),?new?ArrayList());??
  • ????????//?根據元素的自然順序,返回給定?collection?的最大元素??
  • ????????Collections.max(new?ArrayList());??
  • ????????//?//根據元素的自然順序,返回給定?collection?的最大元素??
  • ????????Collections.min(new?ArrayList());??
  • ????????//?使用另一個值替換列表中出現的所有某一指定值??
  • ????????Collections.replaceAll(new?ArrayList(),?"oldVal",?"newVal");??
  • ????????//?反轉指定列表中元素的順序??
  • ????????Collections.reverse(new?ArrayList());??
  • ????????//?返回一個比較器,它強行反轉??
  • ????????Collections.reverseOrder();??
  • ????????//?返回一個比較器,它強行反轉指定比較器的順序??
  • ????????Collections.reverseOrder(new?Comparator()?{??
  • ????????????@Override??
  • ????????????public?int?compare(Object?o1,?Object?o2)?{??
  • ????????????????return?0;??
  • ????????????}??
  • ????????});??
  • ????????//?使用默認隨機源隨機更改指定列表的序列??
  • ????????Collections.shuffle(new?ArrayList());??
  • ????????//?根據元素的自然順序對指定列表按升序進行排序??
  • ????????Collections.sort(new?ArrayList());??
  • ????????//?根據元素的自然順序對指定列表按降序進行排序??
  • ????????Collections.sort(new?ArrayList(),?Collections.reverseOrder());??
  • ????????//?在指定列表的指定位置處交換元素??
  • ????????Collections.swap(new?ArrayList(),?1,?2);??
  • ??
  • ????}??
  • }??
  • 轉載于:https://www.cnblogs.com/wlming/p/6780617.html

    總結

    以上是生活随笔為你收集整理的Java - Collection的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。