1.3 java核心内库(上)

任务一

常用的包

  • java.lang 核心包 由JVM自动导入
  • System类
  • String类
  • java.util包 工具包
  • Scanner类
  • Random类
  • List类
  • java.io 输入输出包
  • FileInputStream类
  • FileOutputStream类
  • java.net 网络包
  • ServerSocket类
  • Socket类
  • java.sql 数据包
  • DriverManager类
  • Connection接口

常用方法

  • Object类 对象 万物皆对象
  • 如果没有extends关键字声明其父类,默认父类为java.lang.Object类
  • Object() 无参构造方法
  • super()调用父类的无参方法
  • boolean equals(Object) 对象.调用
  • 调用对象和参数对象 是否相等
  • equals用来比较的是两个对象的内容是否相等,由于所有的类都是继承自java.lang.Object类的,所以适用于所有对象,如果没有对该方法进行覆盖的话,调用的仍然是Object类中的方法,而Object中的equals方法返回的却是== 的判断。
  • 重写实现比较内容
  • 非空对象 null会引起空指针异常
  • 非空和空比 false
  • hashCode 总协议 返回对象的哈希码值 内存地址的编号
  • 若调用equals相等 则hashCode结果相等,反之不等
  • 想保持一致性 要重写
  • toString 返回对象的字符串表示形式
  • 格式:包名.类名@哈希码值的十六进制
  • 返回相关特征,或者更加有意义的数据,需要重写方法
  • 使用print println打印 引用或字符串拼接是自动调用该方法
  • getclass 反射机制 返回 this 的运行时类Object。

包装类

  • 将基本数据类型的变量,通过打包封装变成对象,而负责声明为成员变量进行对象化处理的相关类,就是包装类。

  • 已经有包装类

  • java.lang.Integer int的一个包装类

  • 提供int到Integer之间的转换
  • String到Integer之间的转换
  • 自动装箱和拆箱技术 通过赋值运算符
  • Integer it5 = 100;装箱
  • int ib = it5;拆箱
  • 自动装箱池 128~127
  • java.lang.Double double的一个包装类
  • java.lang.Boolean Boolean的一个包装类
  • java.lang.Character char的一个包装类
  • 拆箱 value
  • 装箱valueOf

Math类

  • BigDecimal 精准计算
  • BigInteger 超过long长度的数据处理

总结

![[模块三任务一总结.jpg]]

任务二

String

  • “123” 字面值 直接量

  • 常量池

  • 字符串放到常量池中 提升性能
  • 常用构造方法
  • String()
  • 常量优化机制
  • 常用成员方法

![[常用成员方法.jpg]]

![[常用成员方法2.jpg]]

  • String类方法的使用

  • 正则表达式 格式验证

  • ![[正则表达式.jpg]]

  • 相关方法
    boolean matches(String regex)

  • 规则

  • 开头是^(异或运算符),结尾是$
  • 格式验证 无法验证内容
  • 表示\ 要增加一个 \

总结

![[模块二任务二总结.jpg]]

任务三

可变字符串类 (重点)

  • StringBulider
    • StringBuilder线程不安全,性能略高。

构造方法

  • 无参 初始容量16
  • capacity 根据指定容量来构造对象 容量为参数指定大小
  • String 根据指定字符串来构造对象 容量16 + 字符串长度

成员方法

  • capacity 总量
  • length 实际量
  • insert 指定位置前插入
  • append 追加

底层采用Byte数组来存放字符内容

笔试考点

  • 对象本身可以修改为什么成员方法还有返回值
    连续调用

  • StringBuilder 转String
    toString
    反之 直接

  • String StringBuffer StringBuilder 效率依次提高

  • StringBuffer
  • StringBuffer对象则代表一个字符序列可变的字符串,当一个StringBuffer被创建以后,通过StringBuffer提供的append()、insert()、reverse()、setCharAt()、setLength()等方法可以改变这个字符串对象的字符序列。 一旦通过StringBuffer生成了最终想要的字符串,就可以调用它的toString()方法将其转换为一个String对象。
  • StringBuffer是线程安全的
    StringBuffer是如何实现线程安全的呢?
    StringBuffer类中实现的方法:
    ![[Pasted image 20210808072054.png]]
    StringBuilder类中实现的方法:
    ![[Pasted image 20210808072107.png]]
    StringBuffer类中的方法都添加了synchronized关键字,也就是给这个方法添加了一个锁,用来保证线程安全。

java 8 之前的相关类 (熟悉)

  • System类
  • long.currentTimeMillis当前时间与1970年1月1日毫秒时间
  • java.util.Date
  • 年减1970 月减1
  • Calendar类 全球化

  • 多态

![[多态.jpg]]
![[多态2.jpg]]

Java 8 增加的日期相关类(熟悉)

  • java8日期

Java 8通过发布新的DateTime APl来进一步加强对日期与时间的处理。

java.time包∶该包日期/时间API的基础包。

  • LocalDate 年月日
  • LocalTime当前时间
  • LocalDateTime日期时间

java.time.chrono包∶该包提供对不同日历系统的访问。

