Java学习笔记——Collection之List

目录

一、List相关概念

二、ArrayList

(一)ArrayList特点

(二)ArrayList相关方法

三、Vector

四、LinkedList

(一)LinkedList特点

(二)LinkedList相关方法

五、代码

1、ArrayList

2、Vector

3、LinkedList


一、List相关概念

List接口也是一个顶层接口,继承了Collection接口;

List接口常用的实现类:ArrayList,Vector ,LinkedList

List集合的特点:

  • 集合中的元素可以重复;
  • 集合的元素是有序的,各元素插入的顺序就是各元素的顺序;
  • 集合的元素可通过索引来访问。

二、ArrayList

ArrayList是一个动态数组,也是常用的集合。

(一)ArrayList特点

优点:

  • 支持自动改变大小的功能
  • 可以灵活的插入元素
  • 可以灵活的删除元素

缺点:

  • 在速度上比一般的数组慢

(二)ArrayList相关方法

(1)添加元素

// 初始化
ArrayList<String> language = new ArrayList<String>();
ArrayList<String> cs = new ArrayList<String>();

// 添加元素
System.out.println("------add():将对象添加到结尾------");
language.add("Java");
language.add("Python");
System.out.println(language);

System.out.println("------add(int index, Eelement):将元素插入ArrayList的指定位置------");
language.add(1, "C++" );
System.out.println(language);

System.out.println("------addAll():将集合中所有的元素添加到另一个集合中------");
cs.addAll(language);
System.out.println(cs);
------add():将对象添加到结尾------
[Java, Python]
------add(int index, Eelement):将元素插入ArrayList的指定位置------
[Java, C++, Python]
------addAll():将集合中所有的元素添加到另一个集合中------
[Java, C++, Python]

(2)删除元素

// 删除元素
System.out.println("------remove(Object o):删除指定元素------");
cs.remove("C++");
System.out.println(cs);

System.out.println("------remove(int index):删除指定位置元素------");
cs.remove(1);
System.out.println(cs);
------remove(Object o):删除指定元素------
[Java, Python]
------remove(int index):删除指定位置元素------
[Java]

(3)访问元素

// 访问元素
System.out.println("------get()------");
System.out.println(language.get(0));
System.out.println(language.get(1));
System.out.println("------indexOf()------");
System.out.println(language.indexOf("Java"));
System.out.println(language.indexOf("Python"));
------get()------
Java
Python
------indexOf()------
0
1

(4)修改元素

// 修改元素
language.set(0, "I love Java!");
System.out.println("------set()------");
System.out.println(language);
------set()------
[I love Java!, Python]

(5)List转换为数组

// List转换为数组
String [] strArr = language.toArray(new String[] {});
System.out.println("------toArray():List转换为数组------");
System.out.println(Arrays.toString(strArr));
------toArray():List转换为数组------
[I love Java!, C++, Python]

(6)数组转换为List

// 数组转换为List
List<String> list = Arrays.asList(strArr);
System.out.println("------asList():数组转换为List------");
System.out.println(list);
------asList():数组转换为List------
[I love Java!, C++, Python]

(7)List排序

// 排序
List<Integer> nums = new ArrayList<Integer>();
Random random = new Random(1);
for (int i = 0; i < 10; i++){
    nums.add(random.nextInt(10));
}
System.out.println("------未排序前------");
System.out.println(nums);
Collections.sort(nums);
System.out.println("------排序后------");
System.out.println(nums);
------未排序前------
[5, 8, 7, 3, 4, 4, 4, 6, 8, 8]
------排序后------
[3, 4, 4, 4, 5, 6, 7, 8, 8, 8]

三、Vector

Vector 类实现了一个动态数组。和 ArrayList 很相似,但是两者是不同的:

  • Vector 是同步访问的。
  • Vector 包含了许多传统的方法,这些方法不属于集合框架。
  • 扩容:ArrayList扩容后的数组长度增加50%,Vector扩容后的数组增加一倍。 

 栈是Vector的一个子类,它实现了一个标准的后进先出的栈。

堆栈只定义了默认构造函数,用来创建一个空栈。 堆栈除了包括由Vector定义的所有方法,也定义了自己的一些方法。

下面的程序说明这个集合所支持的几种方法

import java.util.EmptyStackException;
import java.util.Stack;

public class Day25 {
    static void showPush(Stack<Integer> st, int a) {
        st.push(a);
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }

    static void showPop(Stack<Integer> st) {
        System.out.print("pop -> ");
        Integer a = st.pop();
        System.out.println(a);
        System.out.println("stack: " + st);
    }

    public static void main(String args[]) {
        Stack<Integer> st = new Stack<Integer>();
        System.out.println("stack: " + st);
        showPush(st, 42);
        showPush(st, 66);
        showPush(st, 99);
        showPop(st);
        showPop(st);
        showPop(st);
        try {
            showPop(st);
        } catch (EmptyStackException e) {
            System.out.println("empty stack");
        }
    }
}
stack: []
push(42)
stack: [42]
push(66)
stack: [42, 66]
push(99)
stack: [42, 66, 99]
pop -> 99
stack: [42, 66]
pop -> 66
stack: [42]
pop -> 42
stack: []
pop -> empty stack

