1.集合
1.1.集合和數組的區別
- 數組的長度是固定的,不能再添加元素
- 集合類的長度是可變的,隨着元素的增加而增加
- 數組能存基本數據類型和 引用數據類型
- 集合當中只能存放對象,基本數據類型也會自動裝箱
1.2.什麼時候使用數組,什麼時候使用集合類
- 如果元素的個數是固定的,推薦使用數組
- 如果元素的個數是不固定的,推薦使用集合
1.3.Collection 集合的接口,add(),remove(),clear(), isEmpty();
- List(有序)接口,實現類,是可以添加重複元素
- ArrayList(內部結構數組),覆蓋了toString(),可以直接打印結果。
- LinkedList(內部結構鏈表)
- Vector(內部結構數組),jdk1.2併到list的
- Set(無序)接口,實現類如下,不能添加重複元素
- HashSet(內部結構Hash算法)
- 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);
}
}