集合:
1 由來:
物件導向語言會產生很多物件,為了對這些物件進行儲存,操作,就產生了集合。集合存放的是物件的位址,操作的物件是物件。他是可變長度的。
物件用於封裝特有資料,物件多了需要儲存,如果物件的個數不定,則使用集合進行儲存。
2.特點:
1.集合是用於儲存物件的容器
2.集合的長度是可變的。
3.集合中不可以儲存基本資料型別值。這是它和陣列的重要區別之一。
3.每個容器都有自己的特點,所有的容器都有其共性。集合容器因為內部的資料結構不同,有多種具體容器,不斷向上抽取,就形成了集合框架,框架的頂層collection介面
4.collention的常見方法:
1.新增:
boolean add(object o);
boolean addall(collection c);//有重複元素時重複新增。
2.刪除:
boolean remove(object o); //會改變集合的長度
boolean removeall(collection c);//將兩個集合中的相同元素從呼叫者集合中刪除掉,注意刪除的是相同的元素。
void clear(); //清空,容器還在。
3.判斷:
boolean contains(object o);//包含
boolean containsall(collection c);//必須包含所有元素才返回true。
boolean isempty(); //判斷集合是否為空
4.獲取:
int size();//獲取集合的元素個數(長度)。
iterator iterator();//迭代器,獲取元素。
5.其他:
boolean retainall(collection c);//取交集,保留呼叫者集合中與指定集合相同元素
object toarray();//將集合轉化成陣列
5.迭代器使用:
iterator it = collention子類物件.iterator();//建立迭代器物件
it.next(); //輸出第乙個元素
it.next(); //輸出第二個元素,it會自動後移。
//當迭代器到最後個元素時,即不存在next()時,會出現執行時錯誤。
it.hasnext(); //存在下乙個時,返回true。
所以,輸出容器中的所有元素,可以使用方法:
while(it.hasnext())
注意:該方法執行結束後,迭代器it還會駐留記憶體,但是相當於指向容器的末尾,已經沒有存在的價值。
所以更好的使用方法時把迭代器定義成區域性變數,相應**執行結束時釋放迭代器資源:
for(iterator it = collention子類物件.iterator();it.hasnext();)
6.迭代器的原理:
迭代器物件必須依賴於具體的容器,因為麼乙個容器的資料結構都不相同,
所以該迭代器物件是在容器中進行內部實現的,對於使用容器者而言,具體的實現不重要,只要通過容器獲取到該實現的迭代器物件即可,也就是iterator方法。
iterator介面就是對所有collection子類容器進行元素取出的公共介面。
7.list(列表)和set(集):
list:有序的collection,也成為序列。此介面的使用者可以對列表中的每個元素的插入位置進行精確的控制,即索引。有序的:存入和取出存在一定的序列,順序一致。每個元素都有角標(索引),可以存在重複的元素
set:不包含重複元的collection,並且最多包含乙個null元素。元素不能重複(與list最大的區分),無序的,內部有一定的儲存規則。
list特有的常見方法:可以完成對元素的增刪查改。list最大的特點(共性):都可以操作角標(索引)。
1.新增:
void add(index,element);
void add(index,collection);
2.刪除:
object remove(index); //返回被刪除的物件。
3.修改
object set(index,element); //返回修改前的物件,需要注意的是:在vector也有該方法,不過在vector中set方法中引數順序與其正好相反。前物件後下標。
4.獲取:
object get(index); //返回角標代表的物件,特有的方式。
int indexof(object);
int lastindexof(object);
list sublist(from,to); //返回截出的物件
5.在迭代器過程中不要使用集合操作元素,因為容易出現異常。
為了避免異常,且完成相應的操作,可以使用iterator介面的子介面列表迭代器(listiterator)。
它可以實現在迭代的過程中完成對元素的增刪查改。
注意:只有在list集合中才存在該迭代器功能。
6.list下的重要的集合:
vector:內部是陣列資料結構。連續儲存,每個元素帶有索引,大小可根據需要增大或減小。它是同步的,執行緒安全。jdk 1.0就出現了。現在幾乎不用了。
增刪,查詢速度都很慢。
arraylist:內部是陣列資料結構。他是不同步的,jdk 1.2才出現。替代了vector。查詢的速度很快。
linkedlist:內部是鍊錶資料結構。他是不同步的。增刪元素的速度很快。
8.linkedlist:
需要注意的是:
該鍊錶中的方法中,獲取元素的方法有:
1.object get(index);
2.object getfirst();
3.object getlast();
//如果鍊錶為空,則出現執行時錯誤。替代方法:
//jdk 1.6以後出現新的方法:peekfirst();peeklast();若不存在,則返回null,不會丟擲異常。
以上三種方式,只獲取,不刪除。
4.object remove(index);
5.object removefirst();
//如果鍊錶為空,則出現執行時錯誤。替代方法:
//jdk 1.6以後出現新的方法:poolfirst();poollast();若不存在,則返回null,不會丟擲異常。
6.object removelast();
//以上三種方法返回刪除了的元素。
9.arraylist:
判斷物件是否相同的依據:equals()方法。
10.set:set中取資料使用迭代器iterator。set介面中的方法和collection一致。
hashset:內部資料結構是雜湊表。有雜湊表支援,不保證迭代順序。特別是不保證順序恆久不變。不同步。
雜湊表判斷元素是否相同的依據:
1.判斷兩個元素的雜湊值是否相同。其實判斷的是物件的hashcode()的方法。
2.判斷兩個元素的內容是否相同。其實是使用equals()方法進行判斷。
注意:如果第一步不滿足,則不再判斷第二步。
treeset:使用元素的自然順序(字典序)對set集合中的元素進行排序。是不同步的。
判斷元素唯一性的依據:根據比較方法(compareto)的返回結果是否是0,若是代表兩物件相等。正數代表大於。負數代表小於。
當無論比較結果如何,使返回值總是返回1,則會按照輸入順序儲存。即產生有序現象。返回值為0時,按照倒序。
對元素進行排序的方式:
1.讓元素本身劇本必備比較功能,需要實現comparable介面,覆蓋compareto方法。
2.如果不要按照物件中具備的自然順序進行排序,如果物件中不具備自然順序時,可以讓集合自身具備比較功能。
定義類實現comparator比較介面。重寫compare方法,將該類物件作為引數傳遞給建立的treeset集合的建構函式。使集合自身具備比較功能。
Java中對List集合的常用操作
很詳細 目錄 list中新增,獲取,刪除元素 list中是否包含某個元素 list中根據索引將元素數值改變 替換 list中檢視 判斷 元素的索引 根據元素索引位置進行的判斷 利用list中索引位置重新生成乙個新的list 擷取集合 對比兩個list中的所有元素 判斷list是否為空 返回itera...
JAVA 中常用的幾個集合類
1.arraylist 基於陣列方式實現,無容量的限制。在執行插入元素時可能要擴容,在刪除元素時並不會減少陣列的容量。如果希望相應的縮小陣列容量,可以呼叫trimtosize 在查詢元素時要遍歷陣列,對於非null的元素採取equals的方式尋找。非執行緒安全。2.linkedlist 基於雙向鍊錶...
java中常用的幾種集合型別
集合就像陣列一樣,用來存放東西 常用的集合分為list 有序排放 map 以名和值一一對應的存放 set 既無序也沒名 在這三者之中其中list和set是collection介面的子介面,而map不是collection介面的子介面 首先介紹的是集合 一 list 為了學習list,這裡介紹list...