Java集合之List

List集合代表代表一个元素有序、可重复的集合,集合中每个元素都有其对应的顺序索引。List集合允许使用重复元素,可以通过索引来访问指定位置的集合元素。List集合默认按元素的添加顺序设置元素的索引,例如第一次添加的元素索引为0,第二次添加的元素索引为1…

list集合操作元素的方法

List集合作为Collection接口的子接口,当然可以使用Collection接口里面的全部方法。而且由于List集合是有序集合,因此List集合添加了一些根据索引来操作集合元素的方法。
在这里插入图片描述

ArrayList

例子:

import java.util.ArrayList;
import java.util.List;

public class ArrayListDemo {
    public static void main(String[] args) {
        List books=new ArrayList();
        //添加三个元素
        books.add("java从入门到放弃");
        books.add("java讲义");
        books.add("java零基础自学");
        System.out.println(books);
        //将新字符对象插入到第二个位置
        books.add(1,new String("前端html"));
        for (Object book : books) {
            System.out.println(book);
        }
        //删除第三个元素
        books.remove(2);
        System.out.println(books);
        //判定指定元素在list集合中的位置
        System.out.println(books.indexOf(new String("前端html")));
        //将第二个元素替换成新的字符串
        books.set(1,"java讲义");
        System.out.println(books);
        //截取list集合
        System.out.println(books.subList(1,2));

    }
}

结果如下:
在这里插入图片描述

上面的例子两个字符串显然不是同一个对象,但是list集合的indexof()方法依然可以返回1。用indexOf()方法判断元素的索引,如何判断两个对象相等的标准是只要通过equals()方法返回true即可。

java8为list集合添加了sort()和replaceAll()两个常用的默认方法,其中sort()方法需要一个Comparator对象来控制元素排序,程序可使用Lambda表达式来作为参数;而replaceAll()方法侧需要一个UnaryOperator来替换所有元素集合,UnaryOperator也是一个函数式接口,因此程序可使用Lambda表达式作为参数。以下是例子:

import java.util.ArrayList;
import java.util.List;

public class ArrayListDemo2 {
    public static void main(String[] args) {
        List books=new ArrayList();
        //添加四个元素
        books.add("java从入门到放弃");
        books.add("java讲义");
        books.add("java零基础自学");
        books.add("前端css入门");
        //使用目标类型为Comparator的Lambda表达式对List集合排序
        books.sort((o1, o2) -> ((String)o1).length()-((String)o2).length());
        System.out.println(books);
        //使用目标类型为UnaryOperator的Lambda表达式来替换集合中的所有元素
        books.replaceAll(ele->((String)ele).length());
        System.out.println(books);
    }
}

结果如下:
在这里插入图片描述

LinkedList

LinkedList类是List接口的实现类,这意味着它是一个List集合,可以根据索引来随机访问集合中的元素。除此之外,LinkedList还实现了Deque接口,可以被当成双端队列来使用,因此既可以被当成栈来使用,也可以当做队列来使用。

以下是例子:

import java.util.LinkedList;

public class LinkedListDemo {
    public static void main(String[] args) {
       LinkedList books=new LinkedList();
       //将字符串元素添加到队列的尾部
        books.offer("乖,摸摸头");
        //将字符串元素添加到栈的顶部
        books.push("你好");
        //将字符串元素添加到队列的头部(相当于栈的顶部)
        books.offerFirst("云边有个小卖铺");
        //遍历集合
        for (int i = 0; i < books.size(); i++) {
            System.out.println("遍历"+books.get(i));
        }
        //访问并不删除栈顶的元素
        System.out.println(books.getFirst());
        //访问并不删除队列中的最后一个元素
        System.out.println(books.peekLast());
        //将栈顶的元素弹出栈
        System.out.println(books.pop());
        System.out.println(books);
        //访问并且删除队列中的最后一个元素
        System.out.println(books.pollLast());
        System.out.println(books);
    }

}

以下是结果:
在这里插入图片描述

总结

ArrayList和LinkedList实现机制完全不同,ArrayList内部以数组的形式来保存集合中的元素,因此随机访问集合元素时有较好的性能;而LinkedList内部以链表的形式来保存集合中的元素,因此随机访问集合元素时性能较差,但在插入、删除时性能比较出色(只需改变指针所指的地址即可)

  • 如果需要遍历List集合元素,对于ArrayList,应该使用随机访问方法(get)来遍历集合元素,这样性能更好;对于LinkedList集合,则应该使用迭代器来遍历集合元素。
  • 如果需要经常插入、删除,则可以考虑Linkedlist集合
  • 如果多个线程需要同时访问List集合中的元素,开发者可以考虑使用Collection将集合包装成线程安全的集合。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值