javaSE-11-Collection集合1

  • Collection集合
    • java.util.Collection是所有集合的顶级接口,集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法
    • Collection下面有多种实现类
    • 两个常见的子接口
      • java.util.List;线性表,是可重复集合,并且有序
      • java.util.Set不可重复的集合,大部分实现类是无序的
      • 这里可重复指:集合中的元素是否可重复
      • 判定重复元素的标准是依靠元素自身equals比较的结果,为true就认为是重复元素
    • 注:集合不能存放基本类型,只能存放引用类型(存放的是对象),我们存放的基本类型,实际上是装箱了,存放的是包装类
    • 集合的方法
      • 增加元素:boolean add(E e);
      • 获取元素个数:int size();
      • 判断元素是否为0,注意:不是null:boolean isEmpty();
      • 清空集合里的元素:void clera();
      • 与equalse相关操作
        • 包含:boolean contains(Object o);
        • 删除:boolean remove(Object o);
public static void main(String[] args) {
        Collection coll = new ArrayList();
        /**
         * boolean add(E e)
         * 向当前集合中添加一个元素,当元素添加成功后返回true
         */
        coll.add("a");
        coll.add("b");
        coll.add("c");
        coll.add("d");
        System.out.println(coll);

        /*
        int size();
        返回当前元素的个数
         */
        System.out.println(coll.size());

        /*
        boolean isEmpty();
        是否是空集,true是,fasl否
        注意:与null 不同,null是没有对象了,isEmpty是元素个数为0
         */
        boolean isEmpty = coll.isEmpty();
        System.out.println(isEmpty);

        /*
        清空集合:清空集合的所有元素
         */
        coll.clear();
        System.out.println(coll);
    }
  • 集合元素与equals相关操作
    • ArrayList();允许重复
    • hashSet();重写equals方法,就比较的是内容了,不重写比较的是地址
public class Point {
    private int x;
    private int y;

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Point point = (Point) o;
        return x == point.x &&
                y == point.y;
    }

    @Override
    public int hashCode() {
        return Objects.hash(x, y);
    }

    @Override
    public String toString() {
        return "Point{" +
                "x=" + x +
                ", y=" + y +
                '}';
    }

    public int getX() {
        return x;
    }

    public void setX(int x) {
        this.x = x;
    }

    public int getY() {
        return y;
    }

    public void setY(int y) {
        this.y = y;
    }

    public Point(int x, int y) {
        this.x = x;
        this.y = y;
    }
}
public static void main(String[] args) {
        Collection c = new ArrayList();
        c.add(new Point(1,2));
        c.add(new Point(2,2));
        c.add(new Point(3,2));
        c.add(new Point(4,2));
        c.add(new Point(5,2));

        Point p = new Point(1,2);
        c.add(p);
        System.out.println(c); //重写equals方法后
        //[Point{x=1, y=2}, Point{x=2, y=2}, Point{x=3, y=2}, Point{x=4, y=2}, Point{x=5, y=2}, Point{x=1, y=2}]

        Collection c1 = new HashSet();
        c1.add(new Point(1,2));
        c1.add(new Point(2,2));
        c1.add(new Point(3,2));
        c1.add(new Point(4,2));
        c1.add(new Point(5,2));
        System.out.println(c1);
        //[Point{x=3, y=2}, Point{x=2, y=2}, Point{x=1, y=2}, Point{x=5, y=2}, Point{x=4, y=2}]

        Point p1 = new Point(1,2);
        c1.add(p1);
        System.out.println("未重写equals方法"+c1);
        //未重写equals方法比的是地址,地址不重复[Point{x=2, y=2}, Point{x=5, y=2}, Point{x=4, y=2}, Point{x=1, y=2}, Point{x=1, y=2}, Point{x=3, y=2}]

        System.out.println("重写equals方法"+c1);//重写equals方法后,比的是内容,不允许有重复元素
        //[Point{x=3, y=2}, Point{x=2, y=2}, Point{x=1, y=2}, Point{x=5, y=2}, Point{x=4, y=2}]



        /*
        boolean contains(Object o)
        判断集合是否包含给定元素
        判断依据是看给定元素是否存在与集合元素存在equals比较为true的情况,存在则任务包含
        注意:contains也依靠重写equals方法,否则比较的是地址
         */
        Point p2 = new Point(1,2);
       // c.add(p2);
        boolean con = c.contains(p2);
        System.out.println(con);//重写为true 不重写equals方法为false

        /*
        remove方法是从集合中删除给定元素,删除也是删除与给定元素equals比较为true的元素
        如果集合中存在多个重复的元素,那么仅删除第一个元素

        如果没有重写equals方法,则无法删除数据
         */
        c.add(p2);
        System.out.println(c);
        //[Point{x=1, y=2}, Point{x=2, y=2}, Point{x=3, y=2}, Point{x=4, y=2}, Point{x=5, y=2}, Point{x=1, y=2}, Point{x=1, y=2}]
        c.remove(p2);
        //[Point{x=2, y=2}, Point{x=3, y=2}, Point{x=4, y=2}, Point{x=5, y=2}, Point{x=1, y=2}, Point{x=1, y=2}]
        System.out.println(c);
    }
  • 集合只能存放引用类型,并且存放的是元素的引用,是地址
public static void main(String[] args) {
        Point p = new Point(1,2);
        Collection c = new ArrayList();
        c.add(p);
        System.out.println(p);//Point{x=1, y=2}
        System.out.println(c);//[Point{x=1, y=2}]
        p.setX(2);//修改的是对象,而集合存的是地址,p指向的对象内容改变了,集合存的是地址,指向的是同一个对象
        System.out.println(p);//Point{x=2, y=2}
        System.out.println(c);//[Point{x=2, y=2}]
    }

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值