1.List接口
List接口继承了Collection接口,所以Collection接口是List集合的父类接口。
List特有方法:
* set(index obj)
* get(int index)
2.数组实现
特点:查询快 增删慢
* 查询:依赖下标查询
* 增删:把要插入的位置后面所有元素 向后移动一位
* (或者删除时 向前移动一位)
* 数组在创建一个新的数组 长度为原来数组长度的1.5倍0
*
* 链表实现
* 特点:查询慢 增删快
* 1.链表中的元素 保存了 上一个元素和下一个元素的地址
* 通过这个地址 可以找到上一个元素 和下一个元素
* 2.在进行查找的时候 先判断出 要查找的元素 距离头近还是尾近
* 3.例如头近 就从头位置 一个一个向下查找(通过保存的地址)
* 4.增删时 直接找到插入的位置
* 重新保存下 上一个元素和下一个元素的地址 就可以
* 后面元素位置 都不进行移动
3.List接口的实现类
常用的实现子类有ArrayList类与LinkedList类,分别如下:
(1)ArrayList类:优点是实现了可变的数组,允许保存所有元素,包括null,可以根据索引位置对集合进行快速升级访问;缺点是效率低,对大量元素做增删时不适合使用。
(2)LinkedList类采用链表结构保存对象,优点是便于集合中插入和删除对象,效率高。
(3)ArrayList类与LinkedList类实例化List集合。代码如下:
List<e> list = new ArrayList<>();
List<e> list2 = new LinkedList<>();
例如:
①
private static void fun1() {
LinkedList linkedList = new LinkedList();
linkedList.add("a");
linkedList.add("b");
linkedList.add("c");
// d a b c e
// 从集合头 与 集合尾进行添加
linkedList.addFirst("d");
linkedList.addLast("e");
System.out.println(linkedList);
// 获取头尾元素
System.out.println(linkedList.getFirst());
System.out.println(linkedList.getLast());
Object object = linkedList.get(1);
System.out.println(object);
}
②
获取list中的ListIterator
ListIterator listIterator = list.listIterator();
while (listIterator.hasNext()) {
if (listIterator.next().equals("b")) {
// 迭代器迭代时不能直接使用集合 去添加新元素
// 要让迭代器去添加
listIterator.add("Oh-Yes");
}
}
// 注意:一般在对集合迭代的时候 不要轻易去改变集合长度
// 容易的事修改一异常(解决方法 使用迭代器自己的添加方法)
System.out.println(list);
}
③
需求 在集合中存储”a”“a”“a” “b”“b”“b”“c”“c”“c”
// 要求 去除重复元素
// 思路:找出不重复的元素
private static void fun3() {
ArrayList list = new ArrayList();
list.add("a");
list.add("a");
list.add("a");
list.add("b");
list.add("b");
list.add("b");
list.add("c");
list.add("c");
list.add("c");
// 创建一个新数组
ArrayList newList = new ArrayList();
// 遍历原集合
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
// 取出每一个元素
Object next = iterator.next();
// 判断新集合中 包含不包含这个元素
if (!newList.contains(next) == false) {
// 不包含 就添加进去
newList.add(iterator.next());
}
}
// 打印新集合 查看结果
System.out.println(newList);
}
④
封装去重复值的方法
public static void fun4(ArrayList list) {
ArrayList newList = new ArrayList();
Iterator iterator = list.iterator();
while (iterator.hasNext()) {
Object next = iterator.next();
// 核心:包含的判断
// contains方法底层代码 依赖 equals方法
// equals方法 是基类的 比较是导致是否相同
if (!newList.contains(next)) {
newList.add(next);
}
}
System.out.println(newList);
}