/**
- @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相对于ArrayList :arraylist不可以在列表头添加元素或者在列表头删除元素,但是LinkedList可以在列表头或者尾部添加元素