集合框架概述
數(shù)組和集合的區(qū)別
長度
數(shù)組的長度固定不變的
集合長度是可以根據(jù)實(shí)際需要改變
內(nèi)容
數(shù)組存儲的是同一種類型的元素
集合可以存儲不同類型的元素
數(shù)據(jù)類型
數(shù)組可以存儲基本數(shù)據(jù)類型突诬,也可以存儲引用數(shù)據(jù)類型
集合只能存儲引用類型
注意:雖然集合不能存儲基本數(shù)據(jù)類型渣刷,但是可以存儲基本數(shù)據(jù)類型的包裝類類型
集合框架體系圖
collection
集合層次結(jié)構(gòu) 中的根接口席爽。Collection 表示一組對象绸栅,這些對象也稱為 collection 的元素瓣铣。一些 collection 允許有重復(fù)的元素喳张,而另一些則不允許尖奔。
一些 collection 是有序的茬底,而另一些則是無序的沪悲。JDK 不提供此接口的任何直接 實(shí)現(xiàn):它提供更具體的子接口(如 Set 和 List)實(shí)現(xiàn)。
集合的設(shè)計(jì)
*? ? ? ? ?因?yàn)榧嫌泻芏?增刪查改的方法阱表,而且集合是一套框架殿如,既然是框架那么每一種集合處理增加刪除修改遍歷的方式不一樣
* ?Collection的特點(diǎn)
* ? ? ? ? ?1.部分集合是有序的,部分集合是無序的最爬,這里的有序指的是存儲有序
* ? ? ? ? ?2.部分集合是可排序的涉馁,部分集合是不可排序
* ? ? ? ? ?3.部分集合是可重復(fù)的,部分集合是不可重復(fù)爱致,唯一的
* ?
* ?那么既然每一個集合的特點(diǎn)不一樣烤送,那么就取決于所有子類的實(shí)現(xiàn)方式不一樣,但是我們知道糠悯,既然是集合就應(yīng)該具備集合的特點(diǎn):
* ? ? ? ? ?1.長度可變的
*? ? ? ? ? ? ? ? ?2.能夠存儲任意的引用類型
*? ? ? ? ? ? ? ? ?3.具備很多對對象進(jìn)行增刪查改的方法
*? ? ? ? ? ? ? ? ?4.集合也能夠存儲基本類型的包裝類類型帮坚,更加擴(kuò)展了int的一些功能
* 但是實(shí)現(xiàn)方式不一樣
*? ? ? ? ? ? ? ? ?實(shí)現(xiàn)方式不一樣取決于底層的數(shù)據(jù)結(jié)構(gòu)不一樣
* 數(shù)據(jù)結(jié)構(gòu): 數(shù)據(jù)的存儲方式
* 算法: 遞歸 冒泡 選擇
* 學(xué)習(xí)集合就一定要學(xué)習(xí)集合相關(guān)的數(shù)據(jù)結(jié)構(gòu)
*? ? ? ? ?集合涉及的數(shù)據(jù)結(jié)構(gòu): 棧 , 隊(duì)列, 鏈表, 數(shù)組, 哈希表 , 二叉樹
*
* 1.添加功能
*? ? ? ? ?boolean add(Object obj)
*? ? ? ? ?boolean addAll(Collection c)
* 2.刪除功能
*? ? ? ? ?void clear()
* ?boolean remove(Object o)
* ?boolean removeAll(Collection<?> c)
* 3.修改功能
* 4.遍歷功能
* ?Object[] toArray()
*? ? ? ? ?Iterator<E> iterator()
* ?<T> T[] toArray(T[] a)
* 5.判斷功能
*? ? ? ? ?boolean contains(Object o)
* ?boolean containsAll(Collection<?> c)
* ?boolean isEmpty()
* 6.其他功能
* ?boolean retainAll(Collection<?> c)
* 7.獲取集合長度的功能
* ?int size()
*? ? ? ? ?
*/
public class CollectionDemo02 {
? ? ? ?public static void main(String[] args) {
? ? ? ? ? ? ? ?Collection c = new ArrayList();
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?// boolean add(Object obj)
? ? ? ? ? ? ? ?c.add("張三");
? ? ? ? ? ? ? ?c.add("李四");
? ? ? ? ? ? ? ?c.add("王五");
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?// boolean addAll(Collection c)
? ? ? ? ? ? ? ?Collection c1 = new ArrayList();
? ? ? ? ? ? ? ?c1.add("關(guān)羽");
? ? ? ? ? ? ? ?c1.add("趙云");
? ? ? ? ? ? ? ?c1.add("呂布");
? ? ? ? ? ? ? ?c.addAll(c1);
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?System.out.println(c1);
? ? ? ? ? ? ? ?// void clear()
? ? ? ? ? ? ? ?System.out.println("--------------");
// ? ? ? ? ? ? ? ?c.clear();
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?// boolean remove(Object o)
? ? ? ? ? ? ? ?System.out.println("remove:" + c.remove("張三"));
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?// boolean removeAll(Collection<?> c)
// ? ? ? ? ? ? ? ?System.out.println("remove:" + c.removeAll(c1));
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?System.out.println("------------------");
? ? ? ? ? ? ? ?System.out.println("boolean contains(Object o): " + c.contains(""));
? ? ? ? ? ? ? ?System.out.println("abc".contains(""));
? ? ? ? ? ? ? ?// boolean containsAll(Collection<?> c)
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?Collection c2 = new ArrayList();
? ? ? ? ? ? ? ?c2.add("呂布");
? ? ? ? ? ? ? ?System.out.println("boolean containsAll(Collection<?> c) :" + c.containsAll(new ArrayList<>()));
? ? ? ? ? ? ? ?System.out.println("boolean containsAll(Collection<?> c) :" + c.containsAll(c2));
? ? ? ? ? ? ? ?// c: [李四, 王五, 關(guān)羽, 趙云, 呂布] ? new ArrayList<>(): []
// ? ? ? ? ? ? ? ?c.clear();
? ? ? ? ? ? ? ?// boolean isEmpty()
// ? ? ? ? ? ? ? ?System.out.println("boolean isEmpty() :" +c.isEmpty());
? ? ? ? ? ? ? ?// boolean retainAll(Collection<?> c)
? ? ? ? ? ? ? ?System.out.println(c); // c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四,曹操] = c:[李四]
? ? ? ? ? ? ? ?/*
? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四互艾,曹操] = c:[李四]
? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [李四123试和,曹操] = c:[]
? ? ? ? ? ? ? ? * c:[李四, 王五, 關(guān)羽, 趙云, 呂布] ?交集 [張三, 李四, 王五, 曹操, 關(guān)羽, 趙云, 呂布] = c:[李四, 王五, 關(guān)羽, 趙云, 呂布]
? ? ? ? ? ? ? ? */
? ? ? ? ? ? ? ?Collection c3 = new ArrayList<>();
? ? ? ? ? ? ? ?c3.add("張三");
? ? ? ? ? ? ? ?c3.add("李四");
? ? ? ? ? ? ? ?c3.add("王五");
? ? ? ? ? ? ? ?c3.add("曹操");
? ? ? ? ? ? ? ?c3.add("關(guān)羽");
? ? ? ? ? ? ? ?c3.add("趙云");
? ? ? ? ? ? ? ?c3.add("呂布");
? ? ? ? ? ? ? ?System.out.println(c3);
// ? ? ? ? ? ? ? ?System.out.println("boolean retainAll(Collection<?> c) " + c.retainAll(c3));
// ? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?System.out.println("boolean retainAll(Collection<?> c) " + c.retainAll(c3));
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?// 求交集,返回的結(jié)果是觀察原集合是否發(fā)生改變 改變了返回true纫普,沒改變返回false
? ? ? ? ? ? ? ?System.out.println(c.size());
? ? ? ?}
}
/*
* 4.遍歷功能
* ?Object[] toArray()
*? ? ? ? ?Iterator<E> iterator()
*? ? ? ? ? ? ? ? ?boolean hasNext(); 判斷是否有下一個元素
*? ? ? ? ? ? ? ? ?E next(); 獲取下一個元素阅悍,并且指針指向下一個元素的位置
*
* java.util.NoSuchElementException
* 異常名稱: 沒有下一個元素異常
* 產(chǎn)生原因: 迭代器遍歷的時(shí)候沒有下一個元素了
* 解決辦法:在迭代器迭代之前做判斷
* ?<T> T[] toArray(T[] a)
*/
public class CollectionDemo03 {
? ? ? ?public static void main(String[] args) {
? ? ? ? ? ? ? ?Collection c = new ArrayList();
? ? ? ? ? ? ? ?c.add("李逵");
? ? ? ? ? ? ? ?c.add("武松");
? ? ? ? ? ? ? ?c.add("武大郎");
? ? ? ? ? ? ? ?System.out.println(c);
? ? ? ? ? ? ? ?Object[] arrs = c.toArray();
? ? ? ? ? ? ? ?for (int i = 0; i < arrs.length; i++) {
? ? ? ? ? ? ? ? ? ? ? ?System.out.println(arrs[i]);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?System.out.println(arrs[1]);
? ? ? ? ? ? ? ?System.out.println("-------------------------");
? ? ? ? ? ? ? ?// 獲取和集合有關(guān)的迭代器對象
// ? ? ? ? ? ? ? ?Iterator it = c.iterator();
// ? ? ? ? ? ? ? ?if (it.hasNext()) {
// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ? ? ?if (it.hasNext()) {
// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ? ? ?if (it.hasNext()) {
// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ? ? ?if (it.hasNext()) {
// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
// ? ? ? ? ? ? ? ?}
// ? ? ? ? ? ? ? ?
// ? ? ? ? ? ? ? ?Iterator it = c.iterator();
// ? ? ? ? ? ? ? ?while(it.hasNext()) {
// ? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
// ? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
// ? ? ? ? ? ? ? ?}
iterator接口
對 collection 進(jìn)行迭代的迭代器。迭代器取代了 Java Collections Framework 中的 Enumeration,迭代器依賴于集合而存在节视。
boolean hasNext()
? ? ? ?如果仍有元素可以迭代拳锚,則返回 true。
E next()
? ? ? ?返回迭代的下一個元素寻行。
注意:
? ? ? ?拋出: NoSuchElementException - 沒有元素可以迭代霍掺。
void remove()
? ? ? ?返回迭代的當(dāng)前元素。
迭代器原理
? ? ? ? ? ? ? ?for(Iterator it = c.iterator();it.hasNext();) {
? ? ? ? ? ? ? ? ? ? ? ?Object oj = it.next();
? ? ? ? ? ? ? ? ? ? ? ?System.out.println(oj);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?System.out.println("-------------------");
? ? ? ? ? ? ? ?// foreach遍歷
? ? ? ? ? ? ? ?/*
? ? ? ? ? ? ? ? * foreach就是用來遍歷集合或者數(shù)組的
? ? ? ? ? ? ? ? * 格式:
? ? ? ? ? ? ? ? *? ? ? ? ?for(元素類型 元素 : 集合或者數(shù)組){
? ? ? ? ? ? ? ? *? ? ? ? ? ? ? ? ?對元素進(jìn)行響應(yīng)的操作
? ? ? ? ? ? ? ? * ?}
? ? ? ? ? ? ? ? */
? ? ? ? ? ? ? ?for (Object obj : arrs) {
? ? ? ? ? ? ? ? ? ? ? ?System.out.println(obj);
? ? ? ? ? ? ? ?}
? ? ? ? ? ? ? ?int[] arr = new int[5];
? ? ? ? ? ? ? ?arr[0] = 25;
? ? ? ? ? ? ? ?arr[1] = 235;
? ? ? ? ? ? ? ?for (int i : arr) {
? ? ? ? ? ? ? ? ? ? ? ?System.out.println(i);
? ? ? ? ? ? ? ?}
? ? ? ?}
}