java基础

来源:互联网 发布:名模a穆雅斓的淘宝真假 编辑:程序博客网 时间:2024/06/05 05:46
  1. >> :右移运算符,num >> 1,相当于num除以2; >>> : 无符号右移,忽略符号位,空位都以0补齐。负数的二进制数为补码加一,右移时高位补1,而>>>则只管自己。
  2. parenthese是括号的意思。。。
  3. string在equals中进行了重写,比的是值,但==依旧比较对象。equals在Object里直接写的就是return (this==equals);除了equals被重写的时候,其实==和equals是一样的,而==比较的是jvm中的地址。hashcode返回对象32位jvm地址,当equals被重写时hashcode也要被重写,因为hashcode说过,相等对象拥有相同的hash码,这也是为了hashtable检索式两个都要比较。(long本身重写了hashcode)。String源码中使用private final char value[];保存字符串内容,因此String是不可变的,dan因此substring啥的并不会影响效率。
  4. 谈一下hashmap和hashcode的区别:
    • 两个类的继承体系有些不同。虽然都实现了Map、Cloneable、Serializable三个接口。但是HashMap继承自抽象类AbstractMap,而HashTable继承自抽象类Dictionary。其中Dictionary类是一个已经被废弃的类
    • HashMap是支持null键和null值的,而HashTable在遇到null时,会抛出NullPointerException异常.HashMap在实现时对null做了特殊处理,将null的hashCode值定为了0,从而将其存放在哈希表的第0个bucket中
    • 话说它们的数据结构差不多。这里写图片描述
      都是哈希桶存Entry数组(key,value,hashcode,next),但其再具体的算法上却有所差异,比如每次的扩充容量。在1.8中,Entry对象是通过红黑树来进行查找的。
    • 线程同步方式不同。简单来说就是,如果你不需要线程安全,那么使用HashMap,如果需要线程安全,那么使用ConcurrentHashMap。HashTable已经被淘汰了,不要在新的代码中再使用它。淘汰了还比个啥。。。聚聚
  5. 最近对设计模式有了一些新的体悟,在做ns-3nbiot的时候,我想通过那一个个sapprovider,sapuser就是ns3使用的设计模式,正如callback这种设计模式,你需要通过某种巧妙的方法(设计),来实现某种模式的需求,也许我们看到的一个复杂系统,正是由一个个设计模式所得的设计模式具体实例所搭建而出的。
  6. lambda表达式是一个闭包closure,经常运用回调这种设计模式,最近终于理解了闭包和回调的含义。
  7. 我感觉在复习java基础时我是一个拥有强大武器却不知如何去使用之人,是时候学习设计模式了。
  8. 代理:runtime创建全新的类,(有些程序自动生成代码文件重新编译,慢且需要compiler),代理类有以下方法,实现接口的方法和object里的方法。
    无法定义新的代码,必须提供一个可供调用的handler,正如我之前所说,handler是一个钩子,
    创建代理对象需要使用Proxy类中的newProxyInstance方法,有三个参数:一个类加载器(null就使用默认的啦),一个Class的数组,一个要实现的handler
    代理的使用多种多样!呼叫远程服务器,在running期间使用接口调用行为,追踪函数调用,不想学了,反正估计用不到