1. 程式人生 > >AJPFX關於Collection接口的總結

AJPFX關於Collection接口的總結

equals dex lec ctr 什麽 不知道 ret dal 不可

###15Collection-List-ArrayList/LinkedList/
* * Collection接口中的方法
* A:添加功能
* boolean add(Object obj):把obj這個元素,添加到集合中去
* boolean addAll(Collection c):將 c 這個集合中的所有元素,都添加到本集合中來
* B:刪除功能
* void clear():刪除集合中的所有元素。
* boolean remove(Object obj):從集合中刪除 obj 這個元素

* boolean removeAll(Collection c):從集合中刪除c中含有的所有元素
* C:判斷功能
* boolean isEmpty():判斷集合是否為空。
* boolean contains(Object obj):判斷集合中是否存在 obj這個元素。
* boolean containsAll(Collection c):判斷集合中是否存在 c 集合中的所有元素。
* D:遍歷功能
* Iterator iterator():就是用來獲取集合中每一個元素。
* E:長度功能
* int size():獲取集合中的元素個數
* F:交集功能
* boolean retainAll(Collection c): 保留本集合和c這個集合中的共同元素
* G:把集合轉換成數組
* Object[] toArray():把集合變成 Object類型的數組。
*/

/*
* List接口中的方法(List接口繼承了Collection接口,所以下面只列出了List接口的特有方法)
* List的特有功能:
*
* A:添加功能
* void add(int index, Object obj):在索引為 index的位置,添加 obj這個元素
* B:刪除功能
* Object remove(int index):刪除索引為index的元素,並把這個元素返回
* C:修改功能
* Object set(int index, Object obj):把索引為index的位置,修改為 obj這個元素, 並且把修改之前的元素返回。
* D:獲取功能
* int indexOf(Object obj):返回 obj這個元素在集合中第一次出現的索引
* Object get(int index):獲取索引為 index的元素對象
* ListIterator listIterator():列表叠代器
* E:截取功能
* List subList(int fromIndex, int toIndex):返回一個新的集合,這個集合裏面的元素,是原來集合中的一部分,直接看下面代碼
*
###15.08_集合框架(叠代器的原理及源碼解析)(了解)
Iterator it = iterator iterator();//獲取叠代器
it.hasNext()//判斷是否有元素一般while(it.hasNext())
It.next();//獲取元素

###15.12_集合框架(ListIterator)(了解)
* boolean hasNext()是否有下一個
* boolean hasPrevious()是否有前一個
* Object next()返回下一個元素
* Object previous();返回上一個元素

###15.13_集合框架(Vector的特有功能)(面試用開發中不用)
* A:Vector類概述
* B:Vector類特有功能
* public void addElement(E obj)
* public E elementAt(int index)
* public Enumeration elements()
B:List有三個兒子,我們到底使用誰呢?
查詢多用ArrayList
增刪多用LinkedList
如果都多ArrayList
集合框架(LinkedList的特有功能)(掌握)
* A:LinkedList類概述
* B:LinkedList類特有功能
* public void addFirst(E e)及addLast(E e) //在開始加入元素//在最後加入元素
* public E getFirst()及getLast()////獲取第一個元素//獲取最後元素
* public E removeFirst()及public E removeLast() //刪除第一個元素//刪除最後一個元素
* public E get(int index);// 獲取索引處的元素

_集合框架(棧和隊列數據結構)(掌握)
* 棧
* 先進後出
* 隊列
* 先進先出

_集合框架(泛型概述和基本使用)(掌握)
* A:泛型概述
* B:泛型好處
* 提高安全性(將運行期的錯誤轉換到編譯期)
* 省去強轉的麻煩
* C:泛型基本使用
* <>中放的必須是引用數據類型
* D:泛型使用註意事項
* 前後的泛型必須一致,或者後面的泛型可以省略不寫(1.7的新特性菱形泛型)
集合框架(增強for的概述和使用)(掌握)
* A:增強for概述
* 簡化數組和Collection集合的遍歷
* B:格式:
*
for(元素數據類型 變量 : 數組或者Collection集合) {
使用變量即可,該變量就是元素
}
_集合框架(三種叠代的能否刪除)(掌握)
* 普通for循環,可以刪除,但是索引要--
* 叠代器,可以刪除,但是必須使用叠代器自身的remove方法,否則會出現並發修改異常
* 增強for循環不能刪除只能遍歷

_集合框架(靜態導入的概述和使用)(了解)
* A:靜態導入概述
* B:格式:
* import static 包名….類名.方法名;
* 可以直接導入到方法的級別
* C:註意事項
* 方法必須是靜態的,如果有多個同名的靜態方法,容易不知道使用誰?
這個時候要使用,必須加前綴。由此可見,意義不大,所以一般不用,但是要能看懂。
_集合框架(可變參數的概述和使用)(掌握)
* A:可變參數概述
* 定義方法的時候不知道該定義多少個參數
* B:格式
* 修飾符 返回值類型 方法名(數據類型… 變量名){}
* C:註意事項:
* 這裏的變量其實是一個數組
* 如果一個方法有可變參數,並且有多個參數,那麽,可變參數肯定是最後一個
/**
* * A:可變參數概述
* 定義方法的時候不知道該定義多少個參數
* B:格式
* 修飾符 返回值類型 方法名(數據類型… 變量名){}
* C:註意事項:
* 這裏的變量其實是一個數組
* 如果一個方法有可變參數,並且有多個參數,那麽,可變參數肯定是最後一個
*/
public static void main(String[] args) {
int[] arr = {11,22,33,44,55};
//print(arr);
print(11,22,33,44,55);
System.out.println("---------------");
//print();
}

