• JDK API


    Application Programming Interface
    字符串、集合、文件、输入输出、网络、多线程

    文档注释
    文档注释是功能级注释,用来说明一个类,一个方法或一个常量的,因此只在上述三个地方使用。
    文档注释可以使用Java自带的命令javaDoc来对这个类生成手册

    Java.lang.String使用了final稀释,不能被继承
    字符串底层封装了字符数组及针对字符数组的操作算法
    字符串一旦创建,对象内容不可改变,连接字符串会创建新对象
    Java字符串在内存中采用Unicode编码方式,任何一个字符对用两个字节的定长编码

    一.String类

    String用来表示一个字符串
    特点:

    • java.lang.String使用了final修饰,不能被继承
    • 字符串底层封装了字符数组及针对字符数组的操作算法
    • 字符串一旦创建,对象永远无法改变,但字符串引用可以重新赋值
    • Java字符串在内存中采用Unicode编码方式,任何一个字符对应两个字节的定长编码

    String常量池

    Java在堆内存中开辟了一段空间用于缓存所有使用字面量形式创建的字符串对象,并在后期再次使用该字面量创建字符串时重用对象,避免内存中堆积大量内容一样的字符串对象来减小内存开销

    Java为了提高性能,直接量字符串创建后会缓存在常量池中
    对于重复出现的字符串直接量,JVM会首先在常量池中查找,如果存在即返回该对象地址。

    编译器

    编译器在编译期间若遇到几个计算表达式,发现在编译期可以确定结果时就会进行计算,并将结果编译到class文件中,
    这样以来JVM每次执行字节码文件就无需再计算了

    字符串常用方法

    int length()
    返回当前字符串的长度

    indexOf()
    检索给定字符串在当前字符串中的位置,若当前字符串不含有给定内容则返回值为 -1

    substring()
    截取当前字符串中指定范围内的字符串,两个参数分别为开始位置的下标和结束位置的下标。
    重载的方法是从指定位置开始截取到字符串末尾

    trim()
    去除一个字符串两边的空白字符

    charAt()
    返回当前字符串指定位置上的字符

    startsWith()和endsWith()
    判断当前字符串是否是以给定的字符串开始或结束的

    toLowerCase()和toUpperCase()
    将当前字符串中的英文部分转换为全大写或全小写

    valueOf()
    String提供了一组重载的静态方法
    是将其他类型转换为String

    StringBuilder类

    由于String的不变对象特性,修改内容会创建新对象
    String不适合频繁修改操作,性能低,开销大
    Java提供了StringBuilder类

    StringBuilder

    StringBuilder是专门用来修改String的一个API,
    内部维护一个可变的char数组,修改都是在这个数组上进行的
    内部会自动扩容,修改速度和性能开销优异,并且提供了修改字符串的常见对应的方法:增删改插

    StringBuffer

    两个类的功能是一致的,StringBuffer始于JDK1.0
    StringBuilder始于JDK1.5

    • StringBuffer是线程安全的,同步处理的,性能稍慢
    • StringBuilder是非线程安全的,并发处理的,性能稍快

    修改字符串的常见方法

    toString():是Object提供的方法,将内容以字符串形式返回
    append():追加内容
    replace():替换部分内容
    delete():删除部分内容
    insert():插入操作
    reverse():翻转字符串

    正则表达式

    用来描述一个字符串的内容格式,通常用来匹配一个字符串的内容是否符合格式要求

    基本语法
    [ ]
    表示一个字符,该字符可以是[ ]中指定的内容
    预定义字符

    • .
      " . " 表示任意一个字符,没有范围限制
    • \d
      表示任意一个数字,等同于[0-9]
    • \w
      表示任意一个单词字符,等同于[a-zA-Z0-9_ ]
    • \s
      表示任意一个空白字符
    • \D
      表示不是数字
    • \W
      不是单词字符
    • \S
      不是空白字符

    量词

    • ?
      表示前面的内容出现0-1次
      例如:
      [abc]? 可以匹配:a 或 b 或 c 或什么也不写

    • +
      表示前面的内容出现1次以上
      [abc]+ 可以匹配:aaaaaaaaaa…或abcabcbabcbabcbabcbabbabab…
      但是不能匹配:什么都不写或abcfdfsbbaqbb34bbwer…

    • 星号
      表示前面的内容出现任意次(0-多次)
      匹配内容与+一致,只是可以一次都不写

    • {n}
      表示前面的内容出现n次
      例如:
      [abc]{3} 可以匹配:aaa 或 bbb 或 aab
      不能匹配:aaaa或aad

    • {n,m}
      表示前面的内容出现最少n次最多m次
      [abc]{3,5} 可以匹配:aaa 或 abcab 或者 abcc
      不能匹配:aaaaaa 或 aabbd

    • {n,}
      表示前面的内容出现n次以上(含n次)
      [abc]{3,} 可以匹配:aaa 或 aaaaa… 或 abcbabbcbabcbabcba…
      不能匹配:aa 或 abbdaw…

    • ( )
      用于分组,是将括号内的内容看做是一个整体
      例如:
      (abc){3} 表示abc整体出现3次. 可以匹配abcabcabc.
      不能匹配aaa 或abcabc
      (abc|def){3}表示abc或def整体出现3次.
      可以匹配: abcabcabc 或 defdefdef 或 abcdefabc

    String支持正则表达式的相关方法

    • matches方法
      boolean matches(String regex)
      使用给定的正则表达式验证当前字符串是否满足格式要求,满足则返回true.否则返回false

    • split方法
      String[] split(String regex)
      将当前字符串按照满足正则表达式的部分进行拆分,将拆分后的每部分以数组形式返回

    • replaceAll方法
      String replaceAll(String regex,String str)
      将当前字符串中满足正则表达式的部分替换为给定内容

    Object类

    Object是所有类的顶级超类,
    其中有两个经常被子类重写的方法

    toString()与equals()

    ==对于引用类型的意义是比较是否为同一个对象
    equals则是比较两个对象的值(对象内容,特征是否一致)

    包装类

    java定义了8个包装类,目的是为了解决基本类型不能直接参与面向对象开发的问题,
    使得基本类型可以通过包装类的实例以对象的形式存在.

    • 其中数字类型的包装类都继承自java.lang.Number,而char和boolean的包装类直接继承自Object
    • Number是一个抽象类,定义了一些方法,目的是让包装类可以将其表示的基本类型转换为其他数字
      类型

    包装类的静态方法

    • valueOf()
      包装类的静态方法valueOf将基本类型转换为包装类
    • intValue()
    • doubleValue()
      获取包装类对象中表示的基本类型值
      用于将引用包装类型转换为基本整数或基本双精度浮点数。
    • 通过包装类获取其表示的基本类型的取值范围
      Integer.MAX_VALUE
      Long.MIN_VALUE
    • parseInt()
      将字符串转换为整数类型(int)
    • parseDouble()
      将字符串转换为浮点数类型(double)

    Collection接口

    什么是集合
    集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便
    java.util.Collection是所有集合的顶级接口,Collection下面有多种实现类,因此我们有更多的数据可提供选择。

    Collection下面有两个常见的子接口

    • java.util.List
      线性表,是可重复集合,并且有序
    • java.util.Set
      不可重复的集合,大部分实现类是无序

    判定元素的标准是依靠元素自身equals比较的结果,
    为true就认为是重复元素

    元素操作的方法

    • boolean and(E e)
      向当前集合中添加一个元素,当元素成功添加后,返回true

    • int size()
      返回当前集合的元素个数

    • boolean isEmpty()
      判断当前集合是否为空集

    • clear()
      清空集合

    • 集合的很多操作与元素的equals方法相关
      集合重写了Object的toString方法,输出的格式为
      [元素1.toString(),元素2.toString(),…]

    • boolean contains(Object o)
      判断当前集合是否包含给定元素,这里判断的依据是给定元素是否与集合现有元素存在equals比较为true的情况

    • remove()
      remove用来从集合删除给定元素,删除的也是与集合中equals比较为true的元素
      对于可以存放重复元素的集合而言,只删除一次

    集合只能存放引用类型元素,并且存放的是元素的引用(地址)

    集合间的操作

    集合提供了如 并集,删交集,判断包含子集等操作

    • boolean addAll(Collection c)
      将给定集合的所有元素添加到当前集合中,
      当前集合若发生了改变则返回true
    • boolean removeAll(Collection c)
      删除当前集合中与给定集合中的共有元素

    集合的遍历

    Collection提供了统一的遍历集合方式:迭代器模式

    java.util.Iterator接口

    • Iterator iterator()
      该方法会获取一个用于遍历当前集合元素的迭代器

    迭代器提供的相关方法

    • boolean hasNext()
      判断集合是否还有元素可以遍历
    • E next()
      获取集合下一个元素(第一次调用时就是获取第一个元素,以此类推)

    迭代器要求遍历的过程中不得通过集合的方法增删元素
    否则会抛出异常:ConcurrentModificationExceptoin(并发的修改异常)
    使用迭代器的remove方法

    增强型for循环

    JDK5之后推出了一个特性:增强型for循环

    • 可以使用相同的语法遍历集合或数组
    • for(元素类型 变量名 :集合或数组){
      循环体
      }
      该新循环是java编译器认可的,并非虚拟机

    泛型

    JDK5之后推出的另一个特性:泛型

    • 泛型也称为参数化类类型,在类中指定其属性、方法参数或返回值的类型
    • 若不指定泛型的具体类型则默认为原型Object

    List接口

    • java.util.List接口,继承自Collection
    • java.util.List接口是所有List的接口
    • List集合是可重复集,并且有序,提供了一套可以通过下标操作元素的方法

    LIst常用实现类

    • java.util.ArrayList:
      内部使用数组实现,查询性能更好
    • java.util.LinkedList:
      内部使用链表实现,首尾增删元素更好

    List集合常见方法

    • E get(int index)
      获取指定下标对应的元素
    • E set(int index,E e)
      将给定元素设置到指定位置,返回值为该位置原有的元素。为替换元素操作
    • List subList(int start,int end)
      获取当前集合中指定范围内的子集(含头不含尾)

    List集合提供一对重载的add,remove方法

    void add(int index,E e)
    将给定元素插入到指定位置
    E remove(int index)
    删除并返回指定位置上的元素

    集合与数组的转换

    集合转换为数组

    Collection提供了一个方法:toArray
    可以将当前集合转换为一个数组
    重载的toArray方法要求传入一个数组,内部会将集合所有元素存入该数组,后将其返回。如果给定的数组长度不足,则方法内部会自行根据给定数组类型创建一个与集合size一致长度的数组并将集合元素存入后返回

    数组转换为List集合

    数组的工具类Arrays

    数组的工具类Arrays提供了一个静态方法:asList()
    可以将一个数组转换为一个List集合

    • 对数组转换的集合进行元素操作就是对原数组对应的操作
    • 数组是定长的,因此对该集合进行增删元素的操作是不支持的,会抛出异常:
      java.lang.UnsupportedOperationException
    • 若希望对集合进行增删操作,则需要自行创建一个集合,然后将该集合元素导入
    • 所有的集合都支持一个参数为Collection的构造方法,作用是在创建当前集合的同时包含给定集合中的所有元素

    集合的排序

    java.util.Collections类

    Collections是集合的工具类,里面定义了很多静态方法用于操作集合
    Collections.sort(List list)方法
    对List集合进行自然排序(从小到大)

    • Collections.sort(List list)方法要求集合中的元素类型必须实现接口Comparable
      该接口中有一个抽象方法compareTo,这个方法用来定义元素之间比较大小的规则,所以只有实现了该接口的元素才能利用这个方法比较出大小而实现排序操作
    • 实际开发中,我们并不会我们自己定义的类(如果该类作为集合元素使用)去实现Comparable接口
      这会对我们的程序有侵入性

    侵入性

    当我们调用某个API功能时,其要求我们为其修改其他额外的代码,这个现象就是侵入性,侵入性越强的API越不利于程序的后期可维护性,应当尽量避免

    重载的Collections.sort(List list,Comparator c)方法

    重载的sort方法要求我们再传入一个Comparator"比较器",该比较器用来为集合元素临时定义一种比较规则,从而将List集合中的元素通过该比较器比较大小后进行排序

    Comparator接口

    实际应用中我们需要实现该接口为集合元素提供比较规则
    compare方法用来定义两个参数o1,o2的大小关系
    返回值用来表示o1与o2的大小关系
    当返回值>0时,应当表示的含义是o1>o2
    当返回值<0时,表示o1 当返回值=0时,表示o1与o2相等

    Lambda表达式

    Lambda表达式JDK8之后推出的新特性

    • (参数列表) ->{
      方法体
      }
    • 当使用匿名内部类创建时,如果实现的接口只有一个抽象方法,则可以使用Lambda表达式代替,使代码更简洁优雅
    • 在java中可以使用Lambda表达式代替匿名内部类创建所需要实现的接口时,该接口上都有一个注解:
      @FunctionalInterface
    • Lambda表达式实际上是编译器认可的,最终会被改回为内部类方式创建
    • 源代码中使用Lanbda可以更突出原匿名内部类中重写方法的逻辑
    • JDK8之后,List集合自己推出了一个sort方法,可以排序自身元素
      并且需要传入一个比较器来定义比较规则

    基于Lambda表达式的集合遍历

    JDK8之后,java在集合Collection接口中添加了一个用于遍历集合元素的forEach方法
    可以基于Lambda表达式遍历集合元素

    File类

    FIle类的每一个实例可以表示硬盘(文件系统)中的一个文件或目录(实际上表示的是一个抽象路径)
    使用FIle可以做到:

    • 访问其表示的文件或目录的属性信息,例如:名字、大小、修改时间等
    • 创建和删除文件或目录
    • 访问一个目录中的子项,但是FIle不能访问文件数据

    文件操作常用方法

    • getName()
      获取名字
    • length()
      获取文件大小
    • canRead()
      是否可读
    • canWrite()
      是否可写
    • isHidden()
      是否隐藏
    • exists()
      判断当前File表示的位置是否已经实际存在该文件或目录
    • createNewFile()
    • 创建一个新文件
    • delete()
      将FIle表示的文件删除
    • mkdir()
      创建当前FIle表示的目录
    • mkdirs()
      创建当前FIle表示的目录,同时将所有不存在的父目录一同创建
    • delete()
      删除一个目录,但是只能删除空目录

    访问一个目录中的所有子项

    • File[] listFiles()
      访问一个目录中的所有子项
      将当前目录中的所有子项返回,返回的数组中每个File实例表示其中的一个子项

    • boolean isFile()
      判断当前File表示的是否为一个文件

    • boolean isDirectory()
      判断当前File表示的是否为一个目录

    获取目录中符合特定条件的子项

    • 重载File[] listFiles(FileFilter filter)
      该方法要求传入一个文件过滤器,并仅将满足该过滤器要求的子项返回

    java.util.Map接口

    是所有Map的顶级接口,规定了Map的相关功能

    • Map:查找表,对应的结构看起来像是一个多行两列的表格.其中左列称为"key",右列称为"value"
    • Map总是以"key-value"成对存入数据
    • Map要求key不允许重复(equals比较)
    • Map总是根据key获取对应的value

    Map的常用实现类

    • java.util.HashMap
      称为散列表或哈希表,使用散列算法实现的Map,当今查询速度最快的数据结构
    • java.util.TreeMap
      使用二叉树实现的Map

    Map常用方法

    • V put(Key k , Value v)
      将一组键值对存入到Map中
      由于Map要求key不允许重复
      如果使用重复的key存入新的value时则是替换value操作,此时put方法将被替换的value返回.否则为null

    • V get(Object key)
      根据key获取对应的value.如果指定的key在Map中不存在则返回值为null

    • int size()
      返回当前Map的元素个数,一组键值对为1个元素

    • void clear()
      清空Map

    • boolean containsKey(Object key)
      判断当前Map是否包含给定的key

    • boolean containsValue(Object value)
      判断当前Map是否包含指定的value

    • V remove(Object key)
      根据给定的key删除对应的减值对,返回值为被删除键值对中对应的value

    Map的遍历所使用的方法

    • Set< Key > keySet()
      将当前Map中所有的key以一个Set集合形式返回

    • Set< Entry > entrySet()
      将当前Map中每一组键值对以一个Entry实例表示,并将所有的Entry实例(所有键值对)以一个Set集合形式返回

    • Collection< V > values()
      将当前Map中所有的value以一个集合形式返回

    • forEach((k,v)-> );
      Map支持使用lambda表达式形式遍历

  • 相关阅读:
    【数据结构-树】哈夫曼树及其应用
    【机器学习】欠拟合及过拟合与学习曲线、误差来源
    c++---模板篇
    KubeEdge 1.12版本发布,稳定性、安全性、可扩展性均带来大幅提升
    cpolar内网穿透
    网络结构模式,协议,端口,网络模型,arp
    QTreeView 使用 AbstractItemModel开发
    【Python从入门到进阶】67、Pandas使用stack和pivot实现数据透视
    Spring的创建和使用
    SSM+MySQL替换探索 openGauss对比postgresql12
  • 原文地址:https://blog.csdn.net/weixin_59095717/article/details/133899131