zoukankan      html  css  js  c++  java
  • 关于 疯狂java 程序员基本功的16课 随笔

                       读  疯狂java 程序员基本功的16课 总结

    1,

    实例变量(非 static)无论在什么地方声明和赋值,都会被 编译到 构造方法里面进行真正的定义和赋值,源代码里构造方法里面的变量最后执行。

    类变量(static)在类初始化时赋初值,而 new 只是单纯的调用 构造方法,无论这个类是否已经初始化完毕(比如,在 A 类中 定义一个 A 类型的类(static)变量)

    如果是 final 类型的,只有在定义时直接赋值,才会有 宏 的特性;

     当 new 一个子类时,

         父类调用的方法被 子类重写过,那么实际上执行的是子类的方法;

         父类调用的变量恰好和子类同名同类型时,那么实际上还是调用的是父类的变量;

    2,

    HashSet 的 底层 是 HashMap,java把 HashSet 的 元素作为 HashMap 的 key,而这个 HashMap 的 value 是一个Object 对象,之所以说 HashSet 集合无序且不可重复,因为 HashMap的 key 无序且不可重复,当 key 重复时,会覆盖这个 key 对应的 value,但是不会重新覆盖原有的 key ,当然,我们可以使用 LinkedHashMap 来解决 顺序问题

    TreeSet 的底层 是 TreeMap ,java把 TreeSet 的 元素作为 TreeMap 的 key,而这个 TreeMap 的 value 是一个Object 对象,之所以说 TreeSet 集合可以 自动排序或者 自定义排序 且不可重复,因为 HashMap的 key 可以 自动排序或者 自定义排序 且不可重复,当 key 重复时,会覆盖这个 key 对应的 value,但是不会重新覆盖原有的 key ,这里之所以会自动排序或者自定义排序,是因为 TreeMap 的数据结构是 红黑树

    HashMap 的无序特性是因为 java 是采用 hashCode 对 key 进行存储,所以不会按照 插入 的顺序来存储元素,并且 HashMap 还会对 元素进行自动扩容,一旦自动扩容,那么所有元素的 hashCode 就要重新定义,所以扩容前和扩容后的 顺序也不同。

    HashMap的不可重复的特性 是由 源码 决定的,通过比较 hashCode 和 (== 运算符 或者 equals方法)

    TreeMap 的不可重复的特性 是由 Comparable 比较器决定的(可自定义比较方法 或者 采用默认方法)

  • 相关阅读:
    产生唯一随机码的方法分析。
    给新人的建议:浅谈需求分析的一些方法
    类似"&# x6B22;"这类16进制网页编码的编码与解码方法
    正则表达式判断是否为数字
    Eclipse中一直building workspace...的问题
    Myeclipse Svn中用户名和密码修改问题专家详解
    【实用】常用JS验证函数大全
    float取2位小数,末位四舍五入(转自fjj)
    建立职场B计划
    各路由器的默认密码列表
  • 原文地址:https://www.cnblogs.com/jichen/p/14841007.html
Copyright © 2011-2022 走看看