重溫Java基礎(七)

1.集合

1.1.集合和數組的區別

  • 數組的長度是固定的,不能再添加元素
  • 集合類的長度是可變的,隨着元素的增加而增加
  • 數組能存基本數據類型和 引用數據類型
  • 集合當中只能存放對象,基本數據類型也會自動裝箱

1.2.什麼時候使用數組,什麼時候使用集合類

  • 如果元素的個數是固定的,推薦使用數組
  • 如果元素的個數是不固定的,推薦使用集合

1.3.Collection 集合的接口,add(),remove(),clear(), isEmpty();

  • List(有序)接口,實現類,是可以添加重複元素
  1. ArrayList(內部結構數組),覆蓋了toString(),可以直接打印結果。
  2. LinkedList(內部結構鏈表)
  3. Vector(內部結構數組),jdk1.2併到list的
  • Set(無序)接口,實現類如下,不能添加重複元素
  1. HashSet(內部結構Hash算法)
  2. TreeSet(內部結構二叉樹)

1.4.集合的遍歷

  • 把集合轉化爲數組,然後遍歷, toArray()會把集合轉化爲Object數組,自動向上轉型
  • 迭代器遍歷,Iterator

1.5.集合的常用方法

  • addAll(),把集合合併到一起。
  • removeAll()刪除兩個集合的交集。
  • containsAll(),判斷是否包含整個集合
  • retainAll(),取兩個集合的交集 ,boolean res = s.retainAll(t); 集合變化了返回true,否則返回false

1.6.集合Iterator迭代刪除,添加元素容易併發異常,需要使用自己的迭代器,listIterator(),list特有的。

1.7.list向前遍歷,listIterator.hasPrevious();  listIterator.previous();

1.8.ArrayList和LinkedList

  • ArrayList容量增加50%,查詢修改快,添加刪除慢
  • LinkedList查詢修改慢,添加刪除快。特有的方法,addFirst(),removeFirst()...
  • Vector可以用Enumeration遍歷,加鎖更安全。
Vector v=new Vector();
        Enumeration e=v.elements();
        while (e.hasMoreElements()){
            e.nextElement();
        }

 

1.9.list去除重複的對象,需要重寫equals方法。contains方法比較的是對象地址。

2.LinkedList 實現棧的數據結構

class ClassStack {
    LinkedList linkedList;

    ClassStack() {
        linkedList = new LinkedList();
    }

    //入棧
    void push(Object obj) {
        linkedList.addLast(obj);
    }

    //出棧
    void pop(Object obj) {
        linkedList.removeLast();
    }

    @Override
    public String toString() {
        return "ClassStack{" +
                "linkedList=" + linkedList +
                '}';
    }
}

public class TestStack {

    public static void main(String[] args) {
//        Stack stack= new Stack();
//        stack.pop();
        ClassStack stack = new ClassStack();
        stack.push("a");
        stack.push("b");
        stack.push("c");
        System.out.println(stack);

    }
}

 

 

 

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