四、LinkedList

(一)LinkedList特点

LinkedList是一个双向链表,允许存储任何元素(包括null),其主要特性如下:

  • LinkedList所有的操作都是双向性的。
  • LinkedList不是线性安全的。
  • LinkedList 继承了 AbstractSequentialList 类。
  • LinkedList 实现了 Queue 接口,可作为队列使用。
  • LinkedList 实现了 List 接口,可进行列表的相关操作。
  • LinkedList 实现了 Deque 接口,可作为队列使用。
  • LinkedList 实现了 Cloneable 接口,可实现克隆。
  • LinkedList 实现了 java.io.Serializable 接口,即可支持序列化,能通过序列化去传输。

(二)LinkedList相关方法

(1)表的创建

// 链表的创建
LinkedList<String> language = new LinkedList<String>();
LinkedList<String> cs = new LinkedList<String>();

(2)添加

// 添加元素
System.out.println("------add(E e):末尾添加元素------");
language.add("C");
language.add("C++");
language.add("Java");
System.out.println(language);

System.out.println("------add(int index, E e):指定位置添加元素------");
language.add(2, "Python");
System.out.println(language);

System.out.println("------addAll(Collection c):将一个集合所有的元素添加到链表后------");
cs.addAll(language);
System.out.println(cs);

System.out.println("------addFirst(E e):头部添加元素------");
language.addFirst("Head");
System.out.println(language);

System.out.println("------addLast(E e):尾部添加元素------");
language.addLast("Tail");
System.out.println(language);
------add(E e):末尾添加元素------
[C, C++, Java]
------add(int index, E e):指定位置添加元素------
[C, C++, Python, Java]
------addAll(Collection c):将一个集合所有的元素添加到链表后------
[C, C++, Python, Java]
------addFirst(E e):头部添加元素------
[Head, C, C++, Python, Java]
------addLast(E e):尾部添加元素------
[Head, C, C++, Python, Java, Tail]

(3)删除

// 删除元素
System.out.println("------remove():删除并返回第一个元素------");
System.out.println("删除之前: " + cs);
System.out.println("删除返回的第一个元素: " + cs.remove());
System.out.println("删除之后: " + cs);

System.out.println("------removeFirst():删除并返回第一个元素------");
System.out.println("删除之前: " + cs);
System.out.println("删除返回的第一个元素: " + cs.removeFirst());
System.out.println("删除之后: " + cs);

System.out.println("------removeLast():删除并返回最后一个元素------");
System.out.println("删除之前: " + cs);
System.out.println("删除返回的最后一个元素: " + cs.removeLast());
System.out.println("删除之后: " + cs);
------remove():删除并返回第一个元素------
删除之前: [C, C++, Python, Java]
删除返回的第一个元素: C
删除之后: [C++, Python, Java]
------removeFirst():删除并返回第一个元素------
删除之前: [C++, Python, Java]
删除返回的第一个元素: C++
删除之后: [Python, Java]
------removeLast():删除并返回最后一个元素------
删除之前: [Python, Java]
删除返回的最后一个元素: Java
删除之后: [Python]

(4)访问

// 访问元素
System.out.println("------getFirst():返回第一个元素------");
System.out.println("返回第一个元素: " + language.getFirst());

System.out.println("------getLast():返回最后一个元素------");
System.out.println("返回最后一个元素: " + language.getLast());

System.out.println("------get(int index):返回指定位置的元素------");
System.out.println("返回指定位置的元素: " + language.get(2));
------getFirst():返回第一个元素------
返回第一个元素: Head
------getLast():返回最后一个元素------
返回最后一个元素: Tail
------get(int index):返回指定位置的元素------
返回指定位置的元素: C++

(5)修改

// 修改元素
System.out.println("------set(int index, E e):修改指定位置元素值------");
language.set(0, "aa");
System.out.println(language);
------set(int index, E e):修改指定位置元素值------
[aa, C, C++, Python, Java, Tail]

(6)迭代

// 元素的迭代
System.out.println("------元素的迭代------");
for (int i = 0; i < language.size(); i++){
    System.out.println(language.get(i));
}

// for-each实现迭代
for (String l: language){
    System.out.println(l);
}
------元素的迭代------
aa
C
C++
Python
Java
Tail
aa
C
C++
Python
Java
Tail

(7)LinkedList转换为数组

// LinkedList转换为数组
String [] strArr = language.toArray(new String[] {});
System.out.println("------toArray():转换为数组------");
System.out.println(Arrays.toString(strArr));
------toArray():转换为数组------
[aa, C, C++, Python, Java, Tail]

五、代码

1、ArrayList

import java.util.*;

