集合類學習筆記

來源:互聯網
上載者:User

標籤:style   blog   http   color   使用   os   

一、概念

集合是儲存物件的一種方式。集合中都是存放著地址,方便引用。JDK 1.2版本的時候就有了

二、集合和數組的區別

集合是可變長度,數組是固定長度。

數組可以儲存基礎資料型別 (Elementary Data Type),集合只能儲存物件,集合可以儲存不同類型的對象。

Collection

1.List:元素是有序的,可以重複,有索引

2.Set:元素是無序的,不可以重複,使用hash值排列

 

 

 

三、CURD

boolean add(E e);

boolean addAll(Collection<? extends E> c);

void clear();  清空容器

boolean remove(Object o);

boolean removeAll(Collection<?> c);

boolean contains(Object o);

 

四、迭代器

用於取出集合內元素的方式:

ArrayList al = new ArrayList();
Iterator it = al.iterator();//迭代器
it.next();//傳回值
it.hasNext()//boolean的類型

每個容器都有存和取,每個容器的資料結構不同,存取方式可能也不同。

        取出方式定義在集合的內部,取出方式就可以直接存取集合內部的元素。那麼取出方式就被定義成了內部類。

        每一個容器的資料結構不同,所以取出的動作細節也不一樣。但是都有共性內容,就是判斷和取出。這樣,可以將這些共性抽取。

 

 

如何擷取集合的取出對象呢?

通過對外提供的方法,即 iterator();

-------------------------------

五、Set

public interface Set extends Collection

Set元素是無序的,存入和取出的順序不一定一致,元素不可以重複,Set集合的功能和Collection一致。

1.HashSet底層資料結構是雜湊表。線程是非同步的。

hashCode() 和equals()

如果元素的hashcode相同,才會判斷equals是否為true

如果元素的hashcode不同,則不會調用equals

 

注意:對於判斷元素是否存在,以及刪除等操作,依賴的方法是元素的hashcode和equals。

HashSet:

 

[email protected]

[email protected]

ToString(): getClass().getName() + ‘@’ + Integer.toHexString(hashCode());

         

2.TreeSet

可以對Set集合中的元素進行排序。線程是非同步的。

TreeSet裡面的對象必須具備比較性。

底層資料結構是二叉樹;

保證元素唯一性的依據:

compareTo方法,return0

 

TreeSet排序第一種方式:

元素需要實現Comparable介面,覆蓋compareTo方法。

元素自然順序排列

 

class Student implements Comparable{

        public int compareTo(Object obj){

                if(!(obj instanceof Student)){

                     throw new RuntimeException(“不是學生對象”);

               }

               Student s  = (Student)obj;

               if(this.age > s.age)

                          return 1;

               if(this.age=s.age)

                          return 0;

               return –1;

        }

}

TreeSet只看comparTo結果

         

        TreeSet的第二種排序方式:

         當元素自身不具備比較性時候,或者具備的比較性不是需要的,這個時候就需要讓集合自身具備比較性。

         在集合一出始化時,就有了比較方式。

       compare方法

   覆蓋Comparator的compare方法

  new Integer(s1.getAge()).compareTo(new Integer(s2.getName()));

 

六、List

List特有方法,凡事可以操作角標的方法都是該體系特有的方法。

增:add(index,element);

        addAll(index, Collection);

刪:remove(index);

改:set(index,element);

查:get(index)

        subList(from, to);

        listIterator();

for(int x = 0; x<al.size();x++){

     sysout();

}

          while(it.hasNext()){

        sysout();

}

List集合特有的迭代器

ListIterator it = new al.listIterator();

hasNext = true

hasPrevious = false

ListIterator 可以在遍曆的時候進行增刪改查。

--------------------------

常見子類

1.ArrayList:底層的資料結構使用的是數組結構(JDK1.2)

特點:查詢速度快

缺點:增加、刪除稍慢(元素越多越明顯)

 

2.LinkedList:底層的資料結構使用的是鏈表

特點:插入、刪除資料區塊

缺點:查詢速度慢

LinkedList link = new LinkedList();

link.add();

 

LinkedList特有方法:

addFirst();

addLast();

 

getFirst();

getLast();

擷取元素,但不刪除元素,

如果集合中沒有元素,會出現NoSuchElementException;

 

removeFirst();

removeLast();

擷取元素,但元素被刪除,

如果集合中沒有元素,會出現NoSuchElementException;

在JDK1.6出現了

offerFirst();

offerLast();

 

peekFirst();

peekLast();

擷取元素,但元素不被刪除,

如果集合中沒有元素,會返回null

 

pollFirst();

pollLast();

擷取元素,但元素被刪除,

如果集合中沒有元素,會返回null

 

while(!link.isEmpty()){

    sop(link.removeFirst());

}

 

使用equals比較對象是否相同

public boolean equals(Object obj){

        if(!(obj instanceof Person)){

                return false;

        }

        Person p = (Person)obj;

        return this.name.equals(p.name) && this.age == p.age;

}

 

3.Vector:底層是數組資料結構(JDK1.0)

Vector和ArrayList功能一樣。Vector是同步的,ArrayList線程不同步。

盡量用ArrayList而不用Vector

-------------------

Enumeration枚舉(JDK1.0)

Enumeration en = v.elements();

while(en.hasMoreElements()){

        sysout(en.nextElement());

}

因為枚舉的名稱及方法的名稱過長,所以被迭代器取代了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.