• java 集合 Arraylist lambda 运用


    Arraylist  (可以问空,null,可以重复,是有序的(就是放进去和拿出来是有序的,),线程不安全(如果有1个公共的ArrayLIst对象,2个线程同时访问的话,如果都修改的话,就会有不安全,如果每个线程都new的对象,那就不存在线程不安全。所以我们可以ThreadLocal,定义每个线程都有自己的ArrayList对象,))

    底层是用数组实现的。如果new ArrayList();默认初始数组长度是10,

    如果添加的元素大于10的,他会自动去扩容grow,扩容机制是  oldCapacity +(oldCapacity>>1) ,就是 oldCapacity*1.5,里面用到Arrays.copyOf(原来数组,新数组长度)

    list的长度就是实际的size

    add(E e) 方法 ,先判断是否要扩容,数组最大长度是Integer.MAX_VALUE

    然后让 类里面的elementData[size++] = e

    add(int index,E e) 方法

    先判断index是否有没有越界  rangeCheckForAdd(index)

    在进行扩容                             ensureCapacityInternal(size + 1);

    然后用系统的数组复制           System.arraycopy(elementData, index, elementData, index + 1,size - index);   参数1. 原来数组,2 原来数组要复制的起始位置,3目标数组,4,目前数组的开始位置,5 复制的长度

     然后复值                               elementData[index] = e;

    长度加+1                                size++;

    get(int index) 方法 

    先判断索引下标有没有越界

    根据索引下标获取数组里面的值

    set(int index, E e) 替换原先这个下标的数组的值

    remove(int index) 根据下标删除对应的值,如果删除的是不是最后一个,进行了数组的重新copy

    但是这边删除元素,最好用iterator 来remove,如果连续删除2个元素

    比如 list.remove(1); list.remove(2), 这样其实是删除下表示 1,和3 的元素,因为 在删除1的时候,数组有重新复制新的。然后删除2个时候其实是原来3的下标

    还有1中情况,比如用iterator 去循环的时候,用list.remove的话,这样会报错 ConcurrentModificationException ,因为在list的任何操作的时候对 modCount 进行处理,然后在 it里面会去判断 这个是是否等于expectedModCount,如果不等的话,就报错

    clear() 把所有的元素清空。

    modCount   这个东西,每次对list 添加,删除  都会给这个值加1,下面代码就会报错。

    看下面图,这边就报错。 因为 我在获取 迭代器之后,还对list进行了add操作,这样 在循环的时候就会去比较 modCount 和 expectedModCount ,如果不等的话,就报错错。

    ***************************lambda**********************

    如果用lambda 来处理ArrayList

    foreach

    实现的方式:

    定义一个接口里面就一个方法。

    然后在一个main方法里面

    这类似就是foreach

    2 stream的用法

    第1个list2 里面是方法里,因为map 里面有返回值,所以要有return

    其他的 是因为就一句话,没有{} 这个,所以不姚renturn,类似于做一下计算。

    map 类似做一下运算之后

    filter 过滤一下集合,其实2个感觉是一样的。

    removeif 方法

    这个是删除里面包含2的

    sort方法

    这边参数是2个,因为sort 里面 Comparator  的compare的方法,其实Comparator 里面也有equals方法,为什么不要实现呢,因为所有类都继承object方法。Object都实现了。

  • 相关阅读:
    二维卷积层
    gluon 实现多层感知机MLP分类FashionMNIST
    gluon实现softmax分类FashionMNIST
    gluon 实现线性回归
    GPU使用
    Python迭代器和生成器
    L2范数惩罚项,高维线性回归
    多项式拟合
    模型选择,欠拟合,过拟合
    多层感知机MLP的gluon版分类minist
  • 原文地址:https://www.cnblogs.com/tangwangming/p/8760705.html
Copyright © 2020-2023  润新知