Java集合02:Collection接口

关于java.util.Collection接口(单个方式存储元素)


一、Collection中能存放什么元素?

—— 没有使用“泛型”之前,Collection中可以存储Object的所有子类型。
—— 使用“泛型”之后,Collection中只能存储某个具体的类型。
注:集合中不能直接存储基本数据类型,也不能直接存储Java对象,只能存储Java对象的内存地址


二、Collection接口中的常用方法
  1. booleanadd(Object e):向集合中添加元素。
  2. intsize():获取集合中元素的个数。
  3. voidclear():清空集合中的所有元素。
  4. booleancontains(Object o):判断集合中是否包含指定元素o,包含返回true。
  5. booleanremove(Object o):删除集合中的某个指定元素。
  6. booleanisEmpty():判断集合是否为空(元素个数是否为0),为空(0)返回true。
  7. Iteratoriterator():返回在此集合的迭代器对象。
  8. Object[]toArray():把当前集合转换为数组 。
public class CollectionTest01 {
	public static void main(String[] args) {
		Collection c = new ArrayList();
	    //测试Collection接口中的常用方法
	    // add(Object e):向集合中添加元素.
	    c.add(1200);//集合不能直接存储基本数据类型,这里默认自动装箱,是Integer x = new Integer(1200);
	    c.add(3.14);//自动装箱
	    c.add(true);
	    c.add(new Object());
	
	    // size():获得集合中元素的个数.
	    System.out.println(c.size());//4
	
	    // clear():情况集合的所有元素.
	    c.clear();
	    System.out.println(c.size());//0
	
	    c.add("hallo");
	    c.add("world");
	    c.add("绿巨人");
	    c.add("浩克");
	
	    //contains(Object o):判断当前集合中是否包含指定元素o.
	    System.out.println(c.contains("绿巨人"));//true
	    System.out.println(c.contains("钢铁侠"));//false
	
	    //remove(Object o):删除集合中的某个元素.
	    c.remove("浩克");
	    System.out.println(c.size());//3
	
	    //isEmpty():判断当前集合是否为空.
	    System.out.println(c.isEmpty());//false
	    c.clear();
	    System.out.println(c.isEmpty());//true
	
	    c.add("hallo");
	    c.add("world");
	    c.add("绿巨人");
	    c.add("浩克");
	
	    //toArray():将当前集合转换为数组.
	    Object[] objects = c.toArray();
	    for (int i = 0; i < objects.length; i++) {
	        System.out.print(objects[i]+" ");
	    }//hallo world 绿巨人 浩克
 	}
}

三、Collection集合接口中的 iterator() 方法——迭代器
  • Iteratoriterator():获取集合对象的迭代器对象 Iterator
  • 迭代器对象 Iterator 中的方法:
    1. BooleanhasNext(): 如果仍有元素可以迭代,则返回true.
    2. Objectnext(): 返回迭代的下一个元素
    3. voidremove():从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)
  • 注:以上的遍历方法/迭代方式,是所有Collection通用的一种方式,在Map集合中不能使用,在所有的Collection以及子类中使用
  • 集合结构只要发生改变,迭代器必重新获取。
    ——获得的迭代器对象,迭代器用来遍历集合的,此时相当于对当前集合的状态拍了一个快照,而迭代器迭代的时候会参照这个快照进行迭代。如果集合结构发生了改变,没有重新获取迭代器,会发生异常:java.util.ConcurrentModificationException
  • Iterator中的remove方法与Collection中的remove方法的区别:
    • 在迭代集合元素的过程中,要删除集合中的元素:
      ——不能调用Collection集合对象的remove方法删除元素(直接通过集合对象删除元素,迭代器未重新获取,即迭代器的元素未删除,会发生异常:java.util.ConcurrentModificationException)
      ——要调用Iterator迭代器对象的remove方法删除元素,用迭代器对象去删除时,会自动更新迭代器,并且更新集合(删除集合中的元素)。
      在这里插入图片描述

在这里插入图片描述

public class CollectionTest02 {
  	public static void main(String[] args) {
      	//创建集合对象
      	Collection c = new ArrayList();
      	//添加元素
      	c.add("abc");
      	c.add("def");
      	c.add(100);
      	c.add(new Object());
      	//对集合Collection进行遍历/迭代
      	//1.获取集合对象的迭代器对象Iterator
      	Iterator it = c.iterator();
      	/*
      	2.通过以上获取的迭代器对象开始迭代/遍历集合
          	1.Boolean hasNext(): 如果仍有元素可以迭代,则返回true.
          	2.Object next(): 返回迭代的下一个元素
          	3.void remove():从迭代器指向的集合中移除迭代器返回的最后一个元素(可选操作)
       	*/
      	while (it.hasNext()) {
          	System.out.print(it.next()+" ");
      	}//abc def 100 java.lang.Object@1b6d3586
  	}
}

四、Collection集合接口中 contains 方法的深入
  • booleancontains(Object o):判断集合中是否包含指定元素o.包含返回true,否则为false
  • contains方法是用来判断集合中是否包含某个指定元素的方法,那么它在底层是怎么判断集合中是否包含某个指定元素的呢?
    ——底层调用了equals方法进行对比,只要equals方法返回true,就表示包含这个元素。
    ——contains判断主要看底层equals方法是否相等,equals重写比较的是内容,未重写比较的是内存地址
  • 存放在一个集合中的类型,一定要重写equals方法
public class CollectionTest03 {
   	public static void main(String[] args) {
       	//创建一个集合对象
       	Collection c = new ArrayList();
       	//向集合中存储元素
       	String s1 = new String("abc");
       	c.add(s1);
       	String s2 = new String("def");
       	c.add(s2);
       	System.out.println("集合中元素的个数:"+c.size());
       	//新建一个String对象
       	String x = new String("abc");
       	/*
       	 判断c集合中是否包含x?
           包含,原因是contains方法底层调用了equals进行了对比,
           而String类重写了equals方法,所有比较的是内容,而不是
           地址,所有c集合包含x
        	*/
       	System.out.println(c.contains(x));//true
   	}
}

五、Collection集合接口中 remove 方法的深入
  • booleanremove(Object o):删除集合中的某个指定元素。
  • remove方法是用来判断集合中是否包含某个指定元素并删除该元素的方法。底层判断集合中是否包含某个指定元素与contains方法相同,都是调用了equals方法,如果equals方法返回true,则证明元素存在并且删除该元素。
  • 存放在一个集合中的类型,一定要重写equals方法
public class CollectionTest04 {
   	public static void main(String[] args) {
       	//创建集合对象
       	Collection c = new ArrayList();
       	//创建字符串对象s1
       	String s1 = new String("hello");
       	//往集合中添加元素
       	c.add(s1);
       	System.out.println(c.size());//1
       	//创建字符串对象s2,内容跟s1一样
       	String s2 = new String("hello");
       	/*
       	集合中没有s2这个对象内存地址,是否能删除s2?
           	首先,从remove方法的源代码中可以发现,底层调用了equals方法判断该集合是否
           	包含某个指定元素并删除该指定元素,而String类重写了equals方法,equals方法
           	比较的就是内容,而不是比较内存地址.
        	*/
       	System.out.println(c.remove(s2));//true
       	System.out.println(c.size());//0
   	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值