關(guān)于集合的一些學(xué)習(xí)時(shí)候的代碼:
1.集合的共性方法————Collection
2.Collection的迭代器
3.List的特有方法
4.List的特有迭代器
1.集合的共性方法————Collection
privatestaticvoid demo01(){
? ? ? ? /*? ? ? ? *? ? 創(chuàng)建一個(gè)集合對(duì)象
? ? ? ? ? ? 集合只能保存對(duì)象類型,基本數(shù)據(jù)類型無(wú)法使用集合保存,如果需要保存基本數(shù)據(jù)類型
? ? ? ? ? ? 必須使用其包裝類型存儲(chǔ) ->也就是用Integer而非int
? ? ? ? */? ? ? ? Collection coll =newArrayList<>();
? ? ? ? /*? ? ? ? * 添加
? ? ? ? */? ? ? ? coll.add(45);//會(huì)先將45轉(zhuǎn)換為integer類型,然后再存入集合中coll.add(35);
? ? ? ? Collection coll2 =newArrayList<>();
? ? ? ? coll2.add(77);
? ? ? ? coll2.add(88);
? ? ? ? coll2.add(45);
? ? ? ? coll2.addAll(coll);//addAll是將同一個(gè)類型和集合整個(gè)加在后面,不會(huì)對(duì)重復(fù)的元素刪除? ? ? ? System.out.println(coll2);
? ? ? ? //集合可以直接打印輸出System.out.println(coll);//[45, 35]/*? ? ? ? * 移除
? ? ? ? *///coll.clear();移除所有元素
? ? ? ? //coll.remove(45);//remove的是object,這里寫入45,會(huì)先將45裝箱成integer類型,對(duì)比移除
? ? ? ? //? ? ->只會(huì)從前往后移除第一個(gè)元素,后面同名的不會(huì)移除
? ? ? ? //coll2.removeAll(coll);//會(huì)將coll中所有元素刪除,同時(shí),如果有coll2本身與coll相同的元素,也會(huì)一起刪除/*? ? ? ? * 獲取
? ? ? ? *///獲取集合長(zhǎng)度的方法? ? ? ? System.out.println(coll.size());
? ? ? ? /*? ? ? ? * 判斷
? ? ? ? */? ? ? ? System.out.println(coll.isEmpty());//判斷是否為空System.out.println(coll.contains(45));//判斷是否有45這個(gè)元素,返回bool值System.out.println(coll2.containsAll(coll));//coll2是否包含coll的所有元素/*? ? ? ? *? ? 求交集(兩個(gè)集合中都有的元素)
? ? ? ? * (謹(jǐn)慎!會(huì)改變調(diào)用函數(shù)的集合數(shù)據(jù),用來(lái)存相同的數(shù)據(jù))
? ? ? ? */? ? ? ? System.out.println(coll2.retainAll(coll));//coll2保留所有和coll相同的元素
? ? ? ? //? ? ->如果沒(méi)有相同值,則會(huì)將coll2置為空集System.out.println(coll2);//[45, 45, 35]/*? ? ? ? * 集合與數(shù)組的轉(zhuǎn)換
? ? ? ? */? ? ? ? Object[] arr = coll2.toArray();//如果轉(zhuǎn)成object類型,無(wú)法使用一些方法(除非進(jìn)行強(qiáng)轉(zhuǎn))? ?
? ? ? ? //也就是說(shuō)? ? arr.toString是沒(méi)有的,但是arr2.toString是有的
? ? ? ? //指定類型轉(zhuǎn)換為數(shù)組
? ? ? ? //傳遞的參數(shù)數(shù)組對(duì)象,如果長(zhǎng)度小于集合元素個(gè)數(shù),會(huì)默認(rèn)按照元素個(gè)數(shù)來(lái)創(chuàng)建結(jié)果數(shù)組
? ? ? ? //如果給的參數(shù)數(shù)組的長(zhǎng)度大于集合元素個(gè)數(shù),沒(méi)有對(duì)應(yīng)元素的數(shù)組空間會(huì)使用null來(lái)填充Integer[] arr2 = coll2.toArray(newInteger[1]);
? ? ? ? for(inti = 0; i < arr2.length; i++) {
? ? ? ? ? ? System.out.println(arr2[i]);
? ? ? ? }
? ? }
2.Collection的迭代器
privatestaticvoid demo02(){
? ? ? ? Collection coll =newArrayList<>();
? ? ? ? coll.add("d1");
? ? ? ? coll.add("d2");
? ? ? ? coll.add("d3");
? ? ? ? coll.add("d4");
? ? ? ? System.out.println(coll);///*? ? ? ? * 獲取每一個(gè)元素對(duì)象,需要使用專門的迭代器對(duì)象
? ? ? ? */? ? ? ? Iterator it = coll.iterator();//新建coll的迭代器對(duì)象//? ? ? ? System.out.println(it.next());一個(gè)next會(huì)輸出下一個(gè)值,并不會(huì)一直輸出一個(gè)值? ? ? ? System.out.println(it.next());
? ? ? ? System.out.println(it.next());
? ? ? ? //通過(guò)迭代器對(duì)象的方法hasnext來(lái)判斷是否還有未獲取的元素while(it.hasNext()){
? ? ? ? ? ? //通過(guò)迭代器的next方法來(lái)獲取對(duì)應(yīng)元素對(duì)象
? ? ? ? ? ? //String name = it.next();? ? ? ? ? ?
? ? ? ? ? ? System.out.println("這里是循環(huán)里");
? ? ? ? ? ? System.out.println(it.next());
? ? ? ? }
? ? ? ? //迭代元素的優(yōu)化,官方的建議寫法/*? ? ? ? for (Iterator it2 = coll.iterator(); it2.hasNext();) {
? ? ? ? ? ? String string = (String) it2.next();
? ? ? ? ? ? System.out.println(string);? ? ? ? ? ? ? ? 優(yōu)點(diǎn)是it2用完就回收
? ? ? ? }*//*? ? ? ? * java為集合專門設(shè)計(jì)了一個(gè)遍歷的循環(huán)語(yǔ)句 增強(qiáng)for循環(huán)(foreach)
? ? ? ? */for (String string : coll) {
? ? ? ? }
? ? }
3.List的特有方法
privatestaticvoid demo03(){
? ? ? ? List list =newArrayList<>();
? ? ? ? /*? ? ? ? * 添加
? ? ? ? */? ? ? ? list.add("這是0");
? ? ? ? list.add("這會(huì)是1嗎");
? ? ? ? list.add(1, "它想插到位置1");//首先要有0號(hào)元素,之后便可以自由輸入位置插入,不然就會(huì)按照順序插入? ? ? ? System.out.println(list);
? ? ? ? //list.addAll(index, c);將另一個(gè)集合放入指定位置中/*? ? ? ? * 移除
? ? ? ? *///list.remove(1);//有返回值,返回的是被刪除的那個(gè)值
? ? ? ? //System.out.println(list);//System.out.println(list.remove(1));會(huì)打印出被移除的1號(hào)元素/*? ? ? ? * 獲取
? ? ? ? */? ? ? ? System.out.println(list.get(0));//獲取,但是不會(huì)移除System.out.println(list.indexOf("這會(huì)是1嗎"));//根據(jù)內(nèi)容找到下標(biāo),沒(méi)有就返回-1/*? ? ? ? * 修改
? ? ? ? */? ? ? ? list.set(0, "我把0號(hào)改了");//不是修改的對(duì)象,是修改的指針? ? ? ? System.out.println(list);
? ? ? ? /*? ? ? ? * 獲取子集合
? ? ? ? */? ? ? ? System.out.println(list.subList(1,2));//從1開(kāi)始獲取,在2之前結(jié)束->也就是不包含2? ? ? ? ? ?
? ? }
4.List的特有迭代器
privatestaticvoid demo04(){
? ? ? ? List list =newArrayList<>();
? ? ? ? list.add("這是0");
? ? ? ? list.add("這會(huì)是1嗎");
? ? ? ? list.add(1, "它想插到位置1");
? ? ? ? /*? ? ? ? * 默認(rèn)迭代器
? ? ? ? *///? ? ? ? for (Iterator iterator = list.iterator(); iterator.hasNext();) {//? ? ? ? ? ? String string = (String) iterator.next();//? ? ? ? ? ? System.out.println(string);//? ? ? ? }/*? ? ? ? * 使用特有的列表迭代器
? ? ? ? */for(ListIterator it = list.listIterator();it.hasNext();){
? ? ? ? ? ? String str = it.next();
? ? ? ? ? ? System.out.println(str);
? ? ? ? ? ? if(str.equals("這是0")){
? ? ? ? ? ? ? ? //it.set("HAHA");
? ? ? ? ? ? ? ? //it.remove();it.add("HAHA");//[這是0, HAHA, 它想插到位置1, 這會(huì)是1嗎]? ? ? ? ? ? }
? ? ? ? }
? ? ? ? System.out.println(list);
? ? ? ? //反序迭代
? ? ? ? //迭代器對(duì)象獲取的默認(rèn)方式是設(shè)置的從下標(biāo)為0的位置開(kāi)始for(ListIterator it = list.listIterator(list.size()); it.hasPrevious();) {
? ? ? ? ? ? String str = it.previous();//不需要list.size()-1是因?yàn)閔asprevious是找前一位是否有元素? ? ? ? ? ? System.out.println(str);
? ? ? ? }
? ? }