昆明網(wǎng)站建設-中國互聯(lián)百度app安裝下載免費
一、單列集合Collection
List系列集合特點:添加的元素是有序(存和取的順序一致)、可重復、有索引
Set系列集合特點:添加的元素是無序(存和取的順序有可能不一致)、不重復、無索引
Collection是所有單列集合的祖宗接口,其功能所有的單列集合都能繼承使用。
import java.util.ArrayList;
import java.util.Collection;public class Main {public static void main(String[] args){//利用多態(tài)創(chuàng)建對象//對于成員變量:在子類的對象中,會把父類的成員變量繼承下去。多態(tài)創(chuàng)建的對象是采用父類變量。//對于成員方法:如果子類對方法進行了重寫,那么在繼承時,虛方法表中會覆蓋父類的方法,因此多態(tài)創(chuàng)建的對象采用子類方法。Collection<String> collection=new ArrayList<>();//1、添加元素//對于同為Collection子類的 List系列集合 和 Set系列集合 兩者都繼承了父類種的 add 方法//如果是通過List系列集合的對象調用 add 方法,則方法永遠返回true(添加成功),因為List系列集合允許元素重復//如果是通過Set系列集合的對象調用 add 方法,則方法會在元素不重復的情況下返回true(添加成功),否則返回false,因為Set系列集合不允許元素重復collection.add("abc");collection.add("def");collection.add("ghi");System.out.println(collection); //[abc, def, ghi]//2、清空// collection.clear();// System.out.println(collection); //[]//3、刪除//因為Set系列集合具有 無序 的特點,因此在父類中定義的remove方法是共性的方法——既無法通過索引刪除,只能通過元素的對象刪除。//方法返回的是boolean類型的值,刪除成功(要刪除的元素存在)則返回true,反之返回false。System.out.println(collection.remove("abc")); //trueSystem.out.println(collection); //[def, ghi]//4、判斷元素是否包含//contains方法底層是依賴equals方法進行判斷是否存在的//如果集合中存儲的是自定義對象,也想通過contains方法判斷是否包含,在Javabean中一定要重寫Equals方法//因為對于引用數(shù)據(jù)類型,equals方法比較的是元素的地址值boolean result1=collection.contains("def");boolean result2=collection.contains("defg");System.out.println(result1); //trueSystem.out.println(result2); //false//5、判斷集合是否為空boolean result3=collection.isEmpty();System.out.println(result3); //false//6、判斷集合長度System.out.println(collection.size()); //2collection.add("abc");System.out.println(collection.size()); //3}}
二、Collection遍歷方式
(一)迭代器遍歷
特點:不依賴索引
迭代器在Java中的類是Iterator,迭代器是集合專用的遍歷方式。
?注意點:
①代器遍歷結束后,指針不會復位,若需要再次遍歷,只能再創(chuàng)建一個新的迭代器對象
②循環(huán)中只能用一次next方法(可以用一個變量進行記錄)
③迭代器遍歷時,不能用集合的方法進行增加或者刪除(若要進行刪除操作,需要用迭代器對象調用remove方法,增加目前沒有辦法)
④如果當前位置沒有元素,還要強行獲取,會報錯,報錯類型位:NoSuchElementException
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args){ArrayList<String> list=new ArrayList<>();list.add("三");list.add("連");list.add("外");list.add("加");list.add("轉");list.add("發(fā)");list.add("了");list.add("嗎");list.add("?");list.add("?");Iterator<String> it=list.iterator(); //返回迭代器對象,默認指向集合的0索引boolean flag=it.hasNext();System.out.println(flag);String str=it.next();//獲取當前元素,并將迭代器對象移向下一個位置System.out.println(str);// 三str=it.next();System.out.println(str);// 連}
}
import java.util.ArrayList;
import java.util.Iterator;public class Main {public static void main(String[] args){ArrayList<String> list=new ArrayList<>();list.add("三");list.add("連");list.add("外");list.add("加");list.add("轉");list.add("發(fā)");list.add("了");list.add("嗎");list.add("?");list.add("?");Iterator<String> it=list.iterator(); //返回迭代器對象,默認指向集合的0索引boolean flag=it.hasNext();System.out.println(flag);//使用迭代器進行遍歷while(it.hasNext()){String str=it.next();System.out.print(str+" ");//三 連 外 加 轉 發(fā) 了 嗎 ? ? }}
}
(二)增強for遍歷
①增強for的底層就是迭代器,為了簡化迭代器的代碼書寫的。
②是JDK5之后出現(xiàn)的,內部原理就是一個Iterator迭代器。
③所有的單列集合和數(shù)組才能用增強for進行遍歷。
格式:
例:
import java.util.ArrayList;
import java.util.Collection;public class Main {public static void main(String[] args){//集合的三種遍歷方式:迭代器遍歷 增強for循環(huán)遍歷 lambda表達式遍歷Collection<String> list=new ArrayList<>();list.add("三");list.add("連");list.add("外");list.add("加");list.add("轉");list.add("發(fā)");list.add("了");list.add("嗎");list.add("?");list.add("?");//增強for循環(huán)遍歷//快速生成方式: list.for (集合名字.for)for(String s:list){System.out.print(s+" ");}}
}
注意點:?
修改增強for中的變量,不會改變集合中原本的數(shù)據(jù)(遍歷過程中是用第三方變量記錄集合中的元素,修改增強for中的變量不影響集合元素)?
(三)Lambda表達式遍歷
例:
import java.util.ArrayList;
import java.util.Collection;
import java.util.function.Consumer;public class Main {public static void main(String[] args){//集合的三種遍歷方式:迭代器遍歷 增強for循環(huán)遍歷 lambda表達式遍歷Collection<String> list=new ArrayList<>();list.add("三");list.add("連");list.add("外");list.add("加");list.add("轉");list.add("發(fā)");list.add("了");list.add("嗎");list.add("?");list.add("?");//增強for循環(huán)遍歷for(String s:list){System.out.print(s+" ");}System.out.println();System.out.println("________________________");//使用匿名內部類的形式遍歷list.forEach(new Consumer<String>() {@Override//s依次表示集合中的每一個數(shù)據(jù)//方法底層也是遍歷集合,依次得到每一個元素,把得到的每一個元素,傳遞給下面的accept方法//s依次表示集合中的每一個數(shù)據(jù)public void accept(String s) {System.out.print(s+" ");}});System.out.println();System.out.println("___________________________");//使用Lambda表達式簡化匿名內部類方法list.forEach(s-> System.out.print(s+" "));}
}
(四)總結
三、List系列集合
特點:有序、有索引、可重復
List集合方法:
①Collection的方法都繼承了
②List集合有索引,有很多關于索引操作的方法:
關于remove方法的問題:
import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
import java.util.List;
import java.util.function.Consumer;public class Main {public static void main(String[] args){//List系列集合List<Integer> list1=new ArrayList<>();list1.add(1);list1.add(2);list1.add(3);//若想要刪除元素1//list1.remove(1); 會判斷1為集合的索引而不是元素//正確方法list1.remove((Integer) 1);System.out.println(list1); //[2, 3]}
}
原因:remove方法在調用時,發(fā)生了重載現(xiàn)象,默認優(yōu)先調用實參和形參類型一致的方法。
方法示例代碼:
import java.util.ArrayList;
import java.util.List;public class Main {public static void main(String[] args){//List系列集合//因為List類是一個接口類,所以不能直接創(chuàng)建接口類的對象//在這邊只能創(chuàng)建一個List的實現(xiàn)類的對象List<String> list=new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");System.out.println(list); //[aaa, bbb, ccc, ddd]// add(int index,E element) 在指定索引出插入指定的元素list.add(0,"fff");System.out.println(list); //[fff, aaa, bbb, ccc, ddd]System.out.println("__________________");//E remove(int index) 刪除指定索引處的元素,返回被刪除的元素String remove=list.remove(2);System.out.println(remove); //bbbSystem.out.println(list); //[fff, aaa, ccc, ddd]// E set(int index,E element) 修改指定索引處的元素,將被修改處的原元素返回System.out.println("_____________________");String set=list.set(0,"hahaha");System.out.println(set); //fffSystem.out.println(list); //[hahaha, aaa, ccc, ddd]System.out.println("_________________");//E get(int index) 返回指定索引處的元素String get=list.get(0);System.out.println(get); //hahaha}
}
List集合遍歷方式:
示例代碼:
import java.util.*;public class Main {public static void main(String[] args){//List系列集合遍歷方法List<String> list=new ArrayList<>();list.add("aaa");list.add("bbb");list.add("ccc");list.add("ddd");System.out.println(list); //[aaa, bbb, ccc, ddd]System.out.println("__________________________");//1、迭代器遍歷//創(chuàng)建迭代器對象Iterator<String> it=list.iterator();System.out.print("迭代器遍歷: ");while(it.hasNext()){String str=it.next();System.out.print(str+" ");}System.out.println();System.out.println("________________");//2、增強for遍歷System.out.print("增強for遍歷:");for (String s : list) {System.out.print(s+" ");}System.out.println();System.out.println("______________________");//3、Lambda表達式遍歷System.out.print("Lambda表達式遍歷:");list.forEach(s-> System.out.print(s+" "));System.out.println();System.out.println("___________________");//4、普通for循環(huán)遍歷System.out.print("普通for循環(huán)遍歷:");for(int i=0;i<list.size();i++){System.out.print(list.get(i)+" ");}System.out.println();System.out.println("_________________________");//5、列表迭代器遍歷//創(chuàng)建列表迭代器對象//比迭代器多了一個功能: 能夠在遍歷的同時添加元素(之前只能用迭代器的remove方法刪除元素)ListIterator<String> lit=list.listIterator();System.out.print("列表迭代器遍歷: ");while(lit.hasNext()){String str=lit.next();if("ddd".equals(str)){lit.add("qqq");}System.out.print(str+" "); //aaa bbb ccc ddd }System.out.println();System.out.println(list); //[aaa, bbb, ccc, ddd, qqq]}
}