JAVA集合类(一)

集合是JAVA中用途很广泛的一类容器,与数组类似,集合用于存储、获取、操作对象。但它与数组又有一些区别。
首先我们可以看看数组的一些弊端:
1.数组的长度是不可变的,在我们声明时指定好长度就不可以再变化
2.数组中没有提供可以查看有效元素个数的方法
而集合将这两个弊端很好的进行了解决,但同时,集合也有局限性,即它只能存储对象

JAVA将集合按照存储的特性分为了很多种,即不同的集合用于存储不同的对象,而不同的集合之间因为存在一些共性,又可以提取出来形成一个上一级的集合,这也叫做集合框架,用一张简单的图表示:

在这里插入图片描述
由下往上看,比如3个方形代表3个不同的集合,它们分别存储3种不同的对象,但由于都是方形,存在共性,于是将他们三个提取出来形成了一个具有共性的大集合大方形,同样,方形和椭圆形的集合之间可能也存在共性,于是它们又被提取出来,形成了一个更大的集合,这就是一个集合框架,而java的集合框架,较为复杂,图片网上有很多,就不列出来了。我们就主要说一说那些常用的集合。将上面的图转化为常用的集合框架,大致可以画成这样:
在这里插入图片描述
那么我们首先从Collection这个大集合说起,查看Collection的源码,发现:
在这里插入图片描述
Collection实际上是一个接口,它位于java.util.Collection中,还包含子接口List、Set等等,而该接口中又包含了许多方法,我们主要说一说常用的方法。

既然是接口,我们就需要使用实现类,这里我们用一个常用的实现类ArrayList来创建实例:

Collection collection=new ArrayList();

首先是向集合中添加元素的方法add(Object obj)
参数列表告诉我们是Object类型,那么可以传入任意类型的参数:

		collection.add("AA");
        collection.add(3);//自动装箱
        collection.add(new Person("张三",12));
        collection.add(new String("BBB"));

在上面我们有说到,集合只能存储对象,而当我们在add()方法中输入一个数字,也能存储,是因为该方法进行了自动装箱的操作。
打印该集合:
在这里插入图片描述
上面有说到,集合拥有数组无法实现的查看有效元素个数的方法:

System.out.println(collection.size());

结果:
在这里插入图片描述
可以添加元素,那么也可以删除元素,其中有清除所有元素的方法clear():

		collection.clear();
        System.out.println(collection);

结果:
在这里插入图片描述
判断集合是否为空的方法isEmpty():

		boolean b=collection.isEmpty();
        System.out.println(b);

结果:
在这里插入图片描述
我们也可以进行批量操作,比如将某一个集合中的所有元素存进集合addAll(Collection c):
数组中有一个asList()的方法,可以将数组转换为集合:

 Collection collection2=Arrays.asList(1,2,3);
 collection.addAll(collection2);

结果:
在这里插入图片描述
这里我们不妨可以使用add()方法存入该集合,看看两者有何区别:

 Collection collection2=Arrays.asList(1,2,3);
 collection.add(collection2);

结果:
在这里插入图片描述
不难发现,addAll()方法是将存入的集合中的每个元素单独存进了集合,而add方法是将该存入的集合为一个整体存入集合

判断集合中是否包含某元素,可以调用contains(Object obj)方法:

		boolean b = collection.contains("AAA");
        System.out.println(b);

结果:
在这里插入图片描述
假设我们要判断集合中是否包含某个指定的对象:

boolean b1=collection.contains(new Person("张三",12));
        System.out.println(b1);

该对象存在于集合中,但运行结果:
在这里插入图片描述
而如果我们判断一个字符串是否存在:

		boolean b3=collection.contains(new String("BBB"));
        System.out.println(b3);

结果:
在这里插入图片描述
发现能够查到,这是因为新建String时自动重写了equals方法,而对象之间进行比较,实际上是调用了equals()方法,我们只用在Person实体类中重写equals()方法就可以了:

@Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (!(o instanceof Person)) return false;
        Person person = (Person) o;
        return Objects.equals(getName(), person.getName()) &&
                Objects.equals(getAge(), person.getAge());
    }

同样,如果想判断某个集合中的所有元素是否都包含在当前元素中,调用cotainsAll(Collection c)方法即可,其原理与contains方法相同:

 	Collection collection3=new ArrayList();
        collection3.add("AA");
        collection3.add(new Person("张三",12));
        boolean b2=collection.containsAll(collection3);
        System.out.println(b2);

除此之外,还有remove、removeall(删除、删除集合中所包含的所有元素)方法,与上面类似,这里就演示一下removeall方法:

		Collection collection3=new ArrayList();
        collection3.add(new Person("张三",12));
        collection3.add("AA");
        collection3.add(888);
        collection.removeAll(collection3);
        System.out.println(collection);

先看运行结果:
在这里插入图片描述
在collection中,包含的元素是aa、数字3、一个年龄为12的张三对象以及BBB,而在collection3中,只有三个元素,在执行了removeall方法后,打印的collection只包含了3和BBB两个元素,而被移除的正是两个集合的交集,这也就是说明removeall方法实际上移除的是当前集合以及传入集合的交集。

同样地,若想返回两个集合的交集部分,调用retainAll(Collection c)即可:

		Collection collection3=new ArrayList();
        collection3.add(new Person("张三",12));
        collection3.add("AA");
        collection3.add(888);
 		collection.retainAll(collection3);
        System.out.println(collection);
        //11.toArray()
        Object [] objects=collection.toArray();
        for (Object obj:
                objects) {
            System.out.println(obj  );
        }

运行结果:
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值