一:Collection的介绍
Collection 层次结构 中的根接口。Collection 表示一组对象,这些对象也称为 collection 的元素。一些 collection 允许有重复的元素,而另一些则不允许。一些 collection 是有序的,而另一些则是无序的。JDK 不提供此接口的任何直接 实现:它提供更具体的子接口(如 Set 和 List)实现。
二:掌握Collection接口中的方法
下面就演示一下,上面方法的含义
2.1 方法(1): 不带All的方法
/**
* 数组和集合的区别:
* 数组:只能存储同一种类型的元素,而且长度是定长,数组既可以存储基本数据类型,也可以存储引用数据类型
* 集合:可以存储不同的类型的元素,而且长度是变长,集合只能存储引用数据类型
*
* 集合中的存储的是引用类型,而这些引用类型也就是对象,把存储到集合中的这些对象 ,我们称为集合的元素!
*
* 分析:从具体到抽象
* 实现:从抽象到具体: Collection c = new ArrayList();
* 使用 :使用具体的 : ArrayList
*
* 学习方法:看到一个继承体系,我们先学习老大,再学习小弟!
* Collection接口的方法
*
* 1.添加功能
* boolean add(E e) 添加一个元素
* boolean addAll(Collection<? extends E> c);将一个指定集合里面的元素作为元素添加到此
* 集合!!!
* 听起来有点绕!看一下下面的例子就一清二楚了!!!
* 可以想成一个行李箱(容器) 和 一个衣柜(容器),快到过年了,要收拾衣服回家了
* 行李箱.addAll(衣柜): 就是把衣柜里面的衣服,全部装入行李箱!!
* 2.删除功能
* void clear(); 删除所有元素,清空购物车(容器)
* boolean remove(Object o) 移除指定的元素!
* boolean removeAll(Collection c)移除指定集合中的元素,只有一个元素被移除了,就返回true
* 3.判断功能
* boolean contains(Object o): 判断集合中是否包含该元素
* boolean containsAll(Collection<?> c): 如果此 collection 包含指定 collection 中
* 的"所有元素",则返回 true。
* boolean isEmpty() 如果此 collection 不包含元素,则返回 true。 ,和size()==0 感觉一
* 样的
* 4.查找功能
* Iterator<E> iterator()
* 5.长度功能
* int size() 返回此 collection 中的元素数。
* 6.交集功能
* boolean retainAll(Collection<?> c)
* 交集: 两个集合都有的元素
* 这个方法我们要考虑两个问题:
* a.交集的元素跑去哪了 ?
* 假设有两个集合A,B, A对B做交集,最终的结果保存到A中,B不变!
* b.返回boolean是什么意思?
* 返回值表示的是A这个集合是否发生过改变!
*
* 7.把集合转为数组: 为什么返回值是一个Object[]呢? 因为集合里面可以装不同类型的对象!
* Object[] toArray()
*
* @author wzj
*
*/
public class TestCollection1 {
public static void main(String[] args) {
/**
* 把Collection想成一个行李箱
* 下面测试Collection接口的基本功能
*/
//创建行李箱
Collection c = new ArrayList();
//1.往行李箱添加衣服
c.add("adidas");
c.add("Nike");
c.add("Armani");
// c.clear(); //把行李箱里面的衣服全部扔掉
// c.remove("adidas"); //扔掉行李箱指定的那件衣服
//2.看行李箱有没有这个衣服
System.out.println(c.contains("adidas"));
//3.看行李箱的衣服是不是没有了
System.out.println(c.isEmpty());
//4.看行李箱中的衣服还有几件
System.out.println(c.size());
System.out.println(c);
}
}
2.2方法(2):带All的方法
public class TestCollection2 {
public static void main(String[] args) {
/**
* 测试Collections的带All的方法,这里带All的方法,参数都是Collection对象,并且返回值都是boolean值
* boolean addAll(Collection c)
* containsAll(Collection c)
* removeAll(Collection c)
* retainAll(Collection c)
*/
Collection c1 = new ArrayList();
c1.add(1);
c1.add(2);
c1.add(3);
Collection c2 = new ArrayList();
c2.add(1);
c2.add(2);
c2.add(3);
//1.addAll(): 把c2里面的元素,全部添加到c1
//System.out.println(c1.addAll(c2));//true
//2.containsAll(): 只有c2里面列出的元素,c1全部有就是true,否则是fasle
//System.out.println(c1.containsAll(c2)); //false
//3.removeAll(): 只有c2里面列出的元素,c1移除了一个就返回true!!
//System.out.println(c1.removeAll(c2)); //true
/*
* retainAll():
* a: c1对c2做交集: 最终交集的结果(也就是两个集合相同的元素 )存放到了c1集合中
* b: 而返回值的意思是: c1这个集合发送过改变没!!
*
* 例子:
* c1:[1, 2, 3]
* c2:[1, 2, 3]
* 假如 c1 和 c2集合都存的1,2,3 然后 c1.retainsAll(c2)
* 结果确实: c1里面存的是两个集合交集的元素1,2,3
* 但c1集合里面的元素并没有改变过,所以返回值是false!
* 注意:【这里不要把返回值的意思搞成是判断c1和c2集合是否有交集的意思!!】
*
*/
System.out.println(c1.retainAll(c2));
System.out.println("c1:"+c1);
System.out.println("c2:"+c2);
}
}
2.3方法(3):iterator() & toArray()
public class TestCollection3 {
public static void main(String[] args) {
/**
* 测试Collection接口方法
* 1. Object[] toArray()方法
* 2. Iterator<E> iterator();
* iterator()方法是 Collection接口继承Iterator接口的方法 !!
* 3.Iterator: 迭代器是遍历集合的一种方式,是依赖于集合而存在的!!
*/
Collection c = new ArrayList();
c.add("hello"); // Object obj = "hello"; 向上转型
c.add("world");
c.add("java");
Object[] objs = c.toArray();
for (int i = 0; i < objs.length; i++) {
/**
* 强制类型转换: 分为基本数据类型,和引用数据类型
* 这是向下转型! 指的是引用数据类型的这种情况
*/
String str = (String)objs[i];
System.out.println(str);
}
System.out.println("===================");
Iterator iterator = c.iterator();
/**
* hashNext(): 判断下面还有没有元素, 如果有就使用next()方法让指针往右移动一下,并返回对应的值!!
* 注意:【指针的位置:刚开始是指向第一个元素的前面的那个位置!!!】
*/
while(iterator.hasNext()) {
String str = (String)iterator.next();
System.out.println(str);
}
System.out.println("========也可以改成for循环===========");
//1.初始条件 2.判断条件 4.步长(这里不需要,省了)
for(Iterator iterator2 = c.iterator(); iterator2.hasNext();) {
//3.方法体
String str = (String)iterator2.next(); //next() 指针往下移动一下,并返回对应的值
System.out.println(str);
}
}
}
其实虽然这些以前都学习过,但其实并不掌握的并不牢固,有时候回过头来,复习一遍,对整个知识体系感觉就更清晰了,
千万不要看以为看了一遍,就万事大吉了,真的,写一遍和看一遍的效果完全不一样!!
最后有什么写的不好的,希望各位可以不吝指出
觉得对你有帮助的,想打赏的可以打赏一下,哈哈哈,多少无所谓,这也是对我一种支持与鼓励吗,最后不喜勿喷
有志同道合的小伙伴可以加QQ群讨论:897992110