• java基础-arrayList


     
    ArrayList:
    结构之钱了解了,ArrayList()会构造出一个初始容量=10的空的列表;
    ArrayList()的增加和删除都是拷贝数组到新的数组(如果当前数组容量不足的话),把数组内的元素全部前移/后移去完成,然后把引用指向新的数组;
    LinkedList()是直接删除引用节点,并且重新改变前后节点的引用到前后元素;
    ArrayList()可以通过下标迅速找到对应的元素;
    线程同步,同样ArrayList不是线程安全的list,和LinkedList一样;
    ArrayList()扩容是按照当前容量的1.5倍扩容的(源码内写死的):
    /**
    * Increases the capacity to ensure that it can hold at least the
    * number of elements specified by the minimum capacity argument.
    *
    * @param minCapacity the desired minimum capacity
    */
    private void grow(int minCapacity) {
    // overflow-conscious code
    int oldCapacity = elementData.length;
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    if (newCapacity - minCapacity < 0)
    newCapacity = minCapacity;
    if (newCapacity - MAX_ARRAY_SIZE > 0)
    newCapacity = hugeCapacity(minCapacity);
    // minCapacity is usually close to size, so this is a win:
    elementData = Arrays.copyOf(elementData, newCapacity);
    }
    右移,>>为右移运算符,num >> 1,相当于num除以2
    int newCapacity = oldCapacity + (oldCapacity >> 1);
    这里相当于1.5倍;
     
     
    hashCode()和equals():
    到现在只用过equals,没用过hashCode;
    hashCode() 和 equal() 和 ==,在Java里用来对比两个对象是否相等一致;
    ==是对比引用地址(变量是否相等);
    equal是对比值(对比对象是否相等,默认等同于==,的也是对比对象的地址,但是对比对象内容的时候不等同==);
    hashCode是对比哈希值(返回哈希值,如果两个对象相等,那么它们的哈希值一定是相同的);
    如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的);
    但是有一点:
    重写的equal()里一般比较的比较全面比较复杂,这样效率就比较低,而利用hashCode()进行对比,则只要生成一个hash值进行比较就可以了,效率很高,那么hashCode()既然效率这么高为什么还要equal()呢? 因为hashCode()并不是完全可靠,有时候不同的对象他们生成的hashcode也会一样(生成hash值得公式可能存在的问题),所以hashCode()只能说是大部分时候可靠,并不是绝对可靠;
     
     
    1.equal()相等的两个对象他们的hashCode()肯定相等,也就是用equal()对比是绝对可靠的。 
    2.hashCode()相等的两个对象他们的equal()不一定相等,也就是hashCode()不是绝对可靠的。
  • 相关阅读:
    SQL Server 快速大数据排序方法
    RGB颜色名称与色值对应表
    Visual Studio 2017 Android 调试无法连接到虚拟机
    sqlite 使用 cte 及 递归的实现示例
    C# 判断文件编码
    SQL点点滴滴_SQL分页查询
    SQL点点滴滴_判断字段或者字符中是否包含有特殊字符
    SQL点点滴滴_公用表表达式(CTE)递归的生成帮助数据
    【Oracle】Update方法
    SQL点点滴滴_DELETE小计
  • 原文地址:https://www.cnblogs.com/meijsuger/p/9567115.html
Copyright © 2020-2023  润新知