前言:
list集合属于Java集合体系中的单列集合,继承于父类Collection,如果你对Collection不了解,可以先看这篇文章1️⃣Java中的集合体系学习汇总(List/Map/Set 详解)-优快云博客文章浏览阅读77次,点赞6次,收藏7次。细节1: 如果我们要往List系列集合中添加数据, 那么方法永远返回true, 因为List系列的是允许元素重复的。细节2: 方法会有一个布尔类型的返回值, 删除成功返回true, 删除失败返回false,如果要除的元素不存在,就会删除失败。所以,如果集合中存储的是自定义对象,也想通过contains方法来判断是否包含,那么在java Bean类中,一定要重写equals方法。增强for的底层是用迭代器实现的,在遍历时,也不能直接用集合的方法对元素进行增加或删除。添加数据时,一次只添加一个数据。https://blog.youkuaiyun.com/Future_yzx/article/details/145158979 先学习collection有助于你更好的理解List。
List系列集合
特点:
①有序、可重复、有索引;
②List只是一个接口,它的实现类是ArrayList和LinkedList
(1)特有方法
// 1.public void add(int index,E element): 在某个索引位置插入元素。
list.add(3,"哆啦");
System.out.println(list);
// 2.public E remove (int index): 根据索引删除元素,并返回被删除元素
System.out.println(list.remove(5));
// 3. public E get(int index): 返回集合中指定位置的元素。
System.out.println(list.get(3));
// 4. public E set(int index,E element): 修改索引位置处的元素,修改成功后,会返回原来的数据
System.out.println(list.set(3, "哆啦咪"));
遍历方法:因为List集合支持索引,因此,在上面三种遍历方式基础上,还可以用for循环进行List集合的遍历。
(2)ArrayList
底层原理:
是基于数组来实现的(如图)
因此,ArrayList集合优缺点同数组的相同:查询快、增删慢。
● 查询速度快 :(注意:是根据索引查询数据快):查询数据通过地址值和索引定位,查询任意数据耗时相同
● 删除效率低:可能需要把后面很多的数据进行前移。 ● 添加效率极低:可能需要把后面很多的数据后移,再添加元素;或者也可能需要进行数组的扩容。
应用场景:
● 适合:根据索引index查询数据;比如根据随机索引取数据 (高效) !或者数据量不是很大时。
●不适合: 数据量大的同时,又要频繁的进行增删操作!
(3)LinkedList
底层原理:
是基于双向链表实现的
特点:查询慢,增删相对数组较快,但对首尾元素进行增删改查的速度极快的;
(1)特有方法
(2)应用场景
● 设计数据结构:队列
模拟队列的示例代码:
public static void main(String[] args) {
LinkedList<String> queue = new LinkedList<>();
//入队
for (int i = 1; i < 6; i++) {
queue.addLast("第"+i+"号人");
System.out.println("第"+i+"号人入队:");
System.out.println(queue);
}
System.out.println("-----------------------");
//出队
for (int i = 0; i < 3; i++) {
Object o1 = queue.removeFirst();
System.out.println(o1+"出队");
}
System.out.println("队列中还剩:"+queue);
}
● 设计数据结构:栈
①LinkedList中的pop( )方法:
②LinkedList中的push( )方法:
模拟栈的示例代码:
public static void main(String[] args) {
LinkedList<Object> stack = new LinkedList<>();
for (int i = 1; i <6 ; i++) {
stack.push("子弹"+i);
System.out.println("子弹"+i+"入栈:");
for (Object o : stack) {
System.out.println("|"+o+"|");
}
System.out.println("-------------");
}
System.out.println("************************************");
for (int i = 1; i <6 ; i++) {
System.out.println(stack.pop()+"出栈:");
for (Object o : stack) {
System.out.println("|"+o+"|");
}
System.out.println("-------------");
}
}