集合
結構圖:
總結:ide
1.集合中的元素都是對象(注意不是基本數據類型),基本數據類型要放入集合須要裝箱。
2.set與list的主要區別在於set中不容許重複,而list(序列)中能夠有重複對象。spa
3.TreeSet中能夠排序,HashSet是無序的;Vector和ArrayList都是能夠排序的code
List
1.arrayList.add(null);後 列表中會有null htm
2.在list中:ArrayList和Vector都有一個缺點,就是當刪除或增長集合中的某一元素時,該元素後的下標會發生變化。爲解決這一缺陷,咱們用LinkedList,它的元素採用獨立的節點,每個節點中存放着指向下一個節點的引用。對象
LinkedList的優缺點:優勢 - - - 有利於方便高效的進行插入和刪除操做。缺點 - - - 在進行隨機元素查詢時效率相對較低。blog
3.Vector相較於ArrayList,同步時開銷較大,訪問速度比ArrayList慢。
4.LinkedList類中的方法只能取首位值,例如銀行排隊時適用該集合
5. Stack類: 表示後進先出(LIFO)的對象堆棧 Last in First out
peek() 查看堆棧頂部的對象,但不從堆棧中移除它。
E pop() 移除堆棧頂部的對象,並做爲此函數的值返回該對象。
E push(E item) 把項壓入堆棧頂部
Ps:compator排序:
範例1:
ArrayList<Employee> emps = new ArrayList<Employee>();
emps.add(new Employee("張三1", 21));
emps.add(new Employee("張三2", 22));
emps.add(new Employee("張三3", 23));
Collections.sort(emps, new Comparator<Employee>() {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getAge() - o2.getAge();
}
});
範例2
Collections.sort(emps, new EmpCompartor());
另寫一個EmpCompartor()類:
public class EmpCompartor implements Comparator<Employee> {
@Override
public int compare(Employee o1, Employee o2) {
return o1.getAge() - o2.getAge();
}
}
Set
1. Iterator<Integer> iterator = hashSet.iterator();
Iterator的幾個方法:
hasNext()
若是仍有元素能夠迭代,則返回 true。
next()
返回迭代的下一個元素。
remove()
從迭代器指向的 collection 中移除迭代器返回的最後一個元素(可選操做)。
2. comparable& Comparator 都是用來實現集合中的排序的,只是Comparable是在集合內部定義的方法實現的排序,Comparator是在集合外部實現的排序,因此,如想實現排序,就須要在集合外定義Comparator接口的方法compare()或在集合內實現Comparable接口的方法compareTo()。
3.排序的三種方法:
A.在須要排序的類的內部繼承Comparable接口而且在下面定義一個compareTo方法(其返回值類型是int,經過不一樣對象的減法獲值)
B.在構造一個TreeSet或list集合時,在構造器內new 一個比較器,而後在文件中建立該比較器,該比較器繼承Comparator接口,而且實現該接口中的compare方法,其返回值也爲int型
C. 在構造一個TreeSet或list集合時,咱們使用匿名內部類,來實現Comparator接口中的compare方法,在構造時直接聲明。
4.HashMap與HashTable
a.HashTable是同步的,其餘的大體相同;
b.Hashtable 不容許 null 值(key 和 value 都不能夠),HashMap 容許 null 值(key 和value 均可以)。
c. 遍歷方式不一樣,Hashtable 使用Enumeration,HashMap 使用Iterator。
d. 哈希值的使用不一樣,Hashtable 直接使用對象的hashCode,而HashMap 從新計算hash 值,並且用與代替求模。
Ps: 1.鍵必須是惟一的,一個鍵不能對應兩個值。若是在映射表內對同一個鍵調用兩次put 方法,第二個值就會覆蓋第一個值。
2.刪除元素的時候,若是直接使用remove通常沒法刪除乾淨,一邊使用Iterator迭代刪除