集合(Collection解析 Set List Map三大集合運用)
阿新 • • 發佈:2018-12-25
List介面public class TreeSetDome { public static void main(String[] args) { <span style="color:#ff0000;">//TreeSet具有set介面的所有函式(上面的函式)</span> //在new時可以加入指定的比較器 TreeSet<Object> set=new TreeSet<Object>(new MyComp()); Person p1=new Person("張三",20); //TreeSet具有其他函式 //返回此 set 中大於等於給定元素的最小元素;如果不存在這樣的元素,則返回 null set.ceiling(p1); //返回對此 set 中的元素進行排序的比較器;如果此 set 使用其元素的自然順序,則返回 null。 set.floor(p1); //返回此 set 中嚴格大於給定元素的最小元素;如果不存在這樣的元素,則返回 null。 set.comparator(); //返回此 set 中當前第一個(最低)元素。 set.first(); //返回此 set 中當前最後一個(最高)元素。 set.last(); //返回此 set 中小於等於給定元素的最大元素;如果不存在這樣的元素,則返回 null。 set.higher(p1); //返回此 set 中嚴格小於給定元素的最大元素;如果不存在這樣的元素,則返回 null。 set.lower(p1); //獲取並移除第一個(最低)元素;如果此 set 為空,則返回 null。 set.pollFirst(); //獲取並移除最後一個(最高)元素;如果此 set 為空,則返回 null。 set.pollLast(); } } class MyComp implements Comparator<Object>{ @Override public int compare(Object o1, Object o2) { //返回值為負整數,0,正整數(int型) //表示本物件比引數物件小,相等,大 return 1; } }
List介面繼承了Collection介面以定義一個允許重複項的有序集合。該介面不但能夠對列表的一部分進行處理,還添加了面向位置的操作。面向位置的操作包括插入某個元素或Collection的功能,還包括獲取、除去或更改元素的功能。在List中搜索元素可以從列表的頭部或尾部開始,如果找到元素,還將報告元素所在的位置。
1)使用List(如ArrayList)時,不會自動呼叫hashCode()方法。因為在List中,重複了就重複了,不需判斷,保證唯一性。
2)List中添加了下標index的功能,這樣對List的修改可以利用set方法對指定位置的元素直接進行替換,不需要象Set那麼複雜(要轉換成陣列才能修改,之後還要轉換回去)。
3)Collection用Iterator迭代器,而List可以用ListIterator列表迭代器。前者只能next(),後者不但包含next()方法,還包含previous()方法。因此,如果要用List做類似書的翻頁功能,不但可以向後翻,還可以向前翻。
LickedListpackage cn.hncu.collection; import java.util.ArrayList; import java.util.Iterator; import java.util.ListIterator; public class ArrayListDome { public static void main(String[] args) { //List介面引入了下標,並且可以新增重複的元素 ArrayList<Object> al1=new ArrayList<Object>(0); ArrayList<Object> al2=new ArrayList<Object>(0); Person p1=new Person("張三",20); Person p2=new Person("李四",22); Person p3=new Person("王五",24); Person p4=new Person("Jack",30); Person p5=new Person("Tom",20); Person p6=new Person("Swite",13); Person p7=new Person("Pick",16); Person p8=new Person("錢七",32); //新增時,根據下標位置排序,無需實現元素的hashCode和equals方法 //可以指定下標新增,但要注意,不能加入的下標大小比集合容量大,否則出異常 al1.add(p1); al1.add(0,p2); al1.add(al1.size()-1,p3); al1.add(p4); al1.add(p5); al1.add(0,p6); al2.add(p2); al2.add(p4); al2.add(p6); al2.add(p8); //可以新增其他集合的指定位置 al1.addAll(0, al2); //返回此列表中指定位置上的元素。 al1.get(0); //返回此列表中首次出現的指定元素的索引,或如果此列表不包含元素,則返回 -1。 al1.indexOf(p1); //返回此列表中最後一次出現的指定元素的索引,或如果此列表不包含索引,則返回 -1。 al1.lastIndexOf(p1); //移除此列表中指定位置上的元素。 al1.remove(0); //用指定的元素替代此列表中指定位置上的元素。 al1.set(0, p2); //按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列。 al1.toArray(); //按適當順序(從第一個到最後一個元素)返回包含此列表中所有元素的陣列;返回陣列的執行時型別是指定陣列的執行時型別。 Person[] a = new Person[0]; a=al1.toArray(a); //將此 ArrayList 例項的容量調整為列表的當前大小。 al1.trimToSize(); //返回列表中索引在 fromIndex(包括)和 toIndex(不包括)之間的所有元素組成一個新的集合列表。 al1.subList(0, 1); //返回此 ArrayList 例項的淺表副本。只是複製了指標,倆個集合共用元素 ArrayList<Object> po=(ArrayList<Object>) al1.clone(); ((Person)al1.get(0)).age=10000; ((Person)al2.get(0)).age=-300; for (int i = 0; i < po.size(); i++) { System.out.println(po.get(i)); } //返回列表的迭代器 ListIterator it=al1.listIterator(); while(it.hasNext()){ System.out.println(it.next());//當前的下一個 System.out.println(it.previous());//當前的上一個 } } }