顶级接口Collection

本文详细介绍了Java Collection接口,包括其作为集合框架顶级接口的角色,提供的重要方法如size(), isEmpty(), contains(), add(), remove(), iterator(), toArray(), clear()等。讨论了equals()和hashCode()的使用,以及在自定义equals规则时的实践。

顶级接口Collection

无序、允许重复
public interface Collection<E> extends Iterable<E>一般说Collection是集合框架的顶级接口,但是事实上并不是顶级接口

提供的方法:
        int size();获取集合中的元素个数   区分容积和元素个数

        boolean isEmpty() 判断集合中的元素个数是否为0
     ​    注意:只判断是否没有元素,但是并不判断集合对象是否为null
    
        boolean contains(Object o)用于判断集合中是否包含对象 

        boolean add(Object o)用于向集合中追加元素o,成功true失败false

        boolean remove(Object o)删除集合中的指定元素o,成功true失败false

       Iterator<E> iterator();获取迭代器,通过迭代器遍历集合中的每个元素

       Object[] toArray();将集合转换为数组

       void clear();删除集合中的所有元素

import java.util.ArrayList;
import java.util.Collection;
import java.util.Date;
public class Test2 {
	public static void main(String[] args) {
		Collection cc=new ArrayList();
		cc.add(123);
		cc.add("bbbb");
		cc.add(new Date());
		System.out.println(cc.size());
		System.out.println(cc.isEmpty());
		System.out.println(cc.contains("bbbb"));
		System.out.println(cc.remove(123));
		System.out.println(cc.contains("123"));
		System.out.println(cc.size());
	}
}

如何判断删除的元素相等
equals
    定义equals方法可以依赖于IDE工具自动生成
    @Override
    public boolean equals(Object obj) {
        // 用户自定义的比较规则
        if (this == obj)
            return true;
        if (obj == null)  //当前对象不可能为null,否则空指针异常
            return false;
        if (getClass() != obj.getClass())  // 类型判断。一个类只能加载一次
            return false;
        A1 other = (A1) obj;
        //调用Objects工具类中的方法进行相等判断
         public static boolean equals(Object a, Object b) {
         return (a == b) || (a != null && a.equals(b));
        }
        return Objects.equals(id, other.id) && Objects.equals(name, other.name);
    }

==和equals

        -==比较的是对象的引用值
        -equals用户自定义比较规则。如果没有自定义equals方法,则从Object类中继承得到方法
   public boolean equals(Object obj) {
        return (this == obj);
   }

import java.util.ArrayList;
import java.util.Collection;
import java.util.Objects;

public class Test1 {
	public static void main(String[] args) {
		Collection cc = new ArrayList();
		A1 aa = new A1();
		cc.add(aa);
		cc.add(aa);
		System.out.println(cc.size());

		System.out.println(cc.remove(aa));
		System.out.println(cc.size());

		System.out.println(cc.remove(new A1()));
		System.out.println(cc.size());

	}
}

class A1 {
	private Long id;
	private String name;

	@Override
	public int hashCode() {
		return Objects.hash(id, name);
	}

	@Override
	public boolean equals(Object obj) {
		//用户自定义的比较规则
		if (this == obj)
			return true;
		if (obj == null)//当前对象不可能为null,否则空指针异常
			return false;
		if (getClass() != obj.getClass())//类型判断。一个类只能加载一次
			return false;
		A1 other = (A1) obj;
		//调用Objects工具类中的方法进行相等判断
		/*
		 *  public static boolean equals(Object a, Object b) {
         *		return (a == b) || (a != null && a.equals(b));
         *  }
		 */
		return Objects.equals(id, other.id) && Objects.equals(name, other.name);
	}

	public Long getId() {
		return id;
	}

	public void setId(Long id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

}
### ### JavaCollection 接口的定义及其作用 Java 中的 `Collection` 接口是集合框架中的核心接口之一,它位于 `java.util` 包中,并且是所有单个元素集合类的顶级接口。该接口继承自 `Iterable<E>` 接口,表示它可以被迭代访问。其基本定义如下: ```java public interface Collection<E> extends Iterable<E> { // 基本操作方法 int size(); boolean isEmpty(); boolean contains(Object element); boolean add(E element); boolean remove(Object element); Iterator<E> iterator(); // 批量操作方法 boolean containsAll(Collection<?> c); boolean removeAll(Collection<?> c); boolean addAll(Collection<? extends E> c); void clear(); // 数组转换方法 Object[] toArray(); <T> T[] toArray(T[] a); } ``` 这个接口为集合的操作提供了统一的标准,包括对集合进行添加、删除、查询、遍历等基础功能。通过这些方法,开发者可以实现通用的数据结构操作逻辑[^4]。 ### ### Collection 接口的作用 1. **统一集合操作标准** 由于 `Collection` 是一个接口,因此它不能被直接实例化,只能通过其实现类(如 `ArrayList`、`HashSet` 等)来创建具体的集合对象。这种设计模式使得不同类型的集合可以通过相同的接口进行操作,从而提高了代码的可重用性和扩展性[^2]。 2. **支持动态数据管理** 相较于固定长度的数组,`Collection` 接口的实现类通常提供动态扩容的能力,允许在运行时根据需要增加或减少集合的大小。这极大地简化了数据管理的复杂度,特别是在处理不确定数量的对象集合时非常有用[^5]。 3. **增强集合之间的互操作性** 通过 `Collection` 接口中定义的批量操作方法(如 `addAll()`、`removeAll()`),可以方便地将多个集合之间的数据进行合并、差集等操作。这在实际开发中经常用于集合之间的比较和整合[^4]。 4. **提供遍历机制** `Collection` 接口继承自 `Iterable` 接口,这意味着它天然支持使用迭代器(`Iterator`)来进行集合元素的遍历。这种方式不仅安全可靠,而且屏蔽了集合内部的具体实现细节,提升了封装性和安全性[^1]。 5. **简化编程模型** 在 JDK 1.2 之前,虽然也存在一些集合相关的类(如 `Vector` 和 `Hashtable`),但并没有形成完整的类集概念。从 JDK 1.2 开始引入的 `Collection` 框架,为开发者提供了一套更为丰富、灵活且易于使用的集合工具,显著降低了构建复杂数据结构的成本[^5]。 ###
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值