一、核心包有哪些?

  Jdk的包中,除开了lang包下面的类,用得最多的应该要属于util包下面的类了,

  本篇文章主要针对Jdk的util包下面的类(util目录下面的类,暂时不包括util 包下面的子包,子包将在后面继续进行)进行一个总结,

  主要是用来帮助大家进行梳理知识,让大家对jdk的代码更加熟悉。

  Util包里面主要就是常见的集合类和常见的工具类,集合类就是一些常见的数据结构的实现,工具类就是一些常见的数学、时间、字符串等操作的方法类。


二、集合类:

  下面先针对集合类来进行分析:集合类主要分成了三类集合:队列类型、集合类型、哈希类型。

  1、队列类型,它是一种线性的数据结构

  (1)ArrayList:

    底层存储是通过数组进行存储的,所以他可以直接通过数组下标进行访问,所以随机访问速度很快。

    但是在扩容方面效率很低,他需要把数据进行重新进行拷贝。

  (2)LinkedList:

    底层是通过链表进行存储的,他不能支持随机访问,只能从头节点或者尾节点进行遍历,增加元素成本很低,不存在拷贝数据的操作。

  (3)Vector:

    底层存储和ArrayList一样是通过数组进行存储的,但是它的方法是同步操作的,所以说他是线程安全的,

    性能方面差于ArrayList,扩容方面Vector元素是翻倍,是要多于ArrayList的50%的增长率。

  (4)Stack:

    是Vector的子类,他是实现栈的操作,只有push、pop、peek几个操作,他也是线程安全的类

  (5)ArrayDeque:

    底层存储室通过数组进行存储的双端队列,拥有一个头指针和一个尾指针,当头指针和尾指针在同一个位置的时候,会进行翻倍扩容。

    同时他支持栈和队列的操作,但是不支持随机访问。

  (6)PriorityQueue:

    默认是基于堆的数据结构进行实现的,默认是可以取到最小的值,如果最小值有多个,则是随机选取,

    然后可以通过设置Comparator接口进行排序。内部是用数组进行存储的,但是除开第一个元素,后面的元素是没有顺序的。

  2、集合类型,它是一种非线性的数据结构,但是集合里面只会保留一个相同的元素

  (1)HashSet:

    底层通过HashMap进行存储,里面不允许重复的值,是一种最常用的集合类的数据结构

  (2)EnumSet:

    是一个枚举类型的集合,它里面的元素必须全部来自单个枚举类型,在内部所有元素只占长整型的一位,所以时间和空间性能相当的好。

  (3)LinkedHashSet:

     它是继承于HashSet的,但是它保证了插入元素的插入顺序,所以能够保证迭代时候的顺序和插入时候的顺序保持一致。

  (4)TreeSet:

    它是基于树型结构来构造的集合,它底层通过TreeMap来进行存储,

    又因为TreeMap是基于数据结构里面的红黑树,所以它内部的元素是可以进行排序的。    

    因为结构是树形结构,所以在读取或者写入的速度方面要慢于HashSet。

  3、哈希类型,它是一种key-value的结构,可以通过key可以快速定位到value

  (1)HashMap:

    最常用的Map结构,它是通过数组加链表的形式进行存储的。

  (2)EnumMap:

    枚举类型的Map结构,它的key是一个枚举类型,它效率要高于HashMap,因为它内部是只有数组进行存储的,可以通过直接定位到具体元素,

    而不用像上面的HashMap去进行计算,所以效率比HashMap要大大提高。

  (3)IdentityHashMap:

    它可以保存多个一样值的key,只有当k1==k2的时候才认为是重复的。然后进行查找的时候,也是根据具体的key地址进行查找,

    而不是通过key的值进行查找的。

  (4)LinkedHashMap:

    类似于HashMap,但是能够保证迭代时候的顺序和插入时候的顺序保持一致。

  (5)TreeMap:

    它基于树型结构来存储的,树形结构是基于数据结构里面的红黑树,所以它内部的元素也是可以进行排序的。

  (6)HashTable:

    它类似于HashMap, 区别就是HashTable是一个线程安全的,同时它的key和value都是不能为null的。

  (7)Properties:

    继承于HashTable,所以它也是线程安全的,并且可以通过io操作来读取文件里面的内容,来构成Properties对象。

  (8)WeakHashMap:

    它里面的key都是弱引用的哈希实现,对于一个给定的键,其映射的存在并不阻止垃圾回收器对该键的丢弃,

    这就使该键成为可终止的,被终止,然后被回收。某个键被终止时,它对应的键值对也就从映射中有效地移除了。

    它是通过ReferenceQueue来进行实现的,这个是前面的lang包里面的类。其他方面和HashMap没有差别。