java.time.format包:该包能够格式化和解析日期时间对象。

java.time.temporal包∶该包包含底层框架和扩展特性。

java.time.zone包:该包支持不同时区以及相关规则的类。

  • LocalDateTime

默认时区

  • Instant

  • DateTimeFormatter 格式调整

总结

![[模块三任务三总结.jpg]]

任务四

Queue集合

  • 先进先出
  • Linklist

集合由来

  • 当需要在Java程序中记录单个数据内容时,则声明一个变量。

  • 当需要在Java程序中记录多个类型相同的数据内容时,声明一个一维数组。

  • 当需要在Java程序中记录多个类型不同的数据内容时,则创建一个对象。

  • 当需要在Java程序中记录多个类型相同的对象数据时,创建一个对象数组。

  • 当需要在Java程序中记录多个类型不同的对象数据时,则准备一个集合。

  • 框架结构

![[框架结构.jpg]]

Collection(收藏、容器)集合

  • ctrl查源码

  • 常用方法(熟练)

  • 接口不可实例化,不能创建对象,用多态

  • contains判定是否包含(单个)containsAll(多个)

    • 工作原理:拿着参数对象和集合中元素进行对比用equals

    • equals:
      判断地址
      判断内容

    • Integer和String已经重写equals

  • retainAll交集

    • 集合发生变化为True反之false
  • remove 删除

  • void clear(); 清空集合

  • int size(); 返回包含对象的个数

  • boolean isEmpty(); 判断是否为空

  • boolean equals(Object o) 判断是否相等

  • int hashCode() 获取当前集合的哈希码值

  • Object[] toArray() 将集合转换为数组

Iterator iterator() 获取当前集合的迭代器 Collection继承Iterator

Iterator常用方法 迭代器

  • 遍历方法
  • toString
  • Iterator
  • boolean hasNext() 判断集合中是否有可以迭代/访问的元素
  • E next() 用于取出一个元素并指向下一个元素
  • void remove() 用于删除访问到的最后一个元素

For each 迭代器简化版

  • for each 的语句格式:
  • for(元素类型t 元素变量x : 遍历对象obj){

引用了x的java语句;

}

List接口

  • 基本概念
  • ArraysList 动态 支持下标访问增删不方便 线性安全 取代Vector
    *** ArraysList类** 当调用add方法添加元素时会给数组申请长度为10的一维数组,扩容原理是:原始长度的1.5
  • LinkedList 双向链表 访问不方便 增删方便
  • Stack 动态 后进先出 叫做栈
  • Vector 动态 线性安全 过时 官方未过时
  • 元素可重复,有先后顺序
  • 常用方法
  • void add(int index, E element) 向集合中指定位置添加元素
  • boolean addAll(int index, Collection extends E> c) 向集合中添加所有元素
  • E get(int index) 从集合中获取指定位置元素
  • int indexOf(Object o) 查找参数指定的对象
  • int lastIndexOf(Object o) 反向查找参数指定的对象
  • E set(int index, E element) 修改指定位置的元素
  • E remove(int index) 删除指定位置的元素
  • List subList(int fromIndex, int toIndex) 用于获取子List

总结

![[模块三任务四总结.jpg]]

任务五

泛型机制(熟悉)

  • 基本概念
  • 集合名称的右侧 <该集合可以存放的类型>

  • 编译有效,运行不区分

  • 菱形特性
    前后的类型相同 用<>代替 后面数据类型省略

  • 集合中支持的数据类型不同,不可以直接赋值

  • 底层原理
  • E形式参数,负责占位。实际参数给形式参数初始化。
  • 本质:参数化类型,直接传递数据类型,E形式参数,负责站位
  • 自定义泛型接口 添加<>
  • 可以有多个数据类型,<E,T,…>
  • 与普通接口区别:接口后面加上类型参数列表
  • 泛型类
  • 与普通类区别:接口后面加上类型参数列表
  • 父类有泛型,子类可以选择保留也可以选择指定泛型,还可以增加泛型
  • 泛型方法
  • 输入的参数是泛型参数,不是具体参数。
  • 对象.调用,实现初始化。
  • 只有在new对象时才能确定类型。
    ![[Pasted image 20210805105811.png]]
  • 泛型在继承上的使用
  • String是Object的子类,但是List< String>并不是List< Object>的子类。
  • 通配符的使用
  • < ?>无限制通配符,传入任意类型参数,不能放对象,不可添加元素。
  • < ? extends E> 表示类型的上界是E,只能是E或者E的子类。
  • < ? super E>表示下界是E,只能用E或者E的父类。

Set集合(熟悉)

  • 基本概念
  • 与List集合平级
  • 特点没有先后放入次序,且不允许重复,用于查重
  • 主要实现类:HashSet、TreeSet、LinkedHashSet。哈希表、红黑树
  • HashSet 哈希表管理
  • TreeSet 红黑树管理
  • LinkedHashSet 内部维护一个双向链表,链表中记录元素插入集合的先后顺序,后期便于迭代。
  • 哈希表
    元素为一个单项链表的一维数组

    ![[Pasted image 20210805144946.png]]
  • 红黑树
    ![[Pasted image 20210805145137.png]]
  • 常用方法
  • 参考Collection集合方法
  • HashSet集合放入元素的过程及原理

