List集合是Java中常用的集合之一,其常用子类有两个,分别是ArrayList和LinkedList
这两个集合的特点是不尽相同的
—ArrayList集合的特点是:底层数据结构是数组,查询和修改快,增删慢
—LinkedList集合特点是:底层数据结构是链表查询和修改慢,增删快(数据量大的时候明显)
–注意,他们的相同点是:都是有序的,而且可以存储重复索引

在讲这两个集合之前,先来看看几种常见的数据结构

那么什么是数据结构呢?
数据结构是计算机存储, 组织数据的方式。它是指相互之间存在一种或多种特定关系的数据元素的集合。通常情况下, 精心选择的数据结构可以带来更高的运行或者存储效率。数据结构往往同高效的检索算法和索引技术有关。
通俗理解: 数据结构指的就是数据的组织方式

1.常见的数据结构

1.1栈… 队列

需求:

我要把A, B, C三个元素存入到栈中, 流程是怎样的呢?

我要把A, B, C三个元素存入到队列中, 流程是怎样的呢?

栈和队列的图解

javalist底层数据结构 java list 数据结构_java

1.2数组…链表
需求

  1. 假设有元素11, 22, 33, 44, 55, 分别通过数组和链表的图解模拟以下需求
  2. 要获取33这个元素, 怎么实现呢?
  3. 要在33这个元素后面添加一个新元素88, 怎么实现呢?
  4. 要删除33这个元素, 怎么实现呢?

下面我们用具体案例来分析ArrayListLinkList这两个集合的原理,重点关注底层数据结构
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的使用和遇到的错误,这样才能在日后遇到错误知道咋么解决!