List 集 合
List集合为列表类型,以线性方式存储对象。
特点:元素允许重复,顺序有序(按元素插入顺序排列)
主要的常用方法
void add(int index,Object obj); | 向index位置插入obj |
---|---|
Boolean addAll(int index,Collection c) | 将c中所有元素插入到以index开始的列表中 |
Object get(int index) | 返回指定下标的对象 |
Object set(int index,Object obj) | 对下标为index的位置进行赋值 |
int indexOf(Object obj) | 返回列表中第一次出现obj的下标,若不存在返回-1 |
1.1 ArrayList 集合
ArrayList支持可随需要而增长的动态数组。
代码示例:
class Test{
public static void main(String[] args) {
ArrayList<String> list1 = new ArrayList<>();
System.out.println("list1初始长度为:"+ list1.size());
list1.add("A");
list1.add("B");
list1.add("C");
list1.add("D");
list1.add("E");
list1.add("F");
//将B2添加在list1的index=1的位置
list1.add(1, "B2");
System.out.println("list1加入元素后的大小:" + list1.size());
System.out.println("list1元素为:"+ list1);
list1.remove("A");
list1.remove(2);
System.out.println("list1删除元素后的大小:" + list1.size());
System.out.println("list1元素为:" + list1);
}
}
Output:
list1初始长度为:0
list1加入元素后的大小:7
list1元素为:[A, B2, B, C, D, E, F]
list1删除元素后的大小:5
list1元素为:[B2, B, D, E, F] // 需要移动数据,使得B2作为index=0的元素。
底层是使用数组实现,查询速度快,增删慢。
1.2 LinkedList 集合
addFirst() | 在列表头增加元素 |
---|---|
addLast() | 在列表尾增加元素 |
getFirst() | 获取第一个元素 |
getLast() | 获取最后一个元素 |
removeFirst() | 去除第一个元素 |
removeLast()- | 去除最后一个元素 |
基于链表实现操作,特点:查询慢,增删快
使用LinkedList实现栈
import java.util.LinkedList;
public class MyStack {
private LinkedList<String> linkList = new LinkedList<String>();
// 压栈
public void push(String str){
linkList.addFirst(str);
}
// 出栈
public String pop(){
return linkList.removeFirst();
}
// 查看
public String peek(){
return linkList.peek();
}
// 判断是否为空
public boolean isEmpty(){
return linkList.isEmpty();
}
}
public class Test {
public static void main(String[] args) {
MyStack stack = new MyStack();
stack.push("first");
stack.push("second");
stack.push("third");
stack.push("forth");
stack.push("fifth");
// 取出
while (!stack.isEmpty()){
String pop = stack.pop();
System.out.println(pop);
}
}
}
Output
fifth
fourth
third
second
first
LinkedList 也可实现队列。
总结List集合:ArrayList 和 LinkedList 缺点都为线程不安全