zoukankan      html  css  js  c++  java
  • List集合及新特性引用

    ArrayList就是动态数组,也是一个对象。

    创建一个ArrayList对象,该对象存放在堆内存中,且是一个内存连续的内存区域。

    1、ArrayList是用数组实现的,这个数组的内存是连续的,不存在相邻元素之间还隔着其他内存。

    2、索引ArrayList时,速度比原生数组慢是因为你要用get方法,这是一个函数调用,而数组直接用[ ]访问,相当于直接操作内存地址,速度当然比函数调用快。

    3、新建ArrayList的时候,JVM为其分配一个默认或指定大小的连续内存区域(封装为数组)。

    4、每次增加元素会检查容量,不足则创建新的连续内存区域(大小等于初始大小+步长),也用数组形式封装,并将原来的内存区域数据复制到新的内存区域,
    然后再用ArrayList中引用原来封装的数组对象的引用变量引用到新的数组对象:

    elementData = Arrays.copyOf(elementData, newCapacity);

    5.集合的访问方式:
    java集合类中元素的访问分为随机访问和顺序访问。
    随机访问一般是通过index下标访问,行为类似数组的访问。
    而顺序访问类似于链表的访问,通常为迭代器遍历。
    以List接口及其实例为例。ArrayList是典型的随机访问型,而LinkedList则是顺序访问型。
    List接口既定义了下标访问方法又定义了迭代器方法。
    所以其实例既可使用下标随机访问也可以使用迭代器进行遍历。但这两种方式的性能差异很明显。

    ArrayList和LinkedList随机访问的区别

    ArrayList是数组结构,随机访问具有常量时间。
    LinkedList是链表结构,随机访问分为两步:

    • 首先根据index查找Node,通常是一个for循环查找index对应的Node
    • 然后返回Node中存储的元素
      ArrayList的下标遍历性能远高于LinkedList的下标遍历。
      总结:ArrayList 查询快,增删慢;LinkedList查询慢,增删快。

    将list集合作为一个数据源转为其他类型的集合;jdk1.8的新特性list.stream();
    使用源调用方法collect(Collector<? super T,A,R> collector),使用Collector对此流的元素
    执行mutable reduction Collector ;例如:
    Map<String, ThirdHotelExpandInfoTemp> dbMap = dbList.stream().collect(
    Collectors.toMap( a -> a.getSourceId()+":"+a.getThirdHotelId(), a -> a) );

    以下将将字符串累加到ArrayList中:
    List asList = stringStream.collect(Collectors.toList());

    使用流的filter方法,过滤特定的数据;
    // 过滤无效酒店信息
    thirdHotelInfoList = thirdHotelInfoList.stream()
    .filter(o -> o.getName() != null && !o.getName().toString().equals(""))
    .filter(o -> o.getCityName() != null && !o.getCityName().toString().equals(""))
    .filter(o -> o.getLangitude() != null && !o.getLangitude().toString().equals(""))
    .filter(o -> o.getLatitude() != null && !o.getLatitude().toString().equals(""))
    .collect(Collectors.toList());

    //ArrayList里面的removeIf方法就接受一个Predicate参数,采用如下Lambda表达式就能把,所有null元素删除
    list.removeIf(e -> e == null);

  • 相关阅读:
    【7.19 graphshortestpath graphallshortestpaths函数】matlab 求最短路径函数总结
    【7.18 灾情巡视路线代码】
    【7.18总结】KM算法
    【7.17总结】 匈牙利算法(二分图最大匹配)
    动态规划 多段图最短路 有向图
    matlab 单元最短路 Dijkstra算法 无向图
    hdu 3536【并查集】
    博弈随笔
    AtCoder Regular Contest 094 D Worst Case【思维题】
    CODE FESTIVAL 2017 qual B C 3 Steps(补题)
  • 原文地址:https://www.cnblogs.com/fengleixue/p/8259317.html
Copyright © 2011-2022 走看看