数据结构中List的继承体系(Iterable接口与Collection接口)

  List是线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作,这是List的逻辑角度。而从List的语法角度来看,它是一个接口。

  List接口继承自Collection接口,Collection接口继承自Iterable接口。

1. Iterable接口

  Iterable接口中只有3个方法,这里用到的是抽象方法iterator()。

数据结构中List的继承体系(Iterable接口与Collection接口)_第1张图片

  iterator是方法名称,Iterator是返回值,(Iterator的首字母是大写的,所以应该是一个类名或者接口名)即返回值是一个迭代器。该iterable方法的作用就是返回一个可以被使用的迭代器。 

  进入Iterator接口中,我们可以看到这几个方法。

数据结构中List的继承体系(Iterable接口与Collection接口)_第2张图片

  • hasNext() :用于检测集合中是否还有元素。true则有下一个元素,false则没有下一个元素。
  • next() :会返回迭代器的下一个元素,并且更新迭代器的状态。在使用next()前必须先用hasNext()判断集合中是否有下一个元素。
  • Iterator it = collection.iterator();
    while (it.hasNext()) {
        System.out.println(it.next());
    }
  • remove() :将迭代器返回的元素删除。

  总结来说,可以理解为,我们有一个容器Collection,这个容器具备迭代能力(因为继承自Iterable接口),这个容器通过使用itertor()方法获得迭代器(Iterator)。当我们拿到了这个迭代器之后,就可以通过hasNext() + next() 这两个方法的配合依次拿到容器中的元素。

2.Collection接口

  Collection 是最基本的集合接口,在Java中不提供直接继承自Collection的类,只提供继承于的子接口(如List和set)。

  Collection中没有规定元素是怎么组织起来的,可能是线性结构、树形结构、哈希表结构等等。但是无论是怎么样的组织方式,一个集合(容器)都会具备一些共同的特征:具备迭代的能力、添加元素、取出元素、判断元素是否存在等等。Collection接口中就提供了这些方法。

数据结构中List的继承体系(Iterable接口与Collection接口)_第3张图片

其中常用的有:

  • add(E):添加元素到集合中。
  • size():返回集合中元素的个数。
  • isEmpty():判断集合是否为空。
  • contains(Object):判断元素是否在集合当中。
  • remove(Object):将元素从集合中删除。
  • clear():清空集合。
  • equals(Object):判断是否相等。
import java.util.ArrayList;
import java.util.Collection;
public class test {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();
        //向上转型
        Collection collection = arrayList;

        //1.add()
        collection.add(1);
        collection.add("jiu");
        System.out.println(arrayList);           //[1,jiu]

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

        //3.isEmpty()
        System.out.println(collection.isEmpty());         // false

        //4.contains()
        System.out.println(collection.contains(5));       //false
        System.out.println(collection.contains("jiu"));   //true

        //5.remove()
        System.out.println(collection.remove(1));       //true

        //6.clear()
        collection.clear();
        System.out.println(collection);     // []
    }
}

3.List接口

  线性表,是一种线性结构。元素和元素之间出现线性的结构,即每一个元素都有一个独一无二的位置与其相关联——下标。

  在线性表中,需要注意的:

  • 一个List中有多少个元素:size()
  • 下标(合法位置)的取值范围:[ 0 , size )
  • [ 0 ]为第一个元素,被称为头(head)
  • [ size - 1 ]为最后一个元素,被称为尾(tail / last)
  • 除了第一个元素和最后一个元素,其余元素都有逻辑上的前一个元素:前驱元素(previous)和后一个元素:后继元素(next)
  • 线性表中独有的:排序、下标(根据下标获取元素、根据下标获取设置元素)

  线性表中的方法: 

数据结构中List的继承体系(Iterable接口与Collection接口)_第4张图片

常用的方法有:

  • add(E):添加元素到集合的最后(尾插)
  • sort(Comparator):排序,必须重写compare方法。
  • get(int):获取指定位置的元素
  • set(int , E):替换指定位置的元素
  • add(int , E):在指定位置添加元素,后面的元素依次后移
  • remove(int):删除指定位置的元素
  • indexOf(Object):查找指定元素的位置
  • subList(int , int) :查找子表
import java.util.ArrayList;
import java.util.List;

/**
 * Created with IntelliJ IDEA.
 * Description: List中常用方法
 * User: WangWZ
 * Date: 2022-10-05
 * Time: 18:47
 */
public class main1 {
    public static void main(String[] args) {
        List c1 = new ArrayList();

        //1.add()
        c1.add(1);
        c1.add(98);
        c1.add(55);
        System.out.println(c1);    //[1,98,55]

        //2.get()
        System.out.println(c1.get(0));  //1
        System.out.println(c1.get(2));  //55

        //3.set()
        c1.set(0,20);
        System.out.println(c1);     //[20.98.55]

        //4.add()
        c1.add(1,35);
        System.out.println(c1);     //[20,35,98,55]

        //5.remove()
        c1.remove(1);
        System.out.println(c1);     //[20,98,55]

        //6.indexOf()
        System.out.println(c1.indexOf(98));   // 1

        //7.subList()
        System.out.println(c1.subList(0,1));  //[20]
    }
}

你可能感兴趣的:(数据结构,list,java,数据结构)