LinkedList和ArrayList集合的区别

/**

  • @param :arraylist and linkedList
  • @explain List具有两个重要的实现类:arrayList和linkedList
  • 其中arraylist是顺序表集合,linkedlist是双链表集合 list集合:有序且可重复
  • linkedlist在添加和删除元素时具有比arraylist更好的性能,但是在get与set方面要弱于arraylist(在数据量较大的时候)

*/

Array是基于索引的数据结构,它使用缩影在数组中搜索和读出的熟读是很快的

Array获取数据的时间复杂度是O(1),但是要删除数据确实开销很大,因为这需要重新排序数组中的数组,因为在array中,删除数据之后,需要把后面所有的数据前移动

缺点: 数组初始化必须指定数组的初始化长度
例如:

int [] a = new int[4];//推荐使用
int c[]={23,45,67,12};//长度:4,索引范围为0-3

List集合的特点是:有序,可重复,提供了按照索引访问的方式,它继承了Collection。

基本的使用:

package Base;

import java.text.SimpleDateFormat;
import java.util.*;
import java.util.LinkedList;
/**
 * @param  :arraylist and linkedList
 * @explain List具有两个重要的实现类:arrayList和linkedList
 * 其中arraylist是顺序表集合,linkedlist是双链表集合 list集合:有序且可重复
 * linkedlist在添加和删除元素时具有比arraylist更好的性能,但是在get与set方面要弱于arraylist(在数据量较大的时候)
 *
 */
public class ArrayListDemo {
    private static final SimpleDateFormat sdf = new SimpleDateFormat("mm:ss:ssss");
    private static final   ArrayList<String> list = new ArrayList<String>();
    //精确到毫秒数
    /*Array是给予索引的数据结构,它使用缩影在数组中搜索和读出数据是很快的*/
    /*空间复杂度只有O(1),但是删除数据确实比较繁琐,因为这需要重新排列数组中的所有数据*/
    /*缺点是:数组初始化必须指定初始长度*/
    /*这一点和c语言是一直的,都是需要设置其初始长度的*/
    public static List<String> addListArray(){
        Random random = new Random();
        int nums = random.nextInt(100);
        System.out.println("开始时间:"+sdf.format(new Date()));
        //在list集合中添加元素
        for (int i = 1;i<=100;i++){
            list.add("张三");
        }
        System.out.println("结束时间:"+sdf.format(new Date()));
        list.set(0,"王五");
        /*由此可以得出,添加元素将会在瞬间完成*/
        return list;
    }
    public static boolean queryListArray(){
        //判断元素是否存在;
        final boolean zhangsan = list.contains("张三");
        //判断是否为空
        final boolean empty = list.isEmpty();
        System.out.println(zhangsan);
        System.out.println(empty);
        return zhangsan;
    }
    //删除元素
    public static boolean deleteListArray(){
        final boolean zhangsan = list.remove("张三");
        System.out.println(zhangsan);
        return zhangsan;
    }
    //获取元素
    public  static String getListArrayElement(){
        final String s = list.get(0);
        System.out.println(s);
        return s;
    }
    public static void main(String[] args) {
        addListArray();
        queryListArray();
        deleteListArray();
        getListArrayElement();
        //Arraylist:可以看坐是一个可以自动增长的数组
        //toArray是返回一个数组
        final Object[] objects = list.toArray();
        System.out.println(objects.length);
        //aslist方法返回一个列表 (已经被删除了)
        System.out.println(list);

    }
}

package Base;

import java.util.LinkedList;
import java.util.List;
/*
* 以下情况使用 ArrayList :

频繁访问列表中的某一个元素。
只需要在列表末尾进行添加和删除元素操作。
* --------------------------
以下情况使用 LinkedList :

你需要通过循环迭代来访问列表中的某些元素。
需要频繁的在列表开头、中间、末尾等位置进行添加和删除元素操作。*/
public class LinkedListDemo {
    /*--------------------*/
    /*arraylist不可以在列表头添加元素或者在列表头删除元素,但是LinkedList可以在列表头或者尾部添加元素*/
    public static void main(String[] args) {
        LinkedList<String> linkedList = new LinkedList<String>();
        linkedList.add("张三");
        linkedList.add("李四");
        linkedList.add("王五");
        //在列表头添加元素
        linkedList.addFirst("程二");
        //在队伍尾添加元素
        linkedList.addLast("赵六");
        //获取其长度
        linkedList.size();
        //查找元素
        linkedList.contains("张三");
        linkedList.contains("刘7");
        //判断是否为空
        linkedList.isEmpty();
        //在列表头删除元素
        linkedList.removeFirst();
        //在列表尾删除元素
        linkedList.removeLast();
        //根据索引覆盖元素
        String zhangan = linkedList.set(1, "zhangan");
        System.out.println(linkedList);
        /*set返回的是被覆盖的元素*/
        System.out.println(zhangan);
    }
}

ArrayList的底层的实现是Array,数组扩容实现。
LinkedList相对于ArrayListarraylist不可以在列表头添加元素或者在列表头删除元素,但是LinkedList可以在列表头或者尾部添加元素

你可能感兴趣的:(笔记,数据结构,java,排序算法)