List集合各个实现类

ArrayList

  • ArrayListS是可重复,有序的集合
  • 通过索引找到元素位置
  • ArrayList可以在添加和删除元素后动态增长和缩小
  • 一个其容量能够动态增长的动态数组,能快速查询元素,但添加和删除比较慢
  • 通过测试后, 遍历ArrayList时,使用随机访问(即,通过索引序号访问)效率最高,而使用迭代器的效率最低
代码如下
public static void main(String[] args) {
       ArrayList<Integer> str=new ArrayList<>();
       System.out.println("初始化长度是:"+str.size());
       str.add(23);
       str.add(23);
       str.add(53);
       str.add(12);
       str.add(10);
//     可以通过索引添加元素与元素
       str.add(3,7);
       //输出顺序与添加顺序一致
       System.out.println("添加元素后"+str);
       System.out.println("添加后的长度是:"+str.size());
       //数字只能通过索引删除元素,输入添加数字会超出索引范围
      str.remove(2);
      System.out.println("添加元素后"+str);
      System.out.println("添加后的长度是:"+str.size());
      //遍历的元素顺序与添加的元素位置保持一致
       for(Integer ele:str) {
             System.out.println("遍历后:"+ele);
       }
System.out.println("------------>");
       //可以使用Collection.sort()进行排序
       Collections.sort(str);
       for(Integer ele1:str) {
             System.out.println("排序后"+ele1);
       }
}
结果是
初始化长度是:0
添加元素后[23, 23, 53, 7, 12, 10]
添加后的长度是:6
添加元素后[23, 23, 7, 12, 10]
添加后的长度是:5
遍历后:23
遍历后:23
遍历后:7
遍历后:12
遍历后:10
<--------------->
排序后7
排序后10
排序后12
排序后23
排序后23
LinkedList
  • LinkedList是List和Deque接口的双向链表实现
  • 除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列,也允许为空。
代码如下
public static void main(String[] args) {
        LinkedList<String> str=new LinkedList<>();
        str.add("小明");
        str.add("小花");
        str.add("小陈");
        System.out.println("输出添加的元素:"+str);
        //添加一个元素 ,相当于向尾部添加一个元素,等同于addLast(E)方法
        str.add("小马");
        System.out.println("添加后的元素:"+str);
        //向前添加一个元素
        str.addFirst("小城");
        System.out.println("添加后的元素"+str);
        //按照索引位置添加元素,在第四位添加一个元素
        str.add(3,"小亮");
        System.out.println("索引添加后的元素"+str);
        //删除最后一个元素
        String strLast=str.removeLast();
        System.out.println("删除最后一个元素"+str);
        //删除第一个元素
        String strFirst=str.removeFirst();
        System.out.println("删除第一个元素"+str);
 }
}
结果:
输出添加的元素:[小明, 小花, 小陈]
添加后的元素:[小明, 小花, 小陈, 小马]
添加后的元素[小城, 小明, 小花, 小陈, 小马]
索引添加后的元素[小城, 小明, 小花, 小亮, 小陈, 小马]
删除最后一个元素的[小城, 小明, 小花, 小亮, 小陈]

总结:1.如果需要查找或者遍历元素,使用ArrayList,ArrayList中的get(int index)给出O(1)的性能,而LinkedList性能为O(n) 。因为ArrayList是一个动态数组,而数组是以一块连续内存存储的,数组在随机访问性是最好的。
     2.如果需要频繁删除于添加,使用LinkedList, LinkedList删除操作给出O(1)性能,而ArrayList提供可变性能:在最坏情况下(在删除第一个元素时为O(n) )和在最佳情况下为O(1) (在删除最后一个元素时),同理插入性能也是一样,因为LinkedList以链表实现的集合,存储位置是不连续的。
     3.性能比较:ArrayList维护索引和元素数据,而 inkedList维护元素数据和相邻节点的两个指针,所以LinkedList更消耗内存
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值