首页 > 代码库 > java 小结3 hashcode和equals I/o问题

java 小结3 hashcode和equals I/o问题

我需要把星期天看的一些东西记录下来,要不然会忘记。

hashCode、equals:

   1)每个java对象都有hashCode和equals方法。

java的终极类是object类,那么object类是如何来标注自己呢,就是object这个类是如何来区分对方。就是使用它们的hashcode和equals来推断。

    (hashcode是通过hash算法实现的)

  2)JVM每new一个object,都会讲Object丢到一个Hash(哈希表)里去,这样下次比较或者获取这个对象的时候就可以根据对象的hashcode去这个表来取,可以提高效率。

我们必须知道java是有内存限制的,所以理论上是不可以无限次new的。

    先比较hashcode,如果这个链表上还有其他数据就用equals。

我们可能会问,那直接使用equals不就得,当然,这是可以的。但是我们要看到hashcode的效率问题,hashcode主要的用途就是减少每次调用equals。

 3)关于重写Hashcode和equals的问题:

   一般情况下,我们是不需要重写这两个函数的。想Integer Double这类的对象,java已经为我们重写了这两个函数,这也是为什么只要两个字符串内容一样他们的equals就是一样的,按道理不应该,因为equals比较的是对象的引用。

    需要重写的情况:就是当我们使用map里面的hashmap这类东西的时候,如果我们用自定义类作为键值就必须重写,否则会找不到类。因为类是继承object的,会使用object的hashcode

所以两个值一样的数据,在这里面就会变成两个数。

就是使用自定义的key,才需要重写。

 

I/O:

   File类:可以是文件,也可以是文件目录。通过File类我们可以获取文件的一定属性。

   流:这个反正就是一系列数据,我也说不清。

java的输入输出:(1)字符输出、输入流(Writer、Reader)(2)字节输出、输入流。 (InputStream、OutPutStream)

 (好像还有stdIO)

区别

     (1)读写单位不同

        字节流以字节(8bit)为单位,字符流以字符为单位,每次读取的字节就要看采用的字符映射了。

   (2)处理对象不同

      字节流可以处理所有类型对象(图片,视频,文本。。。)

      字符流只能是字符类型

 

注意:字节流是无法直接转换为字符输出的,因为读取的单位不同,可以将数组字节转换为string了在输出。。