List接口
List接口是Collection的子接口
- 特点:有序、有下标、元素可以重复。
1. 常用方法
void add(int index,Object o)
在index位置插入对象o。boolean addAll(index,Collection c)
将一个集合中的元素添加到此集合中的index位置。Object get(int index)
返回集合中指定位置的元素。List subList(int fromIndex,int toIndex)
返回fromIndex和toIndex之间的集合元素。
Modifier and Type | Method and Description |
---|---|
ListIterator<E> |
listIterator() 返回列表中的列表迭代器(按适当的顺序)。 |
ListIterator<E> |
listIterator(int index) 从列表中的指定位置开始,返回列表中的元素(按正确顺序)的列表迭代器。 |
void |
add(int index, E element) 将指定的元素插入此列表中的指定位置(可选操作)。 |
E |
get(int index) 返回此列表中指定位置的元素。 |
int |
indexOf(Object o) 返回此列表中指定元素的第一次出现的索引,如果此列表不包含元素,则返回-1。 |
int |
lastIndexOf(Object o) 返回此列表中指定元素的最后一次出现的索引,如果此列表不包含元素,则返回-1。 |
E |
remove(int index) 删除该列表中指定位置的元素(可选操作)。 |
E |
set(int index, E element) 用指定的元素(可选操作)替换此列表中指定位置的元素。 |
default void |
sort(Comparator<? super E> c) 使用随附的 Comparator 排序此列表来比较元素。 |
List<E> |
subList(int fromIndex, int toIndex) 返回此列表中指定的 fromIndex (含)和 toIndex 之间的视图。 |
2. 使用
List<String> list = new ArrayList<>();
// 1.添加元素
list.add("华为");
list.add("苹果");
list.add(0, "小米");//插入操作
System.out.println("元素个数:" + list.size());
System.out.println(list.toString());
// 2.删除元素
list.remove(0);
//list.remove("小米"); // 结果同上
System.out.println("删除之后:" + list.size());
System.out.println(list.toString());
// 3 .遍历元素
// 3.1 使用for遍历
for (int i = 0; i < list.size(); ++i) {
System.out.println(list.get(i));
}
// 3.2 使用增强for
for (String str : list) {
System.out.println(str);
}
// 3.3 使用迭代器
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
// 3.4使用列表迭代器,listIterator可以双向遍历,添加、删除及修改元素。
ListIterator listIterator = list.listIterator();
// 从前往后
while (listIterator.hasNext()) {
System.out.println(listIterator.next());
}
// 从后往前(此时“遍历指针”已经指向末尾)
while (listIterator.hasPrevious()) {
System.out.println(listIterator.previous());
}
//4.判断
System.out.println(list.isEmpty());
System.out.println(list.contains("苹果"));
//5.获取位置
System.out.println(list.indexOf("华为"));
List<Integer> list = new ArrayList<>();
// 1.添加数字数据(自动装箱)
list.add(20);
list.add(30);
list.add(40);
list.add(50);
System.out.println("元素个数:" + list.size()); // 元素个数:4
System.out.println(list.toString()); // [20, 30, 40, 50]
// 2.删除元素
list.remove(0);
//list.remove(20);很明显数组越界错误,改成如下
//list.remove(Object(20));
//list.remove(new Integer(20));
System.out.println("元素个数:" + list.size()); // 元素个数:3
System.out.println(list.toString()); // [30, 40, 50]
// subList,返回子集合,含头不含尾
List list2 = list.subList(1, 3);
System.out.println(list2.toString()); // [40, 50]
3. 实现类
- ArrayList
- 数组结构实现,查询块、增删慢。
- JDK1.2版本加入,运行效率快、线程不安全。
- Vector
- 数组结构实现,查询块、增删慢。
- JDK1.0版本加入,运行效率慢、线程安全。
- LinkedList
- 链表结构实现,增删快,查询慢。