![[Pasted image 20210805155917.png]]

  • 思考:为什么重写equals方法后,要重写hashCode?
    答案:通过equals方法来确认元素是否相等,重写hashCode方法保证这两个元素得到的哈希码值相同, 从而得到相同的索引位置,此时只需要比较该索引位置元素是否相同即可,从而提升效率避免重复元素出现
  • TreeSet集合的概念
  • 二叉树
    ![[Pasted image 20210805160945.png]]

  • 有序二叉树
    左小于根小于右
    ![[Pasted image 20210805160954.png]]

  • 红黑树
    TreeSet底层采用红黑树,新元素与老元素比较,确认合理位置。

  • 比较方法
    自然排序:实现java.lang,Comparable接口。
    比较器比较:实现java.utilComparator接口。

  • 区别:自然排序单一,比较器多元,优先比较器。

  • Lambda表达式
  • 从Java8开始支持Lambda表达式:(参数列表)-> {方法体}

Map集合(重点)

  • 基本概念
  • 存取元素的基本单位是:单对元素,类型参数如下:
    K - 此映射所维护的(Key)的类型,相当于目录
    V- 映射值(Value)的类型,相当于内容
  • Key不可重复,K、V一一对应。
  • 主要实现类:HashMap类,TreeMap类,LinkedHashMap类,LinkedHashMap类,Hashtable类,Properties类。
  • HashMap:哈希表
  • TreeMap:红黑树
  • LinkedHashMap:双向链表
  • Hashtable:线程安全,K、V不能为null
  • Properties:Hashtable子类,处理属性文件,K、V不能为null
  • Map集合是面向查询优化的数据结构,在大数据量情况下有着优良查询性能。
  • 通常用于K检索V的业务场景
  • Set和Map的区别

![[Pasted image 20210805182005.png]]

  • 相关常量
  • DEFAULT_INITIAL_CAPACITY : HashMap的默认容量是16。
  • DEFAULT_LOAD_FACTOR:.HashMap的默认加载因子是0.75。
  • threshold :扩容的临界值,该数值为︰容量*填充因子,也就是12。
  • TREEIEY_THRESHOLD:若Bucket中链表长度大于该默认值则转化为红黑树存储,该数值是8。
  • MIN_TREEIEY_CAPACITY:桶中的Node被树化时最小的hash表容量,该数值是64。
  • 常用方法

  • ![[Pasted image 20210805190010.png]]

  • 遍历方法

![[Pasted image 20210805214054.png]]

Collections类(熟悉)

  • ![[Pasted image 20210806064753.png]]
  • 容量大小 要撑开内存
    ![[Pasted image 20210806065436.png]]

总结

![[Pasted image 20210806070719.png]]

任务六作业

作业1

  • 题目
    1.分析以下需求,并用代码实现:
    (1)模拟Arrays.toString(int[] arr);方法,自己封装一个public static String toString(int[] arr);
    (2)如果int类型数组arr为null,toString方法返回字符串"null"
    (3)如果int类型数组arr长度为0,toString方法返回字符串"[]"
    (4)如果int类型数组arr的内容为{1,2,3,4,5},toString方法返回字符串"[1, 2, 3, 4, 5]"

  • code
    ![[Question1.java]]
    ![[StringTest.java]]

  • videos
    ![[1自己封装toString.mp4]]

作业2

  • 题目
    分析以下需求,并用代码实现:
    (1)定义一个Worker类型(属性私有、空参有参构造、set、get方法、toString方法、equals方法、hashCode方法),包含三个属性:姓名(String name)、年龄(int age)、工资(double salary),在Worker类中定义work方法打印一句话,如:“凤姐 正在工作”,其中"凤姐"代表当前对象的姓名
    (2)定义List集合,在List集合中增加三个员工,基本信息如下:
    “凤姐” 18 20000
    “欧阳峰” 60 8000
    “刘德华” 40 30000
    (3)在"欧阳峰"之前插入一个员工,信息为:姓名:“张柏芝”,年龄:35,工资3300
    (4)删除"刘德华"的信息
    (5)利用for 循环遍历,打印List 中所有员工的信息
    (6)利用迭代遍历,对List 中所有的员工调用work 方法
    (7)为Worker类重写equals 方法,当姓名、年龄、工资全部相等时候才返回true

  • code
    ![[ListTest.java]]
    ![[Worker.java]]

  • videos
    ![[2Worker.mp4]]

作业3

  • 题目
    分析以下需求,并用代码实现:
    (1)定义一个学生类Student,包含属性:姓名(String name)、年龄(int age)
    (2)定义Map集合,用Student对象作为key,用字符串(此表示表示学生的住址)作为value
    (3)利用四种方式遍历Map集合中的内容,格式:key:value

  • code
    ![[Student.java]]
    ![[StudentTest.java]]

  • videos
    ![[3Map集合.mp4]]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值