什么是集合
集合:就是用來存放數(shù)據(jù)的一個(gè)容器
數(shù)組的不足:
1.長(zhǎng)度是固定的,不能再去添加元素
Java提供集合類
它的長(zhǎng)度是可以改變的
能存儲(chǔ)任意的對(duì)象
長(zhǎng)度是隨著你的元素增加而增加的
數(shù)組和集合的區(qū)別?
1.數(shù)組能存基本數(shù)據(jù)類型,和引用類型
2.集合當(dāng)中只能存放引用數(shù)據(jù)類型,直接放,也會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
集合當(dāng)中只能存放對(duì)象
3.數(shù)組長(zhǎng)度是固定的,不能再去增長(zhǎng)
集合長(zhǎng)度是可以改變,根據(jù)元素的增長(zhǎng)而增加
什么時(shí)候使用數(shù)組,什么時(shí)候使用集合?
1.如果元素個(gè)數(shù)是固定,推薦使用數(shù)組
2.如果元素不是固定,推薦使用集合
集合類繼承體系
Collection添加元素
1.集合當(dāng)中存的都是對(duì)象,集合可以當(dāng)成是數(shù)組,不斷往后增加元素
2.Collection是一個(gè)接口類型,需要一個(gè)實(shí)現(xiàn)類進(jìn)行創(chuàng)建繼承
3.添加基本數(shù)據(jù)類型,會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
4.List當(dāng)中可以添加重復(fù)的元素,add方法添加元素,它的返回值都是true
所以在今后開發(fā)當(dāng)中,不會(huì)接收結(jié)果
因?yàn)樵趕et當(dāng)中是不能添加重復(fù)元素的,如果添加就給你一個(gè)false
5.ArrayList當(dāng)中覆蓋了toString的方法,直接可以打印結(jié)果
package 面向?qū)ο?集合;
import java.util.ArrayList;
import java.util.Collection;
class Student{
String name;
String age;
@Override
public String toString() {
return "Student [name=" + name + ", age=" + age + "]";
}
}
public class CollectionDemo {
public static void main(String[] args) {
多態(tài)寫法,面向接口編程 運(yùn)行時(shí),表現(xiàn)出來的是子類特征
集合當(dāng)中存的都是對(duì)象
Collection c = new ArrayList();//可以當(dāng)成是數(shù)組,不斷往后增加元素
boolean b1 = c.add("abc");
boolean b2 = c.add(10);//會(huì)幫你自動(dòng)裝箱(把基本數(shù)據(jù)類型轉(zhuǎn)成對(duì)象)
boolean b3 = c.add(true);
//boolean b2 = c.add(Integer.valueOf(10));
//boolean b3 = c.add(Boolean.valueOf(true));
Student s = new Student();
s.age="17";
s.name="zs";
boolean b4 = c.add(s);
boolean b5 = c.add("abc");//List當(dāng)中可以添加重復(fù)的元素
//List當(dāng)中的add返回值都是true
//所以在今后開發(fā)當(dāng)中,不會(huì)接收結(jié)果
//因?yàn)樵趕et當(dāng)中是不能添加重復(fù)元素的,如果添加就給你一個(gè)false
System.out.println(b1);
System.out.println(b2);
System.out.println(b3);
System.out.println(b4);
System.out.println(b5);
System.out.println(c);//[abc, 10, true, 面向?qū)ο?集合.Student@15db9742, abc]
//ArrayList當(dāng)中覆蓋了toString的方法,直接可以打印結(jié)果
//[abc, 10, true, Student [name=zs, age=17], abc] student類當(dāng)中覆蓋了toString的這個(gè)方法
}
}
Collection常用方法
@SuppressWarnings({ "rawtypes", "unchecked" })//掃黃,main方法當(dāng)中不再出現(xiàn)這些警告
Collection集合方法
public static void main(String[] args) {
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
System.out.println(c2);//[a, b, c]
可以從集合當(dāng)中移除指定的元素
c2.remove("a");
System.out.println(c2);//[b, c]
判斷一個(gè)集合是否為空,true,false
System.out.println(c2.isEmpty());//false
獲取集合當(dāng)中的長(zhǎng)度(有幾個(gè)元素)
System.out.println(c2.size());//size:2 與數(shù)組的length一樣
清空集合當(dāng)中的所有內(nèi)容
c2.clear();
System.out.println(c2);//[]
}
Collection集合轉(zhuǎn)普通數(shù)組
集合的遍歷:從集合當(dāng)中一個(gè)一個(gè)取
元素
package 面向?qū)ο?集合;
import java.util.ArrayList;
import java.util.Collection;
class Dog {
private String name;
public String getName() {
return name;
}
Dog(String name) {
this.name = name;
}
}
public class CollectionDemo {
@SuppressWarnings("rawtypes")//掃黃
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
System.out.println(c);
遍歷數(shù)組
先把集合轉(zhuǎn)成數(shù)組, 使用toArray() 返回Object類型
獲取數(shù)組中的每一個(gè)元素
Object[] arr = c.toArray();
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
Collection c2 = new ArrayList();
c2.add(new Dog("wc"));//添加狗對(duì)象
c2.add(new Dog("wc2"));
c2.add(new Dog("wc3"));
并不能使用get方法 arr2[i].getName()
因?yàn)閿?shù)組當(dāng)中都是Object
Object[] arr2 = c2.toArray();
并不能使用get方法 arr2[i].getName()
因?yàn)閿?shù)組當(dāng)中都是Object
自動(dòng)把數(shù)組當(dāng)中的元素向上轉(zhuǎn)型了,向根類轉(zhuǎn)型了,轉(zhuǎn)為萬物之主Object
Object當(dāng)中沒有辦法去調(diào)用具體類型當(dāng)中的方法
for (int i = 0; i < arr2.length; i++) {
Dog d = (Dog)arr2[i]; 向下轉(zhuǎn)型
System.out.println(d.getName());
}
}
}
Collection集合帶all常用方法
eclipse快捷鍵 Alt+Shift+R
Collection c1 = new ArrayList();
c1.add("a");
c1.add("b");
c1.add("c");
c1.add("d");
Collection c2 = new ArrayList();
c2.add("a");
c2.add("b");
c2.add("c");
c2.add("d");
System.out.println(c1);[a, b, c, d]
把c2的所有元素合并到c1當(dāng)中
c1.addAll(c2);
//c1.add(c2);是添加對(duì)象[a, b, c, d, [a, b, c, d]]
System.out.println(c1);//[a, b, c, d, a, b, c, d]
Collection c3 = new ArrayList();
c3.add("a");
c3.add("b");
從c1當(dāng)中刪除兩個(gè)集合的交集removeAll
c1.removeAll(c3);
System.out.println(c1);//[a, b, c, d, a, b, c, d] ----> [c, d, c, d]
Collection c4 = new ArrayList();
c4.add("c");
c4.add("d");
判斷調(diào)用的集合是否全部包含傳入的集合containsAll
boolean res = c1.containsAll(c4);
System.out.println(res);//true
Collection c5 = new ArrayList();
c5.add("c");
c5.add("d");
取交集 retainAll 把交集的結(jié)果賦值給調(diào)用者 , 有返回值boolean
如果調(diào)用的集合改變了,就返回true,c1沒改變就返回false
boolean b = c1.retainAll(c5);
System.out.println(c1);//[c, d, c, d]
System.out.println(b);//false
Collection迭代器遍歷元素
迭代器(iterator)
集合當(dāng)中的元素直接放到迭代器當(dāng)中,迭代器當(dāng)中有方法直接取出元素
@SuppressWarnings({ "unchecked", "rawtypes" })
public static void main(String[] args) {
Collection c = new ArrayList();
c.add("a");
c.add("b");
c.add("c");
//數(shù)組遍歷
Object[] o = c.toArray();
for (Object object : o) {
System.out.println(object);
}
迭代器遍歷
Iterator it = c.iterator();// 放到Iterator內(nèi)容會(huì)自動(dòng)提升,Object
獲取迭代器當(dāng)中的內(nèi)容
Object obj = it.next();// 把當(dāng)前游標(biāo)的內(nèi)容取出來,當(dāng)前的游標(biāo)往后走一位
System.out.println(obj);// a
Object obj2 = it.next();
System.out.println(obj2);// b
Object obj3 = it.next();
System.out.println(obj3);// c
判斷迭代器當(dāng)中是否還有元素 如果有就返回true,沒有就返回false
boolean res = it.hasNext();
System.out.println(res);// 游標(biāo)到了盡頭沒有元素了,false
System.out.println("-------");
1.先判斷有沒有元素,然后再執(zhí)行下一步
while (it.hasNext()) {
2.如果有,取出元素
System.out.println(it.next());//把上面的代碼注釋掉,然后會(huì)輸出 a,b,c
}
}
Collection迭代器遍歷自定義對(duì)象
class Cat {
String name;
Cat(String name) {
this.name = name;
}
void show() {
System.out.println(this.name);
}
}
public class CollectionDemo1 {
public static void main(String[] args) {
在每一個(gè)實(shí)現(xiàn)類當(dāng)中都定義了自己的迭代方法
Collection c2 = new ArrayList();
c2.add(new Cat("mimi"));
c2.add(new Cat("mm"));
Iterator it2= c2.iterator();//迭代器遍歷,里面的對(duì)象都會(huì)自動(dòng)提升為Object類型
while(it2.hasNext()) {
Cat cat = (Cat)it2.next();//向下轉(zhuǎn)型
cat.show(); //mimi mm
}
}
}