List是线性表,即n个具有相同类型元素的有限序列,在该序列上可以执行增删改查以及变量等操作,这是List的逻辑角度。而从List的语法角度来看,它是一个接口。
List接口继承自Collection接口,Collection接口继承自Iterable接口。
1. Iterable接口
Iterable接口中只有3个方法,这里用到的是抽象方法iterator()。
iterator是方法名称,Iterator是返回值,(Iterator的首字母是大写的,所以应该是一个类名或者接口名)即返回值是一个迭代器。该iterable方法的作用就是返回一个可以被使用的迭代器。
进入Iterator接口中,我们可以看到这几个方法。
- 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接口中就提供了这些方法。
其中常用的有:
- 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)
- 线性表中独有的:排序、下标(根据下标获取元素、根据下标获取设置元素)
线性表中的方法:
常用的方法有:
- add(E):添加元素到集合的最后(尾插)
- sort(Comparator<?super E>):排序,必须重写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]
}
}