了解这篇文章之前可以先看看我们之前学的集合继承图,会让我们的理解更加的深刻
JavaSE——集合、集合继承结构图_我爱布朗熊的博客-CSDN博客
目录
1.3 clear() 移除collection中所有的元素(清空集合)
1.4 contanis() 判断当前集合中是否包含某个元素
3.1 contains方法源码分析remove方法源码分析
存放在集合中的类型,一定要重写equals方法,下面我们会在contains方法中解释
Collection中能存放什么元素?
没有使用泛型之前,Collection中可以存储Object所有的子类型
使用了泛型之后,Collection中智能存储某个具体的类型
集合中不能直接存储基本数据类型,也不能存储java对象,只是存储java对象的内存地址
这个地方是自动装箱了:Integer x = new Integer(1200);
- Collection c = new ArrayList();
-
- c.add(1200);
- c.add(true);
- c.add(new Object());
c.size();
c.clear();
会返回一个boolean类型,包含的话返回true
下面我们会对这个方法进行详解
c.contains("绿巨人");
c.remove(1200)
true 代表空
c.isEmpty();
Object[] s= c.toArray();
什么时候获取迭代器?
当我们的元素全部添加进入集合的时候,再获取迭代器,因为只要集合结构发生改变,迭代器必须重新获取
我们可以通过下面文章的Collection集合继承图来详细查看集合迭代到底是怎么调用的
JavaSE——集合、集合继承结构图_我爱布朗熊的博客-CSDN博客
下面的方法是在Collection以及子类中使用:
it.hasNext() 表示如果仍有元素可以迭代,则返回true(返回值是boolean)
it.next() 表示返回迭代的下一个元素(返回值是Object)
- // 创建集合对象
- Collection c= new ArrayList();
- c.add("abcd");
- c.add(new Object());
- c.add(100);
- // 第一步:获取迭代器
- Iterator it = c.iterator();
- // 第二步:开始迭代
- while (it.hasNext()){
- System.out.println(it.next());
- }
在集合中存储的并不是java对象,而是内存地址,下面为了好理解,我们就先这么画
当我们查看contains方法的时候,我们发现底层调用了equals方法,如下图所示:
图中的o就是我们代码中的x,es[i]就是我们集合中的元素,并且String的equals方法已经给我们重写了
图示解析:
集合c
如果重写了equals方法的话,contains方法会直接比较比较内容,所以最终的输出结果是true
如果没有重写equals方法的话,比较的就是内存地址(所以放在集合中的元素,尽量重写equals方法)
当我们删除s2的时候,会不会吧s1给删除掉
详细课查看下面这个文章
JavaSE——集合删除元素以及remove()方法解析_我爱布朗熊的博客-CSDN博客_java中remove方法
详细可以查看下面这一篇文章,说明了在删除集合中元素的时候,应该调用迭代器的remove方法而不是Collection集合的remove方法
JavaSE——集合删除元素以及remove()方法解析_我爱布朗熊的博客-CSDN博客_java中remove方法