欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

深入理解Java编程中的java.util工具包

最编程 2024-08-02 12:55:00
...

学习目的

  1. 了解JDK提供java开发框架、JRE环境
  2. 了解java开发的常用包,及其作用
  3. 学会查看每一个java包的底层源码实现
  4. 掌握java.util工具包的常用接口和类,以及常用的方法

java常见包

包名 解释 备注
java.util 常用工具类包
java.lang 程序设计基础类包 java核心类包
java.text 文本格式包 用于格式化和分析类,整理字符串类
java.io 输入、输出接口包 文件传输包
java.sql 数据库处理包 将 SQL 语句传递给数据库
java.beans 可复用、可重用组件 可视化操作组件

一、java.util

  1. 概念
    util包即java工具类包,是java开发框架中的万能工具。包含 collection 框架、遗留的 collection 类、事件模型、日期和时间设施、国际化接口等,提供各种实用工具类,如字符串标记生成器、随机数生成器和位数组。

1.1 接口

接口 名称 备注
Iterator 迭代器接口 迭代、遍历集合
Collection 线性集合接口 提供各种数据结构的集合
Comparator 集合排序比较函数 对集合对象强行排序
Map 键值对集合接口 key-value存储数据的集合
Queue 消息队列接口
EventListener 事件监听器

1.1.1 Iterator迭代器

  1. 简述
    Collection集合的父类接口。对 collection集合进行迭代遍历的迭代器,取代了 Java集合框架中的枚举Enumeration。
  2. 作用
    Collection子类通过调用itrator()方法,返回一个在当前collection集合对象上的迭代器对象,使用该迭代器对象对集合进行迭代遍历。
  3. 常见常见子接口和实现类
  • 子接口:Collection接口、XMLEventReader
  • 实现类:Scanner
  1. 底层实现及常用方法
  • boolean hasNext():如果collection集合中仍有元素可以迭代遍历,则返回 true
  • E next():返回对集合进行迭代得到的下一个元素,E为泛型(不指定数据类型)
  • void remove(Object o):从迭代器指向的 collection集合中移除迭代器返回的最后一个元素(可选操作 o)
//底层源码
public interface Iterator<E> {
    //判断是否有下一个可以迭代的元素
    boolean hasNext();
    //获取迭代得到的下一个元素
    E next();
    //接口的默认实现:移除集合中迭代得到的下一个元素
    default void remove() {
        throw new UnsupportedOperationException("remove");
    }
    //接口的默认实现:forEach循环增强遍历
    default void forEachRemaining(Consumer<? super E> action) {
        Objects.requireNonNull(action);
        while (hasNext())
            action.accept(next());
    }
}

1.1.2 Collection

  1. 简述
    Collection 是集合层次结构中的根接口。Collection表示一组对象,这些对象称为集合的元素。在Collection的子类集合中,一些集合是有序,且允许有重复的元素(如List);而另一些则是无序,且不允许有重复元素的(如Set)。
  2. 作用
    JDK 不提供Collection接口的任何直接实现,需要使用 多态和更具体的子接口(如 Set 、List)才能实现Collection接口,从而重写调用Collection接口的方法。
  3. 常见子接口和实现类
  • 子接口:List、Set、SortedSet、Queue
  • 实现类:AbstractCoolection、AbstractList、AbstractSet、AbstractQueue、LinkedList、HashSet、TreeSet、Stack、Vector
  1. 底层实现及常用方法
public interface Collection<E> extends Iterable<E> {
    // Query Operations,查询操作
    //返回集合中的元素个数
    int size();
    //判断该集合是否有元素,该方法底层实现使用 size=0判断
    boolean isEmpty();
    //判断此集合中是否包含指定元素o,contains()底层使用equals(o)方法进行比较实现
    boolean contains(Object o);
    //返回一个在此集合对象上产生的 迭代器对象
    Iterator<E> iterator();
    //返回包含了此集合所有元素的 一个数组对象
    Object[] toArray();

    // Modification Operations,修改操作
    //往集合中添加元素
    boolean add(E e);
    //(删除)移除此集合中指定的单个元素o
    boolean remove(Object o);

    // Bulk Operations,块操作
    boolean containsAll(Collection<?> c);
    boolean addAll(Collection<? extends E> c);
    boolean removeAll(Collection<?> c);
    boolean retainAll(Collection<?> c);
    //(清空)移除此集合中的所有元素
    void clear();

    // Comparison and hashing,比较和哈希操作
    //判断此collection对象 与 指定对象o是否相等
    boolean equals(Object o);
    //返回此collection对象的哈希码值
    int hashCode();

    //以下方法从JDK1.8版本开始:@since 1.8
}

1.1.3 Comparator

  1. 简述
    强行对某个 collection对象(该对象本身存储是无序的)进行整体排序的比较函数接口。一个集合对象需要对其存储的元素进行排序时,存储的元素若是自定义类型的,该元素就可以实现Comparator接口,使得元素在集合中完成排序。

  2. 作用
    自定义类型的元素实现Comparator接口,并重写其compare()方法后,可以让该类型元素在集合中完成排序。

  3. 常见实现类

  4. 底层实现及常用方法

  • int compare(T o1, T o2):比较用来排序的两个参数;根据第一个参数小于、等于或大于第二个参数分别返回负整数、零或正整数。
  • 返回>o:
  • 返回=0:说明两个对象o1和o2相等
  • 返回<0:
@FunctionalInterface
public interface Comparator<T> {
       //比较用来排序的两个对象参数
       int compare(T o1, T o2);
       //判断某个对象obj是否 与此 Comparator对象相等
       boolean equals(Object obj);
      //以下为JDK1.8版本后加入的默认实现方法
}

