List集合是Java中常用的集合之一,其常用子类有两个,分别是ArrayList和LinkedList
这两个集合的特点是不尽相同的
—ArrayList集合的特点是:底层数据结构是数组,查询和修改快,增删慢
—LinkedList集合特点是:底层数据结构是链表查询和修改慢,增删快(数据量大的时候明显)
–注意,他们的相同点是:都是有序的,而且可以存储重复索引
在讲这两个集合之前,先来看看几种常见的数据结构
那么什么是数据结构呢?
数据结构是计算机存储, 组织数据的方式。它是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下, 精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
通俗理解: 数据结构指的就是数据的组织方式
1.常见的数据结构
1.1栈… 队列
需求:
我要把A, B, C三个元素存入到栈中, 流程是怎样的呢?
我要把A, B, C三个元素存入到队列中, 流程是怎样的呢?
栈和队列的图解
1.2数组…链表
需求
- 假设有元素11, 22, 33, 44, 55, 分别通过数组和链表的图解模拟以下需求
- 要获取33这个元素, 怎么实现呢?
- 要在33这个元素后面添加一个新元素88, 怎么实现呢?
- 要删除33这个元素, 怎么实现呢?
下面我们用具体案例来分析ArrayList和LinkList这两个集合的原理,重点关注底层数据结构
1.ArrayList集合
需求
1.定义ArrayList集合, 存储3个字符串信息, 分别是: “hello”, “world”, “java”.
2.通过三种方式, 遍历上述的集合.
提示: 迭代器, 普通for, 增强for.
import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;
//案例: 演示ArrayList集合存储字符串并遍历
public class Demo01 {
public static void main(String[] args) {
//1.定义ArrayList集合, 存储3个字符串信息, 分别是: "hello", "world", "java"
ArrayList<String> list = new ArrayList<>();
list.add("hello");
list.add("world");
list.add("java");
//2.通过三种方式, 遍历上述的集合
// 提示: 迭代器, 普通for, 增强for
//方式一: 迭代器
Iterator<String> it = list.iterator();
while (it.hasNext()) {
String s = it.next();
System.out.println(s);
}
System.out.println("----------------------");
//方式二: 普通for
for (int i = 0; i < list.size(); i++) {
String s = list.get(i);
System.out.println(s);
}
System.out.println("-------------------------");
//方式三: 增强for, 掌握
for (String s : list) {
System.out.println(s);
}
System.out.println("-------------------------");
//方式四: 列表迭代器, 掌握
ListIterator<String> lit = list.listIterator();
while (lit.hasNext()) {
String s = lit.next();
System.out.println(s);
}
System.out.println("-------------------------");
//方式五: 把集合转成数组, 然后遍历. Collection#toArray();(了解)
Object[] objs = list.toArray();
for (Object obj : objs) {
System.out.println(obj);
}
}
}
2.LinkedList集合
LinkedList集合主要是用来操作头和尾元素的, 所以它里边定义了大量这类的方法, 常用的方法如下:
? public void addFirst(E e) 往列表的开头插入指定的元素
? public void addLast(E e) 往列表的末尾插入指定的元素
? public E removeFirst() 删除列表中的第一个元素, 并返回被删除的元素
? public E removeLast() 删除列表中的最后一个元素, 并返回被删除的元素.
? public E getFirst() 返回列表的第一个元素
? public E getLast() 返回列表的最后一个元素
需求
1.创建LinkedList集合对象, 存储字符串数据: “hello”, “world”, “java”
2.分别演示上述的6个方法.
/*
LinkedList集合主要是操作首尾元素的:
public void addFirst(E e) 往列表的开头插入指定的元素
public void addLast(E e) 往列表的末尾插入指定的元素
public E removeFirst() 删除列表中的第一个元素, 并返回被删除的元素
public E removeLast() 删除列表中的最后一个元素, 并返回被删除的元素
public E getFirst() 返回列表的第一个元素
public E getLast() 返回列表的最后一个元素
LinkedList一般用于一些面试题, 让我们模拟一些数据结构
*/
public class Demo02 {
public static void main(String[] args) {
//1.创建LinkedList集合对象, 存储字符串数据: "hello", "world", "java"
LinkedList<String> list = new LinkedList<>();
list.add("hello");
list.add("world");
list.add("java");
//2.分别演示上述的6个方法
//演示添加.
/*list.addFirst("加班可以,得加钱");
//list.addLast("我秃了,也强了");
list.add("我秃了,也强了");*/
//演示删除元素
//System.out.println(list.removeFirst());
//System.out.println(list.removeLast());
//演示获取
System.out.println(list.getFirst());
System.out.println(list.getLast());
//3, 打印集合
System.out.println("list: " + list);
}
}
注意:练习的时候一定要不断总结,总结API的使用和遇到的错误,这样才能在日后遇到错误知道咋么解决!