總結(jié)
今天的學(xué)習(xí)是集合概念以及ArrayList用法學(xué)習(xí)蝗蛙,話不多說(shuō)初家,開(kāi)始
集合概念
/**
- String— StringBuffer & StringBuilder
- Fikr:文件的創(chuàng)建 目錄創(chuàng)建刪除
- 文件的輸入和輸出:OutputStream InputStream
FileOutputStream FileInputStream
FileWriter FilReader
ObjectOutputStream ObjectInputStream
BufferedOutputStream BufferedInputStream
RandomAccessFile mode:rw
close()
- 數(shù)組:存儲(chǔ)多個(gè)對(duì)象
- int[] score={1,2,3};
- int[] score=new int[10];
- 弊端:數(shù)組長(zhǎng)度不可變 內(nèi)容可變
- 實(shí)際開(kāi)發(fā)中需要一個(gè)能夠隨時(shí)改變的數(shù)據(jù)——>集合Collection
- Collection抽象接口 定義集合的相關(guān)操作
- --List接口 列表 數(shù)組 特點(diǎn) :有序嘉涌、可重復(fù)
\--ArrayList
\--LinkedArrayList
- \Set接口 “集合概念” 特點(diǎn):無(wú)需 不重復(fù)
- Map接口 映射關(guān)系 Key-Value 鍵值對(duì) 鍵不可能相同 值可以相同
- --HashSet
- 語(yǔ)文98
- 英語(yǔ)98
- 集合的元素個(gè)數(shù)是可變的
- 添加元素
- add
- addAll
*/
開(kāi)始主題————Array List用法學(xué)習(xí)
1黄绩、概念:ArrayList饮六,可以看做是動(dòng)態(tài)的數(shù)組其垄。Add、Clear卤橄、Contains绿满、Count、Remove窟扑、RemoveAt棒口、ToArray(轉(zhuǎn)換,再?zèng)]關(guān)系)辜膝、索引器无牵。
-
1,首先是泛型學(xué)習(xí)
泛型
用ArrayList的麻煩的地方:數(shù)據(jù)放進(jìn)去就不知道是什么類(lèi)型的了厂抖;不能防止非法類(lèi)型數(shù)據(jù)的放入茎毁;將ArrayList返回給其他函數(shù),會(huì)令調(diào)用者很困惑。要區(qū)分變量七蜘、返回值類(lèi)型和實(shí)際對(duì)象類(lèi)型的區(qū)別谭溉。IntArrayList,StringArrayList又沒(méi)完沒(méi)了。
我們需要泛型的ArrayList橡卤,所以就有了List<T>扮念。List<int> 除此之外并無(wú)不同,<int>表示List中放的數(shù)據(jù)類(lèi)型是int類(lèi)型的碧库,因?yàn)橛新暶黝?lèi)型時(shí)的約定柜与,因此所有方法的參數(shù)、返回值都是確定類(lèi)型的了嵌灰。
案例:
(1)把分揀奇偶數(shù)的程序用泛型實(shí)現(xiàn)弄匕。分析算法復(fù)雜度。
(2)從一個(gè)整數(shù)的ArrayList沽瞭、List<int>中取出最大數(shù)迁匠。別用max方法。
1驹溃、List<int> 實(shí)現(xiàn)了IEnumerable<int>(泛型版本的IEnumerable)城丧、ICollection<int> (泛型版本的ICollection) 。
2豌鹤、所有的List<T>所有的方法也都是泛型的芙贫,泛型的集合提供的方法更多,Max傍药、Min磺平、Sort等。
-
2.其次是add等各種用法介紹
(1)ArrayList有一個(gè)非常重要的方法Add拐辽,作用是把一堆東西放到動(dòng)態(tài)數(shù)組里拣挪。
(2)Clear是清空這個(gè)ArrayList。
(3)Count是計(jì)算ArrayList的長(zhǎng)度俱诸。
(4)Remove是移除ArrayList中的某個(gè)元素菠劝,Remove后面的括號(hào)里寫(xiě)這個(gè)元素本身。
(5)RemoveAt是移除ArrayList中的某個(gè)元素睁搭,根據(jù)下標(biāo)來(lái)移除赶诊,剩余的元素依次往前替補(bǔ)。例如移除掉第一個(gè)园骆,那么原來(lái)的第二個(gè)元素就變成了第一個(gè)元素舔痪,原來(lái)的第三個(gè)變成第二個(gè)。
(6)Contains是判斷指定的元素是否在ArrayList中锌唾,返回值是一個(gè)bool類(lèi)
下面是部分示例代碼
public class myclass {
public static void main(String[] args) {
//Collection 接口方法
Collection<String> t1 = new ArrayList<>();
t1.add("jack");
t1.add("Marry");
System.out.println(t1);
//刪除一個(gè)對(duì)象
t1.remove("jack");
System.out.println(t1);
//判斷是否包含一個(gè)元素
if (t1.contains("Marry")) {
System.out.println("有");
} else {
System.out.println("沒(méi)有");
}
Collection<String> t2 = new ArrayList<>();
t2.add("Marry");
t2.add("jack");
if (t1.equals(t2)) {
System.out.println("集合相同");
} else {
System.out.println("集合不相同");
}
//清空
t1.clear();
System.out.println(t1);
//集合的例遍
//1.使用Iterator來(lái)例遍
//hasNext 判斷是否有例遍
//has 獲取下一個(gè)對(duì)象
//remove 殺出當(dāng)前例遍后對(duì)象
System.out.println("_______________");
// Iterator iterator = t2.iterator();
// while (iterator.hasNext()) ;
// {
// System.out.println(iterator.next());
// }
//2.for each
// for(String )
ArrayList<Integer> nums = new ArrayList<>();
nums.add(1);
nums.add(2);
nums.add(3);
nums.add(4);
//Lambda表達(dá)式
nums.removeIf(new Predicate<Integer>() {
@Override
public boolean test(Integer obj) {
return obj % 2 == 0;
}
});
System.out.println(nums);
//for 快速循環(huán)
for(Integer obj: nums){
if(obj%2==0){
nums.remove(obj);
}
}
//1.
ArrayClass ac=new ArrayClass();
int[] num={1,2,3,4,5,6};
PXDClass pc = new PXDClass();
ac.test(num, pc);
//2.使用匿名類(lèi)
// 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);
// }
// });
//3. 使用Lambda表達(dá)式
//如果參數(shù)是一個(gè)接口類(lèi)對(duì)象锄码,且接口里面只有一個(gè)方法
//可以省略方法名 把這個(gè)方法作為參數(shù)
// ArrayClass ac = new ArrayClass();
// int[] num = {1,2,3,4,5,6};
// ac.test(num, (int element) -> {
// System.out.println(element);
// });
//如果只有一個(gè)參數(shù) 參數(shù)類(lèi)型可以省略
ac.test(num,element-> System.out.println(element));
}
//閉包 enclusure 把函數(shù)作為一個(gè)方法的參數(shù)
static class ArrayClass{
public void test(int[] target, Show s){
for (int element: target){
s.customShow(element);
}
}
}
//必須是接口 這個(gè)接口里面只有一個(gè)方法
interface Show{
void customShow(int element);
}
static class PXDClass implements Show{
@Override
public void customShow(int element) {
System.out.println(element);
}
}
}
總結(jié)
今天的學(xué)習(xí)不是很透徹夺英,還得繼續(xù)練習(xí)∽檀罚總之痛悯,Android學(xué)習(xí)也馬上正式開(kāi)始了。加油T孛取!