目录

ArrayList

List.contains

LinkedList

总结

 


ArrayList

有序的(存储和读取的顺序是一致的)    有整数索引           允许重复的

底层数据结构是数组 查询 | 修改快 增删慢

package CeShi;

import java.util.ArrayList;
import java.util.List;

/**
 * @author Lzy
 * @creat 2021-03-21-11:35
 * void add(int index, E element) :将元素添加到index索引位置上
 * 		E get(int index) :根据index索引获取元素
 * 		E remove(int index) :根据index索引删除元素
 * 		E set(int index, E element):将index索引位置的的元素设置为element
 * 	底层数据结构是数组 查询|修改快 增删慢
 */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add(0,"hello");
        list.add(1,"xiaoli");
        System.out.println("原数组: " + list);
        list.add(0,"xiaozhang");//添加在索引0处,原有数组总体右移
        System.out.println(list);

        System.out.println("打印索引2元素: " + list.get(2));
        System.out.println("去除索引1元素并打印: " +list.remove(1));
        System.out.println("去除索引1后: " + list);
        System.out.println("更改索引0元素并打印: " + list.set(0,"zzz"));
        System.out.println("最终: " + list);
    }
}

 

 

List.contains(o),比较list是否包含o

package CeShi;

import java.util.ArrayList;
/**
 * @author Lzy
 * @creat 2021-03-21-12:58
 * 判断元素是否在列表存在  contains()
 * 假如List中有n个元素,那么会调用n次o.equals(e),只要有一次o.equals(e)返回了true,
 * 那么list.contains(o)返回true,否则返回false
*/
public class ListTest {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("java");
        list.add("cpp");
        list.add("python");

        boolean flag = list.contains("php");
        System.out.println(flag);
    }
}

 

LinkedList

 LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢 访问数据的平均效率低,需要对链表进行遍历

需要更多的内存,因为ArrayList的每个索引的位置是实际的数据,而LinkedList中的每个节点中存储的是实际的数据和前后节点的位置

package CeShi;

import java.util.LinkedList;

/**
 * @author Lzy
 * @creat 2021-03-21-12:01
 * void addFirst(E e) :向链表的头部添加元素
 *  void addLast(E e):向链表的尾部添加元素
 *  E getFirst():获取链头的元素,不删除元素
 *  E getLast():获取链尾的元素,不删除元素
 *  E removeFirst():返回链头的元素并删除链头的元素
 *  E removeLast():返回链尾的元素并删除链尾的元素
 *
 *  LinkedList底层使用的是链表结构,因此增删快,查询相对ArrayList较慢
 */
public class LinkedListDemo {
    public static void main(String[] args) {
        LinkedList<String> linked= new LinkedList<>();

        linked.add("every");
        linked.add("day");
        System.out.println("最初链表:" + linked);
        linked.addFirst("xiaoli");
        System.out.println("在头部添加元素: " + linked);

        linked.addLast("you");
        System.out.println("在尾部添加元素" + linked);
        linked.add(3,"missing");
        System.out.println("在索引3前添加元素: " +linked);
        System.out.println("获取头元素: " +linked.getFirst() +" 尾元素: "+ linked.getLast());

        System.out.println("删除头元素,并返回值: " + linked.removeFirst());
        System.out.println(linked);

    }
}

 

总结

总结是截图另一个博主,侵删  传送门 Java 常见面试题之“Arraylist和Linkedlist的区别”