Java 集合 Collection的使用

在上一篇博客中介绍了关于集合框架的一个简单的组成,和分布,可以从中发现 Collection接口是Java集合类的顶级接口之一,

Collection 接口分为List 和 Set, 常用的是ArrayList、LinkedList、HashSet、TreeSet

Collection接口有几个比较重要并且常用的方法: 

boolean add(object element)向集合中添加元素 element
void clear()清空集合
boolean contains(Object o)判断指定集合是否包含对象 o
boolean remove(Object o)删除集合中的对象o
int size()获取集合中元素的个数
Object[] toArray()将集合转换成数组
Iterator iterator()获取集合所依赖的迭代器对象

 一、方法: add()    clear()    size()的例子(知识点都在代码注释中,一定得仔细看啊!):

public class CollectionTest{
    public static void main(String[] args){

        //1.创建一个集合
        Collection c=new ArrayList();//这里用到了多态,但是c在不强制类型转换的前提下只
能调用父类的对象,不能使用子类特有的对象
        //2.添加元素
        c.add(1);//在JDK5.0之前集合是不能存放基本数据类型的,但是之后基本类型有了自动拆装箱
的功能就可以直接使用了
        c.add(new Integer(100));//开辟一个int类型的空间并且给该空间赋值100;
        
        Object o=new Object();
        c.add(o);
        //3.获取元素的个数
        System.out.println(c.size()); // 结果为3
        System.out.println(c.isEmpty()); //false
        //4.clear集合
        c.clear();
        System.out.println(c.clear());
        System.out.println(c.isEmpty());//true
}


}

二、方法: boolean contains() 判断集合中是否包含某个元素            

import java.util.*
public class CollectionTest{
    public static void main(String[] args)

    //创建集合
    Collection c=new ArrayList();
    Integer i1=new Integer(10);
    c.add(i1);
    //判断集合中是否包含i1;
    System.out.println(c.contains(i1)); //true;
        
    //创建 integer类型对象
    Integer i2=new Integer(10);
    System.out.println(c.contains(i2));//true

}

上面的代码解释了 contains方法的使用,但是大家注意里面的代码,我们先创建了i1对象,然后把i1添加到了集合中,但是随后又创建了值相同的i2对象,但是没有把i2通过add()方法加入到集合 中,但是通过contains方法,发现结果返回的是true,也就是说集合中有i2,这是为什么?

      按理说i1和i2的内存地址不同,他们并不是同一个对象啊

      原因:   integer在java源代码底层中重写了equals()方法,比较的不是内存地址,而是值是否相同,因为这里i1,i2的值都是10所以他们的结果是相同的

 既然这样,我们使用一个自定义的类,来验证

import java.util.*
public class CollectionTest{
    public static void main(String[] args)

    //创建集合
    Collection c=new ArrayList();
    Integer i1=new Integer(10);
    c.add(i1);
    //判断集合中是否包含i1;
    System.out.println(c.contains(i1)); //true;
        
    //创建 integer类型对象
    Integer i2=new Integer(10);
    System.out.println(c.contains(i2));//true

    Manager m1=new Manager(100,"java");
    c.add(m1);
    System.out.println(c.contains(m1));true;
    Manager m2=new Manager(100,"java");
    System.out.println(c.contains(m2));//在manager方法中若重写了equals方法,那么返回true
若没有重写equals方法,则返回false

}



//未重写equals方法的manager类

class Manager{
	int no;
	string name;
	Manager(int no;String name){
		this.no=no;
		this.name=name;
	}
	
}

重写了equals方法的manager类

class Manager{
	int no;
	string name;
	Manager(int no;String name){
		this.no=no;
		this.name=name;
	}
	
	public boolean equals(Object o){
		if(this==o) return true; //等号两边比的是内容
		if(o instanceof Manager){
			Manager m=(Manager) o;//强制类型转换
			if(m.no==this.no && m.name.equals(this.name)){
			return true;
			}
		}
		return false;
	}


}

三、boolean remove()删除集合中某个元素

*/
 import java.util.*;
 public class CollectionTest{
	public static void main(String[] args){
		//创建集合对象
		Collection c=new ArrayList();
		//创建一个对象
		Integer c1=new Integer(10);
		//添加元素
		c.add(i1);
		//删除
		Integer c2=new Integer(10);
		c.remove(i1);
		
		System.out.println(c.size());//0
		
		Manager m1=new Manager(100,"smith");
		c.add(m1);
		Manager m2=new Manager(100,"smith");
		c.remove(m2);
		System.out.println(c.size())//0

	}

}

重写了equals方法的manager类

class Manager{
	int no;
	string name;
	Manager(int no;String name){
		this.no=no;
		this.name=name;
	}
	
	public boolean equals(Object o){
		if(this==o) return true; //等号两边比的是内容
		if(o instanceof Manager){
			Manager m=(Manager) o;//强制类型转换
			if(m.no==this.no && m.name.equals(this.name)){
			return true;
			}
		}
		return false;
	}


}

注意:remove() contains()方法都需要集合中的元素重写equals方法,因为Object中的equals方法比较的是内存地址,但是在现实业务逻辑中不能比较内存地址,应该比较的是值

 

四、迭代方法:Iterator iterator()的使用

public class CollectionTest{
    public static void main(String[] args){
        //创建集合对象
        Collection c=new ArrayList();
        //添加元素
        c.add(100);//自动装箱
		c.add(3.14);//自动装箱
		c.add(false);//自动装箱

        //迭代,遍历
        //获取迭代器对象
        Iterator it=c.iterator();//迭代器是面向接口变成 it 是引用,保存了内存地址
指向堆中的“迭代器对象”
    //注意:不需要关心底层集合的具体类型,所有集合依赖的迭代器都实现了java.util.Iterator;接口

        //2.开始调用方法,完成遍历迭代 用while循环
        while(it.hasNext()){

            Object element=it.next();
            System.out.println(element);//100 3.14. false

        //调用的原则: 在调用it.next()之前必须调用it.hasNext()
        }
        //除了使用while循环,还可以利用for循环
        for(Iterator it=c.iterator();it.hasNext();){
                Object element=it.next();
                System.out.println(element);//100 3.14,false 结果是一样的
            }
    }


}

上面这些都是介绍的关于Collection的使用方法,欢迎大家共同学习!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值