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");?? ???????? ????????list.addAll(new?ArrayList());?? ???????? ????????list.clear();?? ???????? ????????list.contains("nxj");?? ???????? ????????list.containsAll(new?ArrayList());?? ???????? ????????list.equals(new?ArrayList());?? ???????? ????????list.get(0);?? ???????? ????????list.hashCode();?? ???????? ????????list.indexOf("lwc");?? ???????? ????????list.lastIndexOf("lwc");?? ???????? ????????list.isEmpty();?? ???????? ????????list.remove(0);?? ???????? ????????list.remove("lwc");?? ???????? ????????list.removeAll(new?ArrayList());?? ???????? ????????list.set(0,?"lp");?? ???????? ????????list.size();?? ???????? ????????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);?? ????????}?? ????}?? }?? 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("你好");?? ???????? ????????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()?+?"?");?? ????????}?? ????}?? }?? 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("逆向鏈表中的元素");?? ???????? ????????ListIterator?li?=?link.listIterator(link.size());?? ???????? ????????while?(li.hasPrevious())?{?? ???????????? ????????????System.out.print(li.previous()?+?"?");?? ????????}?? ????????System.out.println();?? ????}?? }?? 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;?? ?? ???????? ????????Node?node4?=?new?Node("node4");?? ????????node1.next?=?node4;?? ????????node4.previous?=?node1;?? ????????node4.next?=?node2;?? ????????node2.previous?=?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?{?? ???? ????public?void?printLinkedList(LinkedList?ll){?? ????????System.out.println(ll);?? ????}?? ???? ????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"?};?? ???????? ????????List?l?=?Arrays.asList(str);?? ????????System.out.println(str);?? ????}?? ?? }?? 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);?? ????????}?? ????}?? }?? 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());?? ???????? ????????Collections.disjoint(new?ArrayList(),?new?ArrayList());?? ???????? ????????Collections.fill(new?ArrayList(),?new?Object());?? ???????? ????????Collections.frequency(new?ArrayList(),?new?Object());?? ???????? ????????Collections.indexOfSubList(new?ArrayList(),?new?ArrayList());?? ???????? ????????Collections.max(new?ArrayList());?? ???????? ????????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 的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔 網站內容還不錯,歡迎將生活随笔 推薦給好友。