標籤: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());
}
因為枚舉的名稱及方法的名稱過長,所以被迭代器取代了。