/*public static void print(int[] arr) {
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}*/
public static void print(int ... arr) { //可變參數其實是一個數組
for (int i = 0; i <
錯誤!未找到目錄項。
arr.length; i++) {
System.out.println(arr[i]);
}
}

集合框架(Arrays工具類的asList()方法的使用)(掌握)
* A:案例演示
* Arrays工具類的asList()方法的使用
Integer[] i = {1,2,3,4,5};
List<Integer> l = Arrays.asList(i);//將數組轉成集合只能用引用類型數組
System.out.println(l);

* Collection中toArray(T[] a)泛型版的集合轉數組

_集合框架(集合嵌套之ArrayList嵌套ArrayList)(掌握)
* A:案例演示
* 集合嵌套之ArrayList嵌套ArrayList
HashSet方法
1)基本數據類型去掉重復元素並且無索引(進 出不同)
2)引用數據類型:要重寫toString方法
如果要去除重復就要重寫hashCode()方法與equals()方法
Hashcode()設置的原則:/如果對象的成員變量值一樣,那麽就想辦法讓這個方法的返回值一樣,否則讓返回值不一樣
HashSet中想去掉重復元素必須重寫hashCode()和equals()方法;

LinkedHashSet方法
特點:底層是鏈表實現的 是Set()集合中唯一一個能保證怎麽存怎麽取得功能
因為是HashSet的子類,索引也是保證元素的唯一性

TreeSet 集合:
一般類型 用來對元素進行排序的並且保證元素的唯一(去除重復元素,並排序)
引用數據類型:首先:重寫toString()方法;(如果不重寫輸出的是地址值)
實現接口implements comparable<本類名> 此時類名會報錯(ctrl+1)
自動創建一個方法compareTo(類名) {
判斷成員變量
}
以上三步缺一不可
/*@Override
//按照年齡排序
public int compareTo(Person o) {
int num = this.age - o.age; //年齡是比較的主要條件
return num == 0 ? this.name.compareTo(o.name) : num;//姓名是比較的次要條件
}*/
/*@Override
//按照姓名排序
public int compareTo(Person o) {
int num = this.name.compareTo(o.name); //姓名是主要條件
return num == 0 ? this.age - o.age : num; //年齡是次要條件
}*/
/*
* aaa
* bbb
*/
public int compareTo(Person o) {
int length = this.name.length() - o.name.length(); //比較長度為主要條件
int num = length == 0 ? this.name.compareTo(o.name) : length; //比較內容為次要條件
return num == 0 ? this.age - o.age : num; //比較年齡為次要條件
}
面試手寫
public boolean equals(Object obj) {
System.out.println("執行了嗎");
Person p = (Person)obj;
return this.name.equals(p.name) && this.age == p.age;
}
@Override
public int hashCode() {
final int NUM = 38;
return name.hashCode() * NUM + age;
}*/

HashSet()
* 1.特點
* TreeSet是用來排序的, 可以指定一個順序, 對象存入之後會按照指定的順序排列
* 2.使用方式
* a.自然順序(Comparable)
* TreeSet類的add()方法中會把存入的對象提升為Comparable類型
* 調用對象的compareTo()方法和集合中的對象比較
* 根據compareTo()方法返回的結果進行存儲
* b.比較器順序(Comparator)
* 創建TreeSet的時候可以制定 一個Comparator
* 如果傳入了Comparator的子類對象, 那麽TreeSet就會按照比較器中的順序排序
* add()方法內部會自動調用Comparator接口中compare()方法排序
* 調用的對象是compare方法的第一個參數,集合中的對象是compare方法的第二個參數
* c.兩種方式的區別
* TreeSet構造函數什麽都不傳, 默認按照類中Comparable的順序(沒有就報錯ClassCastException)
* TreeSet如果傳入Comparator, 就優先按照Comparator

AJPFX關於Collection接口的總結