Java集合(1)——List
List的特征:元素可重复,有次序(存在下标)
List有一组与下标相关的方法:
- 在指定下标下添加元素
- 删除指定下标的元素
- 修改指定下标的元素
- 查找第一次出现该元素的下标
- 获取指定下标的元素
List常用的实现类:
- LinkedList :底层以双向链表结构存放元素
- ArraysList :底层以数组结构存放元素
ArraysList
底层以数组结构存放元素
分配空间:连续的
定义语法:
List 集合名 = new ArraysList();
ArraysList 集合名 = new ArraysList();
增删改查
添加元素 add()
- 直接添加,集合名.add(元素) 逐一添加进集合中
- 在指定下标下添加,集合名.add(int index,元素)
删除元素 remove()
删除指定下标的元素 集合名.remove(int index,元素)
集合名.clear() ------> 清空集合中所有数据
修改元素 set()
修改指定下标的元素 集合名.set(int index,元素)
查找元素
list.subList(2, 5) -------> 获取原list集合中的某一部分元素(获取子集),这里包含第2个,但不包含第5个
同时也可以通过get()来获取对应下标的元素来实现查找
get()方法容易存在的误区
public class Student{ private String name; private int stuId; private int score; private String birthDate; ..... } List<Student> stuInfo = new ArrayList<Student>(); stuInfo.add(new Student("林一",1002,86,"2001-9-21")); stuInfo.add(new Student("苏琳",1101,83,"2000-8-7")); stuInfo.add(new Student("江柒",1023,92,"1999-2-3")); stuInfo.add(new Student("程月",1003,79,"2001-6-15")); stuInfo.add(new Student("孟文",1026,88,"2000-10-28")); stuInfo.add(new Student("宋渝",1107,75,"1998-1-30"));
上述例子中,通过get(2)获取的不是stuId的数据,而是[江柒,1023,92,1999-2-3]
LinkedList
底层以双向链表结构存放元素
分配空间:不连续的
双向链表
提供双向查找,可以从前往后遍历,也可以从后往前遍历
查询效率低于数组,但修改效率高于数组
修改的是指针
头结点没有上一个节点,尾结点没有下一个节点