1. 程式人生 > >集合(Collection解析 Set List Map三大集合運用)

集合(Collection解析 Set List Map三大集合運用)

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介面

List介面繼承了Collection介面以定義一個允許重複項的有序集合。該介面不但能夠對列表的一部分進行處理,還添加了面向位置的操作。面向位置的操作包括插入某個元素或Collection的功能,還包括獲取、除去或更改元素的功能。在List中搜索元素可以從列表的頭部或尾部開始,如果找到元素,還將報告元素所在的位置。

1)使用List(如ArrayList)時,不會自動呼叫hashCode()方法。因為在List中,重複了就重複了,不需判斷,保證唯一性。

2)List中添加了下標index的功能,這樣對List的修改可以利用set方法對指定位置的元素直接進行替換,不需要象Set那麼複雜(要轉換成陣列才能修改,之後還要轉換回去)。

3)Collection用Iterator迭代器,而List可以用ListIterator列表迭代器。前者只能next(),後者不但包含next()方法,還包含previous()方法。因此,如果要用List做類似書的翻頁功能,不但可以向後翻,還可以向前翻。

package 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());//當前的上一個
		}

	}

}
LickedList