ArrayList和LinkedList是接口List的实现类,ArrayList是一个顺序表结构,LinkedList是一个链表结构。顺序表最大的特点就是他可以快速的进行数据的随机访问,链表的有点在于他对数据的增删改非常敏捷,处理效率非常高。但是对于访问数据来说,链表需要通过移动指针来访问遍历结点,因此不如顺序表给出索引位置即可访问数据这样快捷。
我们之前学的数组,数字长度是固定的。如果数组满了,再插入新的元素就插不进去了。数组长度需要我们在一开始就定义好,很不利于今后的使用。但是,ArrayList集合的长度可以随意变化。
ArrayList的常用方法:
方法名 | 说明 |
boolean add(Object o) | 在列表的末尾顺序添加元素,起始索引位置从0开始 |
void add(int index,Object o) | 在指定的索引位置添加元素。索引位置必须介于0和列表中元素个数之间 |
int size() | 返回列表中的元素个数 |
Object get(int index) | 返回指定索引位置处的元素。取出的元素是Object类型,使用前需要进行强制类型转换 |
boolean contains(Object o) | 判断列表中是否存在指定元素 |
boolean remove(Object o) | 从列表中删除元素 |
Object remove(int index) | 从列表中删除指定位置元素,起始索引位置从0开始 |
Object set(int index,Object o) | 指定下标进行修改其中的元素,返回的是修改前的对象 |
对于ArrayList集合来说,直接打印对象名得到的不是地址值,而是内容,如果内容为空,打印结果就是[ ]。
声明方法:ArrayList<E> 集合名 = new ArrayList<>();其中E代表泛型,也就是说集合中的元素的类型应该统一。
给集合添加元素使用add方法。以下代码ArrayList中常用方法的演示案例,配注释。
ublic class DemoArrayList {
public static void main(String[] args) {
ArrayList<Integer> list = new ArrayList<>();
//演示public boolean add() 方法的用法
// System.out.println(list.add(2));//添加后返回一个布尔值,TRUE代表插入成功。
System.out.println(list.add(5));
System.out.println(list.add(6));
System.out.println(list.add(9));
System.out.println(list);
//演示public E get(int index) 方法的用法
//System.out.println(list.get(3));//IndexOutOfBoundsException: Index: 3, Size: 3
System.out.println(list.get(2));
//演示 public E remove(int index) 和 public int size()
System.out.println(list.size());//3
System.out.println(list.remove(2));//9 返回删除对象
System.out.println(list.size());//2 长度减一
//演示 boolean remove(Object o)
//此时我们的集合中元素类型是Integer,不能直接删除
//因为我们输入数值,编译器会把他当做索引值,使用valueOf()方法
list.add(7);
System.out.println(list);//[5,6,7]
System.out.println(list.remove(Integer.valueOf(7)));
System.out.println(list);//[5,6]
//演示void add(int index,Object o)
list.add(2,10);//此时长度是2,可以在索引为2的位置上添加元素
System.out.println(list);
list.add(3,100);//此时长度是3,但是要往索引为4的位置添加元素不可行
//IndexOutOfBoundsException: Index: 4, Size: 3
System.out.println(list);//[5, 6, 10, 100]
//演示 boolean contains(Object o) 的使用方法
//[5, 6, 10, 100]
System.out.println(list.contains(100));//true
System.out.println(list.contains("hello"));//false
//演示Object set(int index,Object o) 修改对应位置的值,返回修改之前的值
System.out.println(list.set(3,99));//100
System.out.println(list);//[5, 6, 10, 99]
}
}
LinkedList的常用方法:
1、LinkedList底层是一个链表结构,查询慢,增删快。
2、LinkedList里包含了大量的操作首尾的方法。(特有的方法,不可使用多态)
方法名 | 说明 |
void addFirst(Object o) | 在列表的首部添加元素 |
void addLast(Object o) | 在列表的末尾添加元素 |
Object getFirst() | 返回列表中的第一个元素 |
Object getLast() | 返回列表中的最后一个元素 |
Object removeFirst() | 删除并返回列表中的第一个元素 |
Object removeLast() | 删除并返回列表中的最后一个元素 |
常用方法的演示;示例:(寻寻觅觅冷冷清清凄凄惨惨戚戚,乍暖还寒时候,最难将息。三杯两盏淡酒,怎敌他晚来风急。)
public class DemoLinkedList {
public static void main(String[] args) {
LinkedList<String> list = new LinkedList<>();
LinkedList<Integer> list1 = new LinkedList<>();
//演示 public void addFirst(E e) 1
//演示 public void addLast(E e) 2
//演示 public void push(E e) 3
list.add("\n乍暖还寒时候");
list.add("最难将息");
list.add("三杯两盏淡酒");
list.addFirst("凄凄惨惨戚戚");
list.push("寻寻觅觅冷冷清清");//与addFirst方法具有相同的效果
System.out.println(list);//[寻寻觅觅冷冷清清,
//凄凄惨惨戚戚, 乍暖还寒时候, 最难将息, 三杯两盏淡酒]
list.addLast("怎敌他,晚来风急");//尾部插入
System.out.println(list);//[寻寻觅觅冷冷清清, 凄凄惨惨戚戚,
//乍暖还寒时候, 最难将息, 三杯两盏淡酒, 怎敌他,晚来风急]
//演示public E getFirst()
//演示public E getLast()
System.out.println(list.getFirst());//寻寻觅觅冷冷清清
System.out.println(list.getLast());//怎敌他,晚来风急
//演示public E removeFirst()
//演示public E removeLast()
//演示public E pop()
System.out.println(list);
//删除首句
System.out.println(list.remove());//与removeFirst等效
System.out.println(list.removeFirst());
System.out.println(list.pop());//与上面方法等效,都是删除表头
//删除尾句
System.out.println(list.removeLast());
//删除了两个首句,和两个尾句的集合
System.out.println(list);//[最难将息, 三杯两盏淡酒]
}
}