【Java的集合框架- 26】
一、集合概述
1、对象用于封装特有数据,对象多了需要存储,如果对象的个数不确定,就是用集合存储
2、数组和集合类同是容器,有什么区别
数组也可以存储对象,但是长度是固定的,集合长度是可变的。
数组中可以存储基本数据类型,集合只能存储对象
3、集合类的特点
集合只能存储对象不可以存储基本数据类型,长度是可变的,集合可以存储不同类型的对象。
举例证明:
1)单一类型的数据用数组存储:
8 9 10 1 3 --> int[] data 存储
2)不同类型的数据可以用StringBuilder,StringBuffer存储,但是最终必须转换成字符串才能使用
"zhangsan" true 78 --> StringBuilder sb = new StringBuilder(); sb.append("张三"); sb.append(true);sb.append(78); sb.toString();
--->最终结果:“zhangsantrue78”,想取张三这个关键字就很难取出来 了
3)对象的存储可以用集合
new Person("李四",23) -->在不确定有多个对象的时候,就用集合存储
二、体系&共性功能
描述:集合容器因为内部的数据结构不同,有多重具体容器。不断的向上抽取,就形成了集合框架
1、框架的顶层Collection接口,包含的常用的方法:
1)增加:
boolean add(Object obj) -->增加一个对象
boolean addAll(Collection coll) -->增加一堆对象,也就是把一个集合增加进去
2)删除:
boolean remove(Object obj) -->删除一个对象
boolean remove(Collection coll) -->删除一堆对象
void clear() -->清空集合内的所有对象
3)判断:
boolean contains(Object obj) -->判断包含一个对象
boolean containsAll(Collection coll) -->判断包含一堆对象
boolean isEmpty() -->集合是否有元素
4)获取:
int size(); -->获取集合的长度
iterator();取出元素的方式:迭代器
5)其他:
boolean retainaAll(Collection coll) -->取交集
Object[] toArray() -->将集合转换成数组
package com.JavaStudy01; import java.util.ArrayList; import java.util.Collection; /** * @Author wufq * @Date 2020/7/29 17:42 */ public class CollectionDemo01 { public static void main(String[] args){ Collection coll = new ArrayList(); // show(coll); Collection c1 = new ArrayList(); Collection c2 = new ArrayList(); show(c1,c2); } private static void show(Collection c1, Collection c2) { //给c1赋值 c1.add("abc1"); c1.add("abc2"); c1.add("abc3"); c1.add("abc4"); //给c2赋值 c2.add("abc3"); c2.add("abc5"); c2.add("abc6"); System.out.println("c1:"+c1);//[abc1, abc2, abc3, abc4] System.out.println("c2:"+c2);//[abc3, abc5, abc6] //增加一个集合addAll c1.addAll(c2); System.out.println("addAll:"+c1);//[abc1, abc2, abc3, abc4, abc3, abc5, abc6] //删除全部-->将两个集合中相同的元素从removeAll集合中删除 c1.removeAll(c2); System.out.println("removeAll:"+c1);//[abc1, abc2, abc4] //包含 boolean b=c1.containsAll(c2); System.out.println("containsAll:"+b);//false //取交集 c1.retainAll(c2); System.out.println("retainAll:"+c1);//[abc3] } private static void show(Collection coll) { /* 单个方法 */ //增加 coll.add("abc1"); coll.add("abc2"); coll.add("abc2"); System.out.println(coll); //删除 coll.remove("abc1");//会改变集合的长度 System.out.println(coll); //清空 coll.clear(); System.out.println(coll); //获取 -->指获取集合里面的任意一个元素 System.out.println(coll.contains("abc2")); //获取长度 System.out.println(coll.size()); } }
三、迭代器使用
1、调用Collection里面的iterator()方法,是为了获取iterator的对象
Iterator it = new Collection().iterator();
2、Iterator<E>接口的三个方法
boolean hasNext() -->如果仍有元素迭代,返回true
E next() -->返回迭代的下一个元素
void remove() -->从迭代器指向的collection中移除迭代器返回的最后一个元素
每次调用next()方法后,只能调用一次该方法。即先调用的next()方法,然后才能调用此方法。
如果在调用此方法之前,修改了迭代器指向的collection,则迭代器的行为是不正确的
抛出:
![](https://img2020.cnblogs.com/blog/786126/202007/786126-20200730110030302-163205939.png)
package com.JavaStudy01; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; /** * @Author wufq * @Date 2020/7/30 10:35 */ public class IteratorDemo01 { public static void main(String[] args){ Collection coll = new ArrayList(); coll.add("abc1"); coll.add("abc2"); coll.add("abc3"); //使用了Collection里面的迭代器iterator方法,调用迭代器方法的目的是获取集合中迭代器的对象 Iterator it=coll.iterator(); //取出coll集合的对象 while (it.hasNext()){ System.out.println(it.next()); } // it.remove(); //for循环取出 for(Iterator it1=coll.iterator();it1.hasNext();){ System.out.println(it1.next()); } //这里面的while和for的区别在于:前者it对象在循环后任然可以用,但是会占内存地址,后者it对象在循环后就不能使用了,不会占用多余的内容,老外一般都喜欢用这种方法 } }
2、迭代器的原理
该对象必须依赖于具体容器,因为每一个容器的数据结构都不同,对于使用容器者而言,具体的实现不重要,只要通过容器获取到该实现的迭代器的对象即可,也就是iterator方法
Iterator接口就是对所有Collection容器进行元素取出的公共接口