Java心得--集合、列表__Java

來源:互聯網
上載者:User

1.:

Collection:(在util包中)

Set:(序、元素不可重複)

List:(序、可重複;通過角標索引):    

ArrayList:底層資料類型為數組,增刪慢,尋找(訪問)快

LinkedList:底層資料類型為鏈表;增刪快,尋找(訪問)慢。

Vector:底層資料類型為數組;元老層級,安全執行緒,但是增刪和尋找都不快,子類:Stack(先進後出)。

2.   集合:長度可變,可存不同資料類型,只儲存物件。

     數組:長度不可變,可存同一種資料類型,儲存物件和基礎資料型別 (Elementary Data Type)。

3. 注意:數組、StringBuffer、乃至後文描述的各種集合類型,都是一種可以儲存資料以及對象的“容器”。

 Java用集合類來容納不同種類的資料,這種容納是建立在未知的基礎上,即Java要用有限種類的集合類,來容納無限種類的資料對象。

分類:Java的集合類可以分為三類:集、列表和映射

4. 列表(List)

List列表區分元素的順序,即List列表能夠精確的控制每個元素插入的位置,使用者能夠使用索引(元素在List中的位置)來訪問List中的元素。和Set集合的不同,List允許包含重複元素。

5.斜體標識的是介面,虛線箭頭表示“實現”關係

                               

需注意:

JavaSDK不提供直接繼承自Collection的類,Java SDK提供的類都是繼承自Collection的“子介面”。

Collection介面有多個子介面,其中最重要的兩個java.util.Set和java.util.List分別描述集Set和列表List。

Collection中的方法:

publicboolean add(E e):向集合中添加一個元素,加入成功返回ture。在其子介面中方法發生了分化,比如:Set介面添加重複元素時會被拒絕並返回false,而List介面則會接受重複元素並返回ture。

publicboolean remove(Object o) :從集合中刪除指定元素

publicint size():返回元素個數,即遍曆集合。

public booleancontains(Object obj):判斷是否包含指定元素

publicboolean isEmpty():判斷集合是否為空白

publicObject[] toArray():返回包含當前集合中所有元素上的數組。

public  void clear():刪除所有元素

6.   不論Collection的實際類型如何,它都支援一個方法—public Iteratoriterator();該方法(iterator為一個介面,包含三個方法)返回一個列舉程式(迭代器)對象,使用該方法即可遍曆Collection中的每一個元素。用法:

方法一:

Iteratorit = c.iterator();  //c為集合對象

While(it.hasNext()){//hasNext()方法判斷是否還有下一個元素。

     Object obj = it.next();//next()擷取下一個元素,返回一個對象(Object),一開始,指標都指在第一個元素的前面。

}

方法二:

for(Iteratorit = c.iterator();it.hasNext();){

    Object obj = it.next();

}

方法二更好一些,一是代碼簡練;二是new的it對象在迴圈完了就不用了,while迴圈還保留著,但是for迴圈中的可以被記憶體回收機制收回。

7. java.util.List介面描述的是列表結構,允許程式員對列表元素的插入位置進行精確控制,並增加了根據元素索引來訪問元素、搜尋元素等功能。在繼承父介面Collection的基礎之上,List介面新增的相應方法:

voidadd(int index, E element):在索引號後插入對象

   boolean add(Ee):將對象e插到鏈表最後

Eremove(int index):刪除指定索引號元素

booleanremove(Object o):刪除列表第一個指定內容元素

Eget(int index):得到指定索引號的元素,沒有用到泛型時,傳回值類型是Object,所以在這種情況下要根據實際,把這個返回對象強制轉換為它原來的類型。

intsize():同父介面

intindexOf(Object obj):找到Object元素,返回它的索引值

List<E>subList(int fromIndex, int toIndex):截子鏈,(有開頭結尾的方法,都是包含開頭不包含結尾)

voidclear()

      Java.util.List介面的實作類別(子類)有多個,分別體現了列表的不同分化形式。

ArrayList、Vector、Stack、LinkedList

8.Vctor類

  實線了list介面,對於資料類型結構中的“向量”。

@@@構造方法:

Vctor():構造一個空向量,並設定其初始值為10,標準容量增量為0;

Vctor(intinitialCapacity):使用指定初始值為和容量增量為0構造一個空向量;

Vctor(intinitialCaption,int capacipyIncrement):使用已知初始值為和容量增量構造一個空向量。在實際項目中最常用。

Vctor(<E>c):該構造方法體現了java的新特性—泛型,只有在使用Vctor前,明確知道其中容納對象的類型,才可以使用這種類型的構造方法。

@@@其他方法:

voidadd(E obj):向集合中添加一個元素,體現泛型特性

insertElementAt(Eobj,int index):在指定索引處添加元素

setElementAt(Eobj,int index):替換指定索引處元素,與上一個方法很相似

publicboolean removeElement(Object obj) :從集合中刪除指定元素,可刪除第一個obj對象,用來表示是否在Vctor中找到並刪除指定對象。

void removeElementAt(intindex):刪除指定索引元素

void removeAllElement():刪除所有元素,可刪除Vctor中所有對象,該Vctor對象的size重設為0

publicint size():返回元素個數,即遍曆集合。

EelementAt(int index):依次訪問Vctor中各元素,可通過此方法將對象裡索引號為i的元素及泛型或Object返回

Vctor裡的方法參數中插入的位置(角標)在對象後面。

9.先進後出的Stack類

Stack是Vector類的子類,特點:“後進先出”(Last InFirst Out)類型的容器,即最後一個被“壓(push)”進堆棧中的對象,會被第一個“彈(pop)”出來。

  

 

@@@構造方法

Stack():用於建立支援“後進先出”訪問方式的對象
例:Stack st=new Stack();
       Stack <String> st = newStack();

@@@其他方法

Epeek() 返回棧頂元素,但沒有彈出棧頂元素

E pop()彈出棧頂元素,並返回其中的對象。

Epush(E item) 向堆棧頂端壓入item對象,同時將item對象返回。

booleanempty() 判斷堆棧是否為空白,如果該堆棧為空白,返回true,反之返回false。

注意:由於Stack繼承了Vector類,所以以下語句從文法上來講,不會有問題。但卻破壞了堆棧“後進先出”的特性,所以,不推薦使用。

st.addElement("badusage1");

st.addElement("badusage2");

st.addElement("badusage3");

for(inti=0;i<st.size();i++){

      System.out.println(st.elementAt(i));

}

10.LinkedList類:鏈式儲存方方式                                                                                                                                               

邏輯上相鄰的兩個元素在物理上不相鄰,通過“鏈條”串連

@@@構造方法:

LinkedList()

LinkedList(Collectionc):Collection是java裡線性表類集合的基類這種構造方法可以把Collection內的各元素裝載到LinkedList對象裡。

LinkedList(<E>C)

@@@其他方法:

  添加元素:

void addFirst(Eobj)和void addLast(E obj):在List介面中add的方法的基礎上擴充了:在表頭和表尾添加元素。

擷取元素:

   E getFirst(E obj)和ObjectgetLast(E obj):在List介面中get的方法的基礎上擴充了:在表頭和表尾擷取元素。

刪除元素:

   E removeFirst(E obj)和ObjectremoveLast(E obj):在List介面中remove的方法的基礎上擴充了:在表頭和表尾添加元素。

11.數組:

(1)可以根據數組起始地址和其中元素的索引號,很快地定位到數組中的任意元素

(2)插入、刪除元素等操作效率底

鏈表:

(1)鏈表中元素訪問的代價要比數組高。

(2)能很方便地完成元素的插入和刪除工作

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.