Collection方法
學(xué)習(xí)目的
前面我們已經(jīng)學(xué)習(xí)了數(shù)組的基本知識,數(shù)組是用來存儲多個對象脊串。定義一個數(shù)組的基本方法是int[] score = {1,2,3}; int[] score = new int[10];但是他有個弊端:數(shù)組的?度不可變 內(nèi)容可變凉泄,不能存儲多種類型的對象躏尉。而實(shí)際開發(fā)中需要?個能夠隨時改變的數(shù)組,那么就引進(jìn)知識點(diǎn)集合(Collection)后众。使應(yīng)用更廣泛胀糜,更高效。
知識點(diǎn)
- Collection接?的使用
- Collection接?的方法
- 集合的遍歷
3.1. 使?Iterator來遍歷
3.2. for-each 增強(qiáng)for循環(huán) 快速循環(huán)
3.3. for- i 普通for循環(huán) - List接?
- List方法
- 將ArrayList轉(zhuǎn)化為普通數(shù)組
- Lambda表達(dá)式
- 排序方法及Lambda應(yīng)用
8.1. 定義一個類實(shí)現(xiàn)接口
8.2. 使用匿名類
8.3. 使用Lambda表達(dá)式
解析
- Collection接?的使用
Collection<String> t1 = new ArrayList();
t1.add("Jack");
t1.add("Merry");
System.out.println(t1);
- Collection接?的方法
方法 | 用途 | 實(shí)例 |
---|---|---|
remove | 刪除?個對象 | t1.remove("Jack"); |
size | 獲取元素個數(shù) | System.out.println(t1.size()); |
contains | 判斷是否包含?個元素 | if (t1.contains("Merry")){System.out.println("merry");}else{System.out.println("沒有merry");} |
isEmpty | 判斷是否為空 | if(t1.isEmpty())System.out.println("是空的");} |
equals | 判斷兩個集合是否相同(?較集合??的內(nèi)容) | Collection<String> t2 = new ArrayList<>();t2.add("Merry");t2.add("Jack"); t2.add("Rose");t2.add("Tom");if (t1.equals(t2)){System.out.println("兩個集合相同");} else{System.out.println("兩個集合不相同");} |
clear | 清空 | t1.clear(); |
3.集合的遍歷
3.1. 使?Iterator來遍歷
// hasNext 判斷是否有元素
// next 獲取下?個對象
// remove 刪除當(dāng)前遍歷過后的對象
System.out.println("----------------");
Iterator iterator = t2.iterator();
while (iterator.hasNext()){
System.out.println(iterator.next());
}
System.out.println("----------------");
3.2. for-each 增強(qiáng)for循環(huán) 快速循環(huán)
for (String obj: t2){
System.out.println(obj);
}
3.3. for- i 普通for循環(huán)
for (int i = 0; i < t2.size(); i++){
System.out.println(((ArrayList<String>) t2).get(i));
}
- List接? extends Collection
- 分為:ArrayList/LinkedArrayList
- 用途:集合??只能存放對象蒂誉,基本數(shù)據(jù)類型:byte char int long float double boolean不能存放教藻,要使用其包裝類:Byte Char Integer Long Float Double Boolean。方法是?動將基本數(shù)據(jù)類型包裝為對應(yīng)的類右锨。
- 使用方法:
ArrayList<Integer> score = new ArrayList<>();
score.add(2);
- List方法
(以ArrayList為例括堤,LinkedArrayList方法相同,可能實(shí)現(xiàn)不同)
方法 | 用途 | 實(shí)例 |
---|---|---|
add | 添加插入 | score.add(3);//在末尾添加score.add(0, 1);//在指定位置插? |
get | 訪問指定元素 | score.get(1); |
set | 修改?個元素 | score.set(0, 0); |
remove | 刪除 | score.remove(0);//刪除指定位置的元素score.remove((Integer) 2); //刪除指定的對象 |
clear | 清空 | score.clear(); |
addAll | 將?個集合??的內(nèi)容添加到當(dāng)前集合中 | score.addAll(a2); |
retainAll | 取兩個集合的交集 | System.out.println(score);ArrayList<Integer> a3 = new ArrayList<>();a3.add(1);a3.add(2);score.retainAll(a3); |
indexOf/lastIndexOf | 訪問某個對象在集合??的索引 | ArrayList<Integer> a4 = new ArrayList<>();a4.add(1);a4.add(2);a4.add(2);a4.add(1);System.out.println(a4.indexOf(1));//第?次出現(xiàn)的位置System.out.println(a4.lastIndexOf(1));//最后?次出現(xiàn)的位置 |
- 將ArrayList轉(zhuǎn)化為普通數(shù)組
Integer[] objects = new Integer[a4.size()];
a4.toArray(objects);
for (Integer i : objects) {
System.out.println(i);
}
System.out.println("----------");
Object[] objects1 = a4.toArray();
for (Object i : objects1) {
System.out.println(i);
}
System.out.println("----------");
Iterator iterator = a4.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
- Lambda表達(dá)式
return (var1) -> {
return !this.test(var1);
};
return 20;
- 排序方法及Lambda應(yīng)用
class ArrayClass{
public void test(int[] target, Show s){
for (int element: target){
s.customShow(element);
}
}
}
//必須是接口 這個接口里面只有一個方法
interface Show{
void customShow(int element);
}
class PXDClass implements Show{
@Override
public void customShow(int element) {
System.out.println(element);
}
}
排序使用方式:
8.1. 定義一個類實(shí)現(xiàn)接口
ArrayClass ac = new ArrayClass();
int[] num = {1,2,3,4,5,6};
PXDClass pc = new PXDClass();
ac.test(num, pc);
8.2. 使用匿名類
ArrayClass ac = new ArrayClass();
int[] num = {1,2,3,4,5,6};
ac.test(num, new Show() {
@Override
public void customShow(int element) {
System.out.println(element);
}
});
8.3. 使用Lambda表達(dá)式
//如果參數(shù)是一個接口類對象绍移,且接口里面只有一個方法
//可以省略方法名
ArrayClass ac = new ArrayClass();
int[] num = {1,2,3,4,5,6};
ac.test(num, (int element) -> {
System.out.println(element);
});