1.1.4 Map<K,V>

  1. 简述
    Map<K,V>简称映射,是将 键key映射到值的对象,<K,V>中的K是泛型,限定键key的数据类型;V也是泛型,限定值value的数据类型。Map中一个映射不能包含重复的键key,每个键最多只能映射到一个值value。
  2. 作用
    提供一种图表式的结构存储数据。Map接口还取代了 Dictionary 类,后者完全是一个抽象类,而不是一个接口。
  3. 常见常见子接口和实现类
  • 子接口:SortedMap<K,V>
  • 实现类:AbstractMap,ConcurrentHashMap,HashMap,LinkedHashMap,Properties,TreeMap
  1. 底层实现及常用方法
public interface Map<K,V> {
    // Query Operations,查询操作
    //返回此映射中 键-值对的个数    
    int size();
    //判断该映射中是否包含 键-值对关系    
    boolean isEmpty();
    //判断包含指定键key的映射关系
    boolean containsKey(Object key);
    //判断指定是否存在key可以映射到指定值value
    boolean containsValue(Object value);
    // 根据指定key返回value;无映射则返回null
    V get(Object key);

    // Modification Operations,修改操作
    //将指定key与value加入映射中,若以前就包含该键的映射关系,则用 指定值 替换 旧值        
    V put(K key, V value);
    //如果存在指定key的映射关系,则将该key从映射中移除;返回key对应的value    
    V remove(Object key);

    // Bulk Operations,块操作
    //从指定映射中 将所有键-值对关系m 复制到此映射中    
    void putAll(Map<? extends K, ? extends V> m);
    //移除所有的键-值对关系    
    void clear();

    // Views,视图
    //返回此映射中 所有键的set视图;将所有key抽出来放到set集合中
    Set<K> keySet();
    //返回此映射中 所有值的collection视图;将所有value抽出来放到collection集合中<collection可重复>    
    Collection<V> values();
    //返回此映射中 所有键-值对关系的set视图;map中key-value的形式变成set中"key=value"的形式,Entry<>是Map的静态内部类(接口)
    Set<Map.Entry<K, V>>  entrySet();
 
    // Comparison and hashing,比较与哈希
    //比较指定对象与此映射是否相等,比较的是 映射 与 映射   
    boolean equals(Object o);
    //返回此映射的哈希码值    
    int hashCode();

    // Defaultable methods,JDK8后的默认实现

1.1.5 Queue消息队列接口

  1. 简述
    队列指的是 在处理元素前,用于保存元素的 collection集合。除了基本的collection操作外,队列还提供其他的插入、提取和检查操作。
  2. 作用
    队列通常以 FIFO(先进先出)的方式排序各个元素。不过 优先级队列和 LIFO队列(或堆栈)例外,前者根据提供的比较器或元素的自然顺序对元素进行排序,后者按 LIFO(后进先出)的方式对元素进行排序。
  3. 常见常见子接口和实现类
  • 子接口:BlockingDeque阻塞双端队列,BlockingQueue阻塞队列
  • 实现类:AbstractQueue,ArrayDeque数组双端队列
  1. 底层实现及常用方法
//Queue底层源码实现
public interface Queue<E> extends Collection<E> {
    //将指定元素插入此队列(如果立即可行且不会超出容量限制),成功时返回 true,如果当前没有可用空间则抛出 IllegalStateException
    boolean add(E e);
    //将指定元素插入此队列,当使用有容量限制的队列时,此方法优先级高于add(E e )
    boolean offer(E e);
    //获取并移除此队列的头,此队列为空时将抛出一个异常;返回队列的头
    E remove();
    //获取并移除此队列的头,如果此队列为空则返回 null;返回队列的头
    E poll();
    //获取但是不移除此队列的头,此队列为空时将抛出一个异常;返回队列的头
    E element();
    //获取但不移除此队列的头;如果此队列为空则返回 null;返回队列的头
    E peek();
}

1.1.6 EventListener事件监听器接口

  1. 简述
    EventListener是所有事件侦听器接口必须扩展的标记接口。

  2. 作用

  3. 常见常见子接口和实现类

  • 子接口:
  • 实现类:
  1. 底层实现及常用方法
//EventListener事件监听器在底层并没有任何可实现的方法,只是一种规定
public interface EventListener {
}

1.1.7 Deque<E>双端队列

  1. 简述
    一个线性 collection,支持在两端插入和移除元素。

1.2 常用类

类名 作用 备注

1.2.1 Scanner文本扫描器

  1. 简述
    一个可以使用正则表达式来解析基本类型和字符串的简单文本扫描器。

  2. 作用

  3. 常见父类或接口

  4. 底层实现及常用方法

1.2.2

  1. 简述

  2. 作用

  3. 常见父类或接口

  4. 底层实现及常用方法

1.2.3

  1. 简述

  2. 作用

  3. 常见父类或接口

  4. 底层实现及常用方法

1.2.4

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.5

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.6

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.7

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.8

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.9 ArrayList数组列表集合

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法
public class ArrayList<E> extends AbstractList<E>
        implements List<E>, RandomAccess, Cloneable, java.io.Serializable
{
    //创建一个集合时的默认容量10
    private static final int DEFAULT_CAPACITY = 10;
    //创建一个空元素的Object数组--存放集合元素
    private static final Object[] EMPTY_ELEMENTDATA = {};
    //
    private static final Object[] DEFAULTCAPACITY_EMPTY_ELEMENTDATA = {};

1.2.10

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.11

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.12

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.13

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法

1.2.14

  1. 简述
  2. 作用
  3. 常见父类或接口
  4. 底层实现及常用方法