public class Day24 {
    public static void main(String[] args){
        // 初始化
        ArrayList<String> language = new ArrayList<String>();
        ArrayList<String> cs = new ArrayList<String>();

        // 添加元素
        System.out.println("------add():将对象添加到结尾------");
        language.add("Java");
        language.add("Python");
        System.out.println(language);

        System.out.println("------add(int index, Eelement):将元素插入ArrayList的指定位置------");
        language.add(1, "C++" );
        System.out.println(language);

        System.out.println("------addAll():将集合中所有的元素添加到另一个集合中------");
        cs.addAll(language);
        System.out.println(cs);

        // 删除元素
        System.out.println("------remove(Object o):删除指定元素------");
        cs.remove("C++");
        System.out.println(cs);

        System.out.println("------remove(int index):删除指定位置元素------");
        cs.remove(1);
        System.out.println(cs);

        // 访问元素
        System.out.println("------get()------");
        System.out.println(language.get(0));
        System.out.println(language.get(1));
        System.out.println("------indexOf()------");
        System.out.println(language.indexOf("Java"));
        System.out.println(language.indexOf("Python"));

        // 修改元素
        language.set(0, "I love Java!");
        System.out.println("------set()------");
        System.out.println(language);

        // List转换为数组
        String [] strArr = language.toArray(new String[] {});
        System.out.println("------toArray():List转换为数组------");
        System.out.println(Arrays.toString(strArr));

        // 数组转换为List
        List<String> list = Arrays.asList(strArr);
        System.out.println("------asList():数组转换为List------");
        System.out.println(list);

        // 排序
        List<Integer> nums = new ArrayList<Integer>();
        Random random = new Random(1);
        for (int i = 0; i < 10; i++){
            nums.add(random.nextInt(10));
        }
        System.out.println("------未排序前------");
        System.out.println(nums);
        Collections.sort(nums);
        System.out.println("------排序后------");
        System.out.println(nums);
    }
}

2、Vector

import java.util.EmptyStackException;
import java.util.Stack;

public class Day25 {
    static void showPush(Stack<Integer> st, int a) {
        st.push(a);
        System.out.println("push(" + a + ")");
        System.out.println("stack: " + st);
    }

    static void showPop(Stack<Integer> st) {
        System.out.print("pop -> ");
        Integer a = st.pop();
        System.out.println(a);
        System.out.println("stack: " + st);
    }

    public static void main(String args[]) {
        Stack<Integer> st = new Stack<Integer>();
        System.out.println("stack: " + st);
        showPush(st, 42);
        showPush(st, 66);
        showPush(st, 99);
        showPop(st);
        showPop(st);
        showPop(st);
        try {
            showPop(st);
        } catch (EmptyStackException e) {
            System.out.println("empty stack");
        }
    }
}

3、LinkedList

import java.util.Arrays;
import java.util.LinkedList;

public class Day26 {
    public static void main(String[] args){
        // 链表的创建
        LinkedList<String> language = new LinkedList<String>();
        LinkedList<String> cs = new LinkedList<String>();

        // 添加元素
        System.out.println("------add(E e):末尾添加元素------");
        language.add("C");
        language.add("C++");
        language.add("Java");
        System.out.println(language);

        System.out.println("------add(int index, E e):指定位置添加元素------");
        language.add(2, "Python");
        System.out.println(language);

        System.out.println("------addAll(Collection c):将一个集合所有的元素添加到链表后------");
        cs.addAll(language);
        System.out.println(cs);

        System.out.println("------addFirst(E e):头部添加元素------");
        language.addFirst("Head");
        System.out.println(language);

        System.out.println("------addLast(E e):尾部添加元素------");
        language.addLast("Tail");
        System.out.println(language);

        // 删除元素
        System.out.println("------remove():删除并返回第一个元素------");
        System.out.println("删除之前: " + cs);
        System.out.println("删除返回的第一个元素: " + cs.remove());
        System.out.println("删除之后: " + cs);

        System.out.println("------removeFirst():删除并返回第一个元素------");
        System.out.println("删除之前: " + cs);
        System.out.println("删除返回的第一个元素: " + cs.removeFirst());
        System.out.println("删除之后: " + cs);

        System.out.println("------removeLast():删除并返回最后一个元素------");
        System.out.println("删除之前: " + cs);
        System.out.println("删除返回的最后一个元素: " + cs.removeLast());
        System.out.println("删除之后: " + cs);

        // 访问元素
        System.out.println("------getFirst():返回第一个元素------");
        System.out.println("返回第一个元素: " + language.getFirst());

        System.out.println("------getLast():返回最后一个元素------");
        System.out.println("返回最后一个元素: " + language.getLast());

        System.out.println("------get(int index):返回指定位置的元素------");
        System.out.println("返回指定位置的元素: " + language.get(2));

        // 修改元素
        System.out.println("------set(int index, E e):修改指定位置元素值------");
        language.set(0, "aa");
        System.out.println(language);

        // 元素的迭代
        System.out.println("------元素的迭代------");
        for (int i = 0; i < language.size(); i++){
            System.out.println(language.get(i));
        }

        // for-each实现迭代
        for (String l: language){
            System.out.println(l);
        }

        // LinkedList转换为数组
        String [] strArr = language.toArray(new String[] {});
        System.out.println("------toArray():转换为数组------");
        System.out.println(Arrays.toString(strArr));
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值