(三十一)、List接口

List接口

List集合特点:有序可重复

1、 实现List接口的集合类中的元素是有序的,且允许重复。
2、 List集合中的元素都对应一个整数型的序号记载其在集合中的位置(每个元素都有索引),可以根据序号存取集合中的元素。
3、 List集合不仅支持Iterator还支持List集合专用迭代器ListIterator(双向迭代器)

相比Collection新增方法

List接口比Collection接口中新增的几个实用方法:
1、 public Object get(int index) 返回列表中的指定位置的的元素
2、 public Object add(int index, Object element);  在列表的指定位置插入指定元素.将当前处于该位置的元素(如果有的话)和所有后续元素向右移动
3、 public Object set(int index, Object new) ; 用指定元素替换列表中指定位置的元素
4、 public Object remove(int index) 移除列表中指定位置的元素
5、 public ListIterator listIterator() 返回此列表元素的列表迭代器(List专有)
注意:list集合中的元素的索引与数组中元素的索引一样,均是从0开始。

常用实现类

ArrayList
ArrayList是使用数组结构实现的List集合

优点:
1、 对于使用索引取出元素有较好的效率 //随机读取效率非常高
2、 可以使用索引来快速定位对象
缺点:删除和添加效率极低

ListDemo.java

public class ListDemo {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        List<String> temp = new ArrayList<>();
        list.add("小明");// 继承自collection的方法
        list.add(0, "老王");
        temp.add("aa");
        temp.add("bb");
        list.addAll(temp);
        temp.add("cc");
        // list.removeAll(temp);// 移除交集
        list.retainAll(temp);// 保留交集
        // list.set(1, "小绿");

        Iterator<String> iterator = list.iterator();
        while (iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
}

Demo2.java

public class Demo2 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        // 双向迭代器
        // list.listIterator(1);// 设置迭代器初始位置
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            listIterator.add("rr");// 添加到下一个元素之前
            System.out.println(listIterator.next());
        }
        while (listIterator.hasPrevious()) { // 判断前面有没有元素
            System.out.println(listIterator.previous());
        }
    }
}

Demo3.java

public class Demo3 {
    public static void main(String[] args) {
        List<String> list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        list.add("d");
        // 对list来说,一般用for循环遍历
        for (int i = 0, size = list.size(); i < size; i++) {
            System.out.println(list.get(i));
        }
        // for each
        for (String string : list) {
            System.out.println(string);
        }

        String[] arr = new String[list.size()];
        String[] arrs = list.toArray(arr);
        for (String s : arrs) {
            System.out.println(s);
        }

    }
}

LinkedList
LinkedList是使用双向链表实现的集合。该类也实现了Deque双向队列接口。Deque定义了很多操作双向队列的方法。

Vector
在List 接口中还有一个子类:Vector。Vector类从整个 Java 的集合发展历史来看,Vector算是一个元老级的类,在 JDK1.0 的时候就已经存在此类。但是到了Java2(JDK1.2)之后重点强调了集合框架的概念,所以先后定义了很多的新接口(如:List 等)。但是考虑到一大部分的人已经习惯了使用 Vector类,因此设计者就让 Vector 类多实现了一个 List接口,这样才将其保留下来。但是因为其是 List 接口的子类,所以 Vector 类的使用与之前的并没有太大的区别。但是Vector内部有一些比较老的方法名比较长的方法。

Stack

Vector提供一个Stack子类,它用于模拟了“栈”这种数据结构,“栈”通常是指“后进先出”(LIFO)

主要提供了三个方法:
pop
push
peak

StackDemo.java

public class StackDemo {
    public static void main(String[] args) {
        Stack<String> stack = new Stack<String>();
        // 入栈
        stack.push("q");
        stack.push("w");
        stack.push("e");
        stack.push("r");
        stack.push("t");
        stack.push("y");
        for (String s : stack) {
            System.out.println(s);
        }

        // 出栈
        String s = stack.pop();
        System.out.println(s);
        for (String ss : stack) {
            System.out.println(ss);
        }
        // peek
        String peek = stack.peek();// 查看栈顶的元素
        System.out.println(peek);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值