Java常用类集合IO-简单版

Posted ls-summer

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java常用类集合IO-简单版相关的知识,希望对你有一定的参考价值。

Java常用类、集合、IO

常用类

Object

  • hashCode()
  • toString()
  • clone()
  • getClass()
  • notify()
  • wait()
  • equals()

Math

常用的数学运算

Random

  • 生成随机数 UUID

File

  • 创建文件
  • 查看文件
  • 修改文件
  • 删除文件

包装类

自动拆箱装箱

Data

  • Data
  • SimpleDateFormat yyyy-MM-dd HH:mm:ss
  • Calendar(建议使用)

String

  • 不可变性 final
  • 操作量较少

StringBuffer

  • 可变长 append()
  • 多线程数据量较大 线程安全 效率高

StringBuilder

  • 可变长
  • 单线程数据量较大 线程不安全 效率低

集合框架

Collection

List(有序可重复)

ArrayList数组 (常用)
  • add()
  • remove()
  • contains()
  • size() ...
LinkedList链表 (常用)
  • getFirst() addFirst() removeFirst()
  • getLast() addLast() removeLast()
  • pop() push() ...
Vector
Stack

Set(无序不可重复)

HashSet(常用)
TreeSet

Iterator迭代器

Map

HashMap(重点,天天用)

  • JDK 1.7 数组+链表

  • JDK 1.8 hash表 = 数组+链表+红黑树

  • 为什么链表长度在大于8的时候变成红黑树?

    答:如果链表的长度没有达到这个长度的话,因为红黑树它自身的这种维护,插入的这种维护的开销也是非常大的,因为每次去插入一个元素的时候,很有可能会破坏掉它的平衡。也就是说hashmap的put操作非常多的时候,极有可能会影响插入的性能,因为插入一个元素的话,即有可能会打破它原有的平衡,那么每时每刻它都需要在恢复平衡(也就是红黑树的再平衡,需要左旋右旋,以及重新着色),就非常影响性能。

  • 为什么数组的长度必须是2的指数次幂?

    解释:Hashmap为了实现存取高效,要尽量减少碰撞,就是要尽量做到:把数据分配均匀,保证每个链表长度大致相同,我们就需要一个算法来实现;将存入的数据保存到那个链表中的算法;而这个算法实际就是取模:hash%length

    ? 但是,大家都知道这种运算不如位移运算快。因此,源码中做了优化 hash&(length - 1) 也就是说hash%length = hash&(length - 1)

    • 那为什么是2的n次方呢?

      因为2的n次方实际就是1后面n个0,而2的n次方-1,实际就是n个1

      例如:长度为8时候,3&(8-1)=3 2&(8-1)=2 不同位置上,不碰撞。而长度是5的时候 3&(5-1)=0 2&(5-1)=0 都在0上,出现了碰撞。所以保证容积是2的n次方,是为了保证再做(length-1)的时候,每个位都能&1,也就是和1.....1111进行与运算。

  • 0.75??

TreeMap

Collections工具类

泛型

  • 约束,避免类型转换之间的问题

IO流

字节流

  • 输出 OutputStream
  • 输入 InputStream

字符流(中文必须用字符流)

  • Reader
  • Wirter

处理流

  • buffer
    • BufferOutputStream
    • BufferInputStream
    • BufferedWriter
    • BufferedReader
  • Data
    • DataOutputStream
    • DatarInputStream
  • 转换流
    • InputStreamReader
    • OutputStreamWriter
  • Filter
    • FilterInputStream
    • FilterOutputStream
    • FileWriter
    • FilterReader
  • Print
    • PrintStream
    • PrintWriter

序列化/反序列化

Serializable 接口

transient 关键字 (透明的 某个参数不需要序列化 )

以上是关于Java常用类集合IO-简单版的主要内容,如果未能解决你的问题,请参考以下文章

Java知识体系最强总结(2021版)

Java常用包说明

Java开发常用包接口和类

java中常用的包类以及包中常用的类方法属性-----io包

Java五个最常用的集合类之间的区别和联系

java常用基础知识点 (持续追加)