List接口
List接口
特点:有序、有下标、可重复
方法
除了继承Collection接口的方法,List还有自己的方法
List的方法相比Collection添加了下标相关的方法,添加、删除、获取下标、获取数据、列表迭代器等
void add(int index, Object o) //在index位置插入对象
boolean addAll(int index, Collection c) //将一个集合中的元素添加到此集合中的index位置
Object get(int index) // 返回集合中指定的位置的元素
List subList(int fromIndex, int toIndex) // 返回fromIndex到toIndex之间的元素集合
int indexOf(Object o) // 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1
ListIterator<E> listIterator() // 返回列表中的列表迭代器(按适当的顺序)
ListIterator<E> listIterator(int index) // 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器
E remove(int index) // 删除该列表中指定位置的元素(可选操作)。
实践
Demo1
package com.qianfeng;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.ListIterator;
/**
* List添加、删除、遍历、判断和获取
*
* @since 2022-05-06
*/
public class ListDemo {
public static void main(String[] args) {
List li = new ArrayList<>();
// 添加元素
li.add("苹果");
li.add("三星");
li.add("小米");
li.add("华为");
// 删除元素
// li.remove("三星");
li.remove(0);
// 遍历
// 由于List继承于Collection,所以可以使用增强for循环遍历
System.out.println("===============使用增强for循环遍历==================");
for (Object o : li) {
System.out.println(o.toString());
}
// 由于List有下标,所以可以使用for循环遍历
System.out.println("===============使用for循环遍历==================");
for (int i = 0; i < li.size(); i++) {
System.out.println(li.get(i));
}
// 由于List继承于Collection,所以可以使用迭代器遍历
System.out.println("===============使用迭代器遍历==================");
Iterator it = li.iterator();
while (it.hasNext()) {
System.out.println(it.next());
}
// List有列表迭代器,可以实现双向遍历、添加、删除、更新等操作
System.out.println("===============使用列表迭代器遍历==================");
ListIterator lit = li.listIterator();
while (lit.hasNext()) {
System.out.println(lit.nextIndex() + ":" + lit.next());
}
while (lit.hasPrevious()) {
System.out.println(lit.previousIndex() + ":" + lit.previous());
}
// 判断
System.out.println(li.contains("索尼"));
System.out.println(li.isEmpty());
// 获取
System.out.println(li.indexOf("华为"));
}
}
Demo2 数值列表
package com.qianfeng;
import java.util.ArrayList;
import java.util.List;
/**
* 数值List添加删除
*
* @since 2022-05-06
*/
public class ListDemo2 {
public static void main(String[] args) {
List list = new ArrayList<>();
// 添加元素
list.add(10);
list.add(180);
list.add(20);
list.add(30);
System.out.println(list);
// 删除元素
// list.remove(0);
// 这里直接删除180会报错,可采用如下两种方式,可以采用new的原因是remove中有一个equals的比较,Integer的equals方法就是比较值
list.remove(new Integer(180));
// list.remove(list.indexOf(180));
System.out.println(list);
// 取子列表,左闭右开
System.out.println(list.subList(1, 3));
}
}
List实现类
ArrayList
底层是数组,查询快,增删慢
JDK1.2版本出现,运行效率高,线程不安全
Vector
底层是数组,查询快,增删慢
JDK1.0出现,运行效率低,线程安全
LinkedList
底层是链表,增删快,查询慢
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~