java中collection既然是接口,那么为啥还有可以调用的方法呢?比如int size(),请问怎么回事呢?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java中collection既然是接口,那么为啥还有可以调用的方法呢?比如int size(),请问怎么回事呢?相关的知识,希望对你有一定的参考价值。

collection中的size方法是抽象的,实现它的子类或者孙类重写了collection的size方法,造成你这种疑惑的原因我想是多态吧。
Collection c = new ArrayList();
c.size();
上例就是一个多态,父类或者接口引用指向孙类对象,c.size()实际上调用的是ArrayList的size方法。
参考技术A collection是集合中最顶层的接口,List、set是继承collection接口的而这两个接口再往下list接口有verctor,arraylist.linkedlist而这些都是实现了以上两个接口的类。collection中的方法是在孙子类中实现过的。所以有方法可用。 参考技术B 接口要被类实现的,接口里面的方法都要被实现这个接口的类覆盖的。 参考技术C Collection c = new ArrayList();
c.size();

看到了吗?是看实例了那个的,例子里实例了ArrayList,那collection就有了arrayList的功能
参考技术D 那是抽象方法,是由其实现类去重写此方法过后被调用。

JavaSE进阶--Collection集合

Collection集合

1.1 集合概述


我们已经学习过并使用过集合ArrayList ,那么集合到底是什么呢?

  • 集合:集合是java中提供的一种容器,可以用来存储多个数据


集合和数组既然都是容器,它们有啥区别呢?

  • 数组的长度是固定的。集合的长度是可变的。
    • int[] arr = new int[10];
    • Student[] stu = new Student[3];
    • ArrayList
  • 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
int[] arr = new int[10];
Student[] stu = new Student[3];
ArrayList<Student><String><Integer>

1.2 ?集合框架

技术图片

1.3 Collection 常用功能


Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。方法如下:

  • public boolean add(E e): ?把给定的对象添加到当前集合中 。
  • public void clear() :清空集合中所有的元素。
  • public boolean remove(E e): 把给定的对象在当前集合中删除。
  • public boolean contains(E e): 判断当前集合中是否包含给定的对象。
  • public boolean isEmpty(): 判断当前集合是否为空。
  • public int size(): 返回集合中元素的个数。
  • public Object[] toArray(): 把集合中的元素,存储到数组中。


方法演示:

package 集合和泛型.Collection;

import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;

/**
 * 在Collection接口定义着单列集合框架中最最共性的内容。
 *
 * 共性方法:
 *      public boolean add(E e):  把给定的对象添加到当前集合中 。
 *      public void clear() :清空集合中所有的元素。
 *      public boolean remove(E e): 把给定的对象在当前集合中删除。
 *      public boolean contains(E e): 判断当前集合中是否包含给定的对象。
 *      public boolean isEmpty(): 判断当前集合是否为空。
 *      public int size(): 返回集合中元素的个数。
 *      public Object[] toArray(): 把集合中的元素,存储到数组中。
 */
public class Demo01Collection {
    public static void main(String[] args) {
        demo01();
    }

    public static void demo01(){
        // 创建集合对象,可以使用多态
        // Collection<String> coll = new ArrayList<>();
        Collection<String> coll = new HashSet<>();
        System.out.println(coll);
        // add 方法
        boolean b1 = coll.add("张三");
        System.out.println(b1);
        System.out.println(coll);
        coll.add("李四");
        coll.add("李四");     // HashSet会自动去重
        coll.add("王五");
        coll.add("赵六");
        coll.add("田七");
        System.out.println(coll);

        // remove方法 : 存在元素会删除元素返回True,不存在删除失败返回False
        boolean b2 = coll.remove("赵六");
        System.out.println(b2);
        System.out.println(coll);
        boolean b3 = coll.remove("赵四");
        System.out.println(b3);

        // contains() 方法  是否包含某个元素,包含True,否则false
        boolean b4 = coll.contains("张三");
        System.out.println(b4);
        boolean b5 = coll.contains("张六");
        System.out.println(b5);

        // isEmpty()方法   :为空True,不为空True
        boolean b6 = coll.isEmpty();
        System.out.println(b6);

        // size()方法
        System.out.println(coll.size());

        //toArray(): 把集合中的元素,存储到数组中。
        Object [] arr = coll.toArray();
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }

        //public void clear() :清空集合中所有的元素。
        coll.clear();
        System.out.println(coll);
        System.out.println(coll.isEmpty());
    }
}

tips: 有关Collection中的方法可不止上面这些,其他方法可以自行查看API学习。


以上是关于java中collection既然是接口,那么为啥还有可以调用的方法呢?比如int size(),请问怎么回事呢?的主要内容,如果未能解决你的问题,请参考以下文章

java中collection是一个接口,为啥有sort函数

java代码中Collection c = new ArrayList 为啥说比ArrayList c = new ArrayListy用法灵活?

java.util.Collection 为啥不实现新的 Stream 接口?

重点知识学习--[泛型学习]

java 的 Runnable 是个接口,既然是个接口就没有 可执行的方法。 那么为何它还能启动线程呢,请高手解答--

关于java Map和Collection接口