List(有序)
-
继 承 C olle c tio n 接 口 , 存 储 一 组 可 重 复 的 有 序 对 象
-
元 素 顺 序 以 元 素 插 入 的 顺 序 放 置 元 素 , 不 重 新 排 序
-
通 过 索 引 访 问 数 组 元 素 , 索 引 从 0 开 始
ArrayList : 序列/数组存储 查询快(下标),修改慢(添加元素,删除元素,考虑扩容和数组拷贝的过程)
LinkedList: 列表存储, 查询慢(从头查询),修改快(添加元素,删除元素,只需要修改上一个)
代码示例:
//(1)List集合:有序
//创建集合
ArrayList<String> list = new ArrayList<String>();
//添加集合
list.add("六六");
list.add("李四");
list.add("王五");
//删除remove
list.remove(0);
//插入add
list.add(0,"六六二");
//get
System.out.println(list.get(2));//王五
//替换set
list.set(1,"李小四");//李四替换为了李小四
//截取subList
List temp = list.subList(1,3);
System.out.println("截取:"+temp);
//indexOf查找
System.out.println(list.indexOf("六六二"));//下标为0
//isEmpty() 空位true
System.out.println(list.isEmpty()); //false
//清空Set中的所有元素
//list.clear()
打印结果:
使用List集合注意事项:
- 可以使用索引访问List集合元素 可以使用for循环遍历List集合
- List集合中存在的都是Object类对象
- add(Object o)方法的参数是Object类对象
- 在通过get(int i)方法获取元素时必须进行强制类型转换
Fruit fruit=(Fruit) list.get(i);
- 删除集合元素的方法
- 按索引删除
- 调用set(int index,Object o)方法改变List集合指定索引的元素时,指定的索引必须是List集合的 有效索引
- set(int index,Object o)方法不会改变List集合长度
LinkedList类
具有双向链表结构,更方便增、删行为
特有方法:
方法 | 描述 |
void addFirst(Object o) | 在链表的首部添加元素 |
void addLast(Object o) | 在链表的尾部添加元素 |
Object getFirst() | 返回链表的首部元素 |
Object getLast() | 返回链表的尾部元素 |
Object removeFirst() | 在链表的移除首部元素 |
Object removeLast() | 在链表的移除尾部元素 |
代码示例:
LinkedList<String> list2 = new LinkedList<String>();
list2.add("六六");
list2.add("李四");
list2.add("王五");
//删除
list2.remove(0);//删除了六六
//void addFirst(Object)
list2.addFirst("我是开头");
//void addLast(Object)
list2.addLast("我是末尾");
// Object getFirst()
System.out.println("让我看看你是:"+list2.getFirst()); //让我看看你是:我是开头
//Object getLast()
System.out.println("让我看看你是:"+list2.getLast()); //让我看看你是:我是末尾
//Object removeFirst()
list2.removeFirst(); //删除了"我是开头"
// Object removeLast()
list2.removeLast(); //删除了"我是末尾"
System.out.println("=================================");
//遍历集合
for(String a:list2){
System.out.println(a);
}
打印结果:
ArrayList与LinkedList对比
共同点:
- 可以容纳所有类型对象,包括null;
- 元素值可重复
- 元素按顺序存储
ArrayList类特点:
- 底层是数组 优点:基于数组实现,读取效率高 缺点:不适合频繁插入和删除操作(频繁产生移动操作)。
LinkedList类特点:
- 有双向链表实现,任意节点都可方便访问前后节点
- 优点:增、删操作只针对链表节点指针,不需进行频繁移动
- 缺点:遍历效率低