三、工具类:

  上面总结讲完了util包里面的集合类,下面针对util包里面的工具类进行讲解

  1、对象工具类:

    Objects类主要用于操作单个对象,Arrays类主要用于操作数组对象,Collections类主要用于操作集合类对象。

  2、货币工具类:

    Currency是用于操作各国不同类型的货币的类。

  3、时间工具类:

    Date、Calendar和SimpleTimeZone主要是之前遗留下来的类,

    但是到了JDK1.8之后,jdk包里面增加了专门处理时间的time包来处理时间操作,所以在JDK1.8之后不建议使用这些老的时间操作类了。

  4、字符串工具类:

    主要用来进行字符串分割、连接和格式化的操作的类

  5、数学工具类:

    主要用于进行对于数字类的集合进行操作,计算各种数据(比如最大、最小、平均值、总和等数据)

  6、算法工具类:

    常用的算法操作封装(随机算法、UUID算法、Base64算法、位图算法等)。

  7、定时器类:

    完成简单的定时任务的Timer类

  8、Optional类:

     JDK1.8新加的类,主要用于避免空指针而引入的类,能够一定程度解决讨厌的空指针的问题。

  9、ServiceLoader类:

    它从META-INF/services目录下的配置文件中加载子类或者接口的实现类,返回一个实例。

    可以通过配置文件来配置具体实现的类,这样可以具有更好的扩展性。

JDK源码核心包的更多相关文章

  1. 重新编译jdk源码,启用debug信息

    我有一个不知道是好还是不好的习惯,搞不懂的一些玩意儿,喜欢调试然后单步执行看这玩意儿到底是怎么运行的. 今天看到正则表达式的时候,appendReplacement()这个方法怎么也看不明白它是怎么工 ...

  2. 使用NetBeans、Eclipse阅读JDK源码

    下面说明在Netbeans.Eclipse环境下怎么查看JDK源码: Netbeans: 在"工具->java平台->源"里添加下路径,如果你安装jdk的时候选择安装了 ...

  3. eclipse下导入jdk源码

    一直想好好看看jdk的源码,虽然可以直接解压jdk下的src看,但是终究不方便!后来发现可以导入到eclipse中,就在网上找了一些方法,下面就和大家分共享: step1:打开eclipse选择Win ...

  4. Timer的故事----Jdk源码解读

    咱们今天也来说说定时器Timer Timer是什么? Timer  n. [电子] 定时器:计时器:计时员 从翻译来看,我们可以知道Timer的本意是,定时定点. 而JDK中Timer类也的确是这个本 ...

  5. 安装jdk源码

    step1:打开选择Window->Preference step2:选择Java->Installed JREs step3:选中你所安装的jre,点击Edit,进入Edit JRE,如 ...

  6. JDK源码包结构分类

    最近查看JDK源码时,无意间发现几个类在陌生包里:com.sun.*.sun.*.org.*,google了一把总结了下以备他人搜索,如内容有误欢迎指正!   Jre库包含的jar文件(jdk1.6) ...

  7. JDK源码调试

    1.首先遇到了一个问题line unavailable,然后通过以下方式解决: http://blog.csdn.net/xuefeng0707/article/details/8738869 对于想 ...

  8. eclipse调试jdk源码

    摘要 介绍使用eclipse调试jdk源码 java是一门开源的程序设计语言,喜欢研究源码的java开发者总会忍不住debug一下jdk源码.虽然官方的jdk自带了源码包src.zip,然而在debu ...

  9. eclipse查看jdk源码,及反编译查看

    jdk中的包: dt.jar是关于运行环境的类库,主要是swing的包 tools.jar是关于一些工具的类库 rt.jar包含了jdk的基础类库,也就是你在java doc里面看到的所有的类的cla ...

随机推荐

  1. [sharepoint]根据用户名获取该用户的权限

    写在前面 这样的一个场景,客户端请求sharepoint的rest api,但不允许传输用户的密码,使用的是证书认证的方式,但这样所有的用户用的是同一个证书,这样造成的结果就是无法识别该用户是否有操作 ...

  2. docker上搭建consul集群全流程

    consul简介: consul是提供服务发现.简单配置管理.分区部署的服务注册发现解决方案.主要特性:服务发现\健康检查\基于Key-Value的配置\支持TLS安全通讯\支持多数据中心部署 con ...

  3. 这可能是目前最新的 Vue 相关开源项目库汇总(转)

    访问地址:https://juejin.im/entry/58bf745fa22b9d0058895a58 原文链接:https://github.com/opendigg/awesome-githu ...

  4. 优化 SQL SELECT 语句性能

    SELECT语句的性能调优有时是一个非常耗时的任务,在我看来它遵循帕累托原则.20%的努力很可能会给你带来80%的性能提升,而为了获得另外20%的性能提升你可能需要花费80%的时间. 检查索引:在SQ ...

  5. java——IO流01

    移动文件有一种简单方法,不需要复制文件再删除文件. package com.unir.test01; import java.io.File; import java.io.IOException; ...

  6. GIT BRANCHING

    GIT BRANCHING generalizations Let's take a moment to review the main concepts and commands from the ...

  7. JavaScript:BOM&DOM

    BOM(Browser Object Model): feature: 1.BOM has no relevant standards. 2.The fundamental object of BOM ...

  8. 使用List需要注意的点

    目录 1. 概述 2. Arrays.asList(); 2-1. 产生不可操作的集合 2-2. 需要传入对象数组而不是基本类型数组 3. arrayList.subList(); 3-1. subL ...

  9. 一个JavaBean和DTO转换的优秀案例

    所有的JavaBean和DTO的互相转换接口,JavaBean转化成DTO或者DTO转换JavaBean: public abstract class Converter<A, B> { ...

  10. 100-days: eighteen

    Title: Why India's election is among the world's most expensive election n.选举,当选,选举权 expensive adj.昂 ...