Java 集合容器小記

1、List  ,ArrayList,  LinkedList

      ArrayList,類似於數組結構,在隨機訪問元素方面較優,但在其中間插入和移除元素時效率較低

     LinkedList,類似於鏈結構,用過代價較低的插入和刪除操作,提供了優化的順序訪問。但在隨機訪問方面效率較低。

例:

import java.util.ArrayList;
import java.util.LinkedList;


public class ListTest {
	public static void main(String[] args) {
		ArrayList al = new ArrayList();
		LinkedList ll = new LinkedList();
		long time1 = System.currentTimeMillis();
		for(int i = 0;i<100000;i++){
			al.add(0, i);
		}
		long time2 = System.currentTimeMillis();
		for(int i = 0;i<100000;i++){
			ll.addFirst(i);
		}
		long time3 = System.currentTimeMillis();
		System.out.println("arrayList:"+(time2-time1));
		System.out.println("LinkedList:"+(time3-time2));
	}
}

2set  HashSet   TreeSet

      a. 無的集合

      b. 不能有重複元素(需要重寫equals和hashCode)(此處不清楚看equals與==區別

      c. TreeSet 將元素存儲在紅-黑樹數據結構中,HashSet 使用的是散列函數

遍歷時:

     Iterator<Student> it = xxset.iterator();
        while(it.hasNext()){
            System.out.println(it.next());

        }

public class Student implements Comparable{
    private String name;
    private Integer age;
    
    public boolean equals(Object obj) {
        Student st = (Student)obj;
        return this.name.equals(st.getName())?true:false;
    }
    public int hashCode() {
        // 此處返回任意值都可
        return 1;
    }

    public String toString() {
        return "name:"+name+"\t age:"+age;
    }
    public Student(String name, Integer age) {
        super();
        this.name = name;
        this.age = age;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }

3Map  HashMap  、 TreeMap 、 HashTable
        a. 無的集合

        b. 不能有重複的key出現

        c.   重寫

                public int compareTo(Object o) {
                     Student st = (Student)o;
                      return this.age>st.age?1:this.age==st.age?0:-1; }

遍歷時:

Map<String,String> m = new HashMap<String,String>();
Set<String> keys = m.keySet();
		for(String key : keys){
			System.out.println(m.get(key));
		}
		System.out.println("-------或者-------");
		Collection values = m.values();
		for(Object o : values){
			System.out.println(o);
		}

HashMap基於Hashtable實現,不同之處在於HashMap是非同步的,並且允許null(只能有一個),即null value和null key,Hashtable則不允許null

hashmap/hashset等凡是帶有hash字眼的均基於hashtable實現,沒帶hash字眼的如set/map均是基於紅黑樹實現,前者無序,後者有序

主要區分:

   HashMap和HashTable異同點
   
   LinkedList和ArrayList異同點

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章