
Java基础整理
alex-zhou96
男儿欲遂平生志,五经勤向窗前读。
展开
-
Collections源码
1、Collections类介绍文章目录1、Collections类介绍2、对接口对象的操作2.1、查找和替换2.2、查找最大值、最小值2.3、查找元素出现的次数2.4、查找list出现的位子2.5、排序2.6、交换位置2.7、反转列表2.8、随机化重排3、返回一个容器接口对象3.1、适配器3.1.1、空容器的方法3.1.2、单一对象方法3.2、装饰器3.2.1、写安全3.2.2、类型安全3。2...原创 2020-02-28 15:34:23 · 386 阅读 · 0 评论 -
PriorityQueue源码
1、堆1.1、堆的作用1.2、堆的概念堆首先是一颗二叉树,但他是完全二叉树1.3、堆中添加元素1.4、从头部删除元素1.5、从中间删除元素1.6、构建初始堆1.7、遍历和查找1.8、小结2、PriorityQueue分析2.1、实现原理内部成员组成:底层就是个数组 private static fin...原创 2020-02-27 16:12:17 · 336 阅读 · 0 评论 -
EnumSet源码
1、EnumSet分析EnumSet是抽象类,主要通过底层的两个类进行操作内部使用位向量,表示很简洁,节省空间2、实现原理采用位向量实现对象内部组成 //表示类型信息 final Class<E> elementType; //表示枚举类的所有枚举值 //EnumSet字舍恩没有记录元素个数的变量,也没有位向量...原创 2020-02-26 17:15:37 · 200 阅读 · 0 评论 -
EnuMap源码
1、EnuMap介绍键的值为枚举类型主要因为枚举类型有两个特征:一个是他的值是有限的且预先定义的;而是枚举值都有一个顺序,这两个特征使得可以更高效的实现Map接口内部基于数组实现2、实现原理内部有以下实例变量: //表示类型信息 private final Class<K> keyType; //表示键,是所有可能的枚举值 private tra...原创 2020-02-26 17:14:12 · 153 阅读 · 0 评论 -
LinkedHashSet源码
1、分析是HashSet的子类,但内部使用了LinkedHashMap2、继承体系public class LinkedHashSet<E> extends HashSet<E> implements Set<E>, Cloneable, java.io.Serializable {3、构造函数 publi...原创 2020-02-25 15:32:52 · 129 阅读 · 0 评论 -
LinkedHashMap源码
1、分析LinkedHashMap它是HashMap的子类,可以保持元素按插入或访问有序,这与TreeMap按键排序不同LinkedHashMap是HashMap的子类,但内部还有一个双向链表维护键值对的顺序,对每个键值对即位于哈希表中,也位于这个双向链表中。LinkedHashMap支持两种顺序:一种是插入顺序;另外一种是访问顺序按插入顺序先添加的在前面;后添加的在跟后面,修改操...原创 2020-02-25 15:32:22 · 163 阅读 · 0 评论 -
TreeSet源码
1、TreeSet分析TreeSet同HashSet一样;底层采用的是TreeMap,因此理解了TreeMap也就了解TreeSet2、实现原理HashSet是基于HashMap实现的,元素就是HashMap中的键,值是一个固定的值,它是基于TreeMap实现的。 //m就是背后的TreeMap,这里用的是更为通用的接口类型NavigableMap private tran...原创 2020-02-25 13:53:46 · 344 阅读 · 0 评论 -
TreeMap源码
文章目录1、树的介绍1.1、排序二叉树1.2、常用算法1.2.1、查找1.2.2、遍历1.2.3、插入1.2.4、删除1.3、平衡二叉树1.5哈希与树的比较2、TreeMap的介绍2.1、基本用法2.2、实现原理2.2、put方法2.3、根据键获取值get2.4、查看是否包含某个键2.5、查看是否包含某个值2.6、根据键删除键值对 remove2.7、小结1、树的介绍1.1、排序二叉树H...原创 2020-02-24 21:36:50 · 295 阅读 · 0 评论 -
HashSet源码
1、HashSet介绍与HashMap类似,字面上看,HashSet由两个单词组成:Hash和Set。其中,Set表示接口,实现Set接口也有多种方式,各有特点,HashSet实现的方式利用了HashSet public interface Set<E> extends Collection<E> {表示容器没有重复元素、且不保证顺序的容器接口,它扩展了Collec...原创 2020-02-24 18:56:52 · 132 阅读 · 0 评论 -
JDK1.8 HashMap
1、JDK1.8 HashMap概述参考内容参考 在JDK1.8之前,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的节点都存储在一个链表里。但是当位于一个桶中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找...原创 2020-02-23 17:08:26 · 288 阅读 · 0 评论 -
ArrayDeque源码剖析
文章目录1、描述2、实现原理3、构造方法3.1、 ArrayDeque()3.2、ArrayDeque(int numElements)3.3、ArrayDeque(Collection<? extends E> c)4、尾部添加 add方法5、头部添加 addFirst方法6、从头删除removeFirst7、查看长度 size()8、检查给定元素是否存在contains9、toAr...原创 2020-02-20 14:19:16 · 412 阅读 · 0 评论 -
LinkedList源码剖析
1、实现原理、内部组成我们知道,ArrayList内部是数组,元素在内存中是连续存放的,但LinkedList不是。LinkedList直译就是链表,确切的说,它的内部实现就是双向链表,每个元素在内存都是单独存放的,元素之间通过连接一起为了表示链接关系,需要一个节点的概念节点包括实际的元素,但同时有两个连接,分别指向前面一个节点(前驱)和后一个节点(后继)。节点是一个内部类,具体定义...原创 2020-02-19 14:41:18 · 121 阅读 · 0 评论 -
ArrayList剖析
1、底层元素 /** * 默认的数组容量 */ private static final int DEFAULT_CAPACITY = 10; //空数组 private static final Object[] EMPTY_ELEMENTDATA = {}; //容器的层是数组 transient Object[] elemen...原创 2020-02-18 16:05:59 · 184 阅读 · 1 评论 -
JDK源码分析
容器原创 2020-02-18 14:01:00 · 187 阅读 · 0 评论 -
IO介绍与File
1、流1.1、基本概念1.2、流分类2、File(文件和文件夹)2.1、分隔符public class IOTEST01 { public static void main(String[] args) { /** * \ / 名称分隔符 separator */ String path =...原创 2020-02-12 20:10:29 · 131 阅读 · 0 评论 -
字节流和字符流
文章目录1、字符集1.1、字符编码1.2、编码encode1.3、解码decode1.4、乱码原因2、字节流与字符流2.1、IO标准步骤2.2、文件字节流 FileInputStream和FileOutPutStream2.2.1、FileInputStream2.2.2、==FileOutPutStream==2.2.3、文件拷贝2.3、文件字符流FileReader和FileWriter2.3...原创 2020-02-12 20:05:59 · 281 阅读 · 0 评论 -
线程池
1、执行器1.1、为什么使用线程池构建一个新的线程有一定的代价,因为涉及操作系统的交互。如果程序中创建大量的声明很短的线程,应该使用线程池(Thread pool),另一个使用线程池的理由是减少并发线程的数目。创建大量线程会大大降低性能甚至使得虚拟机崩溃。如果有一个会创建许多线程的算法,应该使用一个线程数“固定的”线程池以限制并发线程的总数1.2、如何使用线程池执行器类有许多静态...原创 2020-02-11 16:10:05 · 118 阅读 · 0 评论 -
线程同步与锁
1、线程同步问题(synchronized)Brian Goetz给出了下述“同步格言”:“如果向一个变量写入值,而这个变量接下来可能会被另一个线程读取,或者,从一个变量读值,而这个变量可能是之前被另一个线程写入的,此时必须使用同步。在大多数实际的多线程应用中,两个或两个以上的线程需要共享对同一数据的存取如果两个线程存取相同的对象,并且每一个线程都调用了一个修改该对象状态的方法,将会...原创 2020-02-11 13:15:21 · 314 阅读 · 0 评论 -
线程基础
1、线程简介多线程程序在较低的层次上扩展了多任务的概念:一个程序同时执行多个任务。通常,每一个任务称为一个线程(thread), 它是线程控制的简称。可以同时运行一个以上线程的程序称为多线程程序(multithreaded)。多线程与多进程有哪些区别?本质的区别在于每个进程都拥有自己的一整套变量,而线程则共享数据。共享变量使线程之间的通信比进程之间的通信更加高效与进程相比,线程更...原创 2020-02-07 22:11:09 · 202 阅读 · 0 评论 -
遗留的集合
1、HashTableHashTable类与HashMap的作用是一样的,与Vector类的方法一样,HashTable的方法也是同步的;如果对同步性或与遗留代码的兼容性没有任何要求,就应该使用 HashMap。如果需要并发访问, 则要使用 ConcurrentHashMappublic class Hashtable<K,V> extends Dictiona...原创 2020-02-06 19:10:38 · 151 阅读 · 0 评论 -
Java容器中算法
1、算法本部分介绍在容器体系中的一些常规算法: 这些算法常常封装到一些工具类中;l例如Collections,Arrays.2、求最大值//参数为接口:所有实现给接口的类的对象都可以作为参数传递进去public static <T extends Object & Comparable<? super T>> T max(Collection<...原创 2020-02-06 16:55:38 · 262 阅读 · 0 评论 -
视图与包装器
1、视图与包装器Demo Map<Integer,String> map = new HashMap<>(); map.put(1,"aaaaa"); map.put(2,"bbbbb"); map.put(3,"cccc"); System.out.println(map); ...原创 2020-02-06 16:54:21 · 238 阅读 · 0 评论 -
Map映射
1、映射(Map)介绍1.1、Map的用处通常,我们需要知道某些键的信息,并想要查找与之对应的元素。映射用来存放键/值对如果提供了键,就能够查找到值例如,有一张关于员工信息的记录表,键为员工ID,值为Employee对象1.2、JDK中Map接口// <K> the type of keys maintained by this map// <V> t...原创 2020-02-06 16:52:37 · 772 阅读 · 0 评论 -
Collection集合体系
除了以Map结尾的类之外,其他类都实现Collection接口,而以Map结尾的类实现了Map接口1、List1.1、LinkedList1.1.1、简介尽管数组在连续存储位置上存放对象引用,但链表却将每个对象存放在独立的节点中。每个节点还存放着序列中下一个节点的引用;在Java中,所有链表实际上是双向链表-----即每个节点还存放着指向前驱节点的引用1.1.2、APIp...原创 2020-02-04 20:20:10 · 550 阅读 · 0 评论 -
Java容器体系
1、Java集合在实现方法时,选择不同的数据结构会导致其实现风格以及性能存在着很大的差异。需要快速的搜索成千上万个(甚至上百万个)有序的数据项吗?需要快速的在有序的序列中间插入元素或删除元素吗?需要建立键和值之间的关联吗?总结一句话:根据不同需求选用不同的数据容器因此要熟练掌握集合之间的关系,以及集合的特点2、将集合的接口与实现分离==Java集合类库将接口(inter...原创 2020-02-03 22:34:40 · 367 阅读 · 0 评论 -
泛型程序设计
1、为什么使用泛型程序设计泛型程序设计(Generic programming)意味着编写的代码可以被很多不同类型的对象所重用。例如,我们并不希望 为聚集String和File对象分别设计不同的类;实际上,也不需要这样做,因为一个ArrayList类可以聚集任何类型的对象。这是一个泛型城西设计的实例1.1、类型参数的好处代码具有易读性代码具有较高的安全性下面看看演进的过程在J...原创 2020-02-03 15:03:36 · 401 阅读 · 0 评论 -
日志基础
文章目录1、日志原理简述1.0、记录日志1.1、概念理解1.2、总结2、日志框架2.1、JUL(Java.util.logging)2.1.1、基本日志2.1.2、高级日志2.1.3 日志级别2.1.4、修改日志管理器配置2.1.5、处理器2.1.6、过滤器2.1.7、格式化器2.2、Log4j2.2.1、日志级别参考1、日志原理简述1.0、记录日志每个Java程序员都很熟悉在有问题的代码...原创 2020-02-01 21:06:38 · 409 阅读 · 0 评论 -
异常
在理想状态下,用户输入数据的格式永远是正确的,选择打开的文件也一定存在,并且永远不会出现bug。然而,在现实世界中却充满了不良的数据和带有问题的代码。对于异常情况,例如:可能造成程序崩溃的错误输入,Java使用一种称为异常处理(exception handing)的错误捕获机制处理。1、处理错误假设在一个Java程序运行期间出现了一个错误。这个错误可能是由于文件包含了错误信息,或者网...原创 2020-02-01 16:05:41 · 538 阅读 · 0 评论 -
类与对象03
1、接口接口技术,这种技术主要用来描述类具有什么功能,而并不给出每个功能的具体实现。一个类可以实现(implement)一个或多个接口,并在需要接口的地方,随时可以使用实现了相应接口的对象1.1、什么是接口接口不是类,而是对类的一组需求描述(规则,规范),这些类要遵守接口描述的统一格式进行定义如果类遵从某个特定的接口,那么就履行这项服务例如:Arrays类中的Sort方法...原创 2020-01-31 15:58:21 · 316 阅读 · 0 评论 -
类与对象基础02
1、继承1.1、为甚么要继承利用继承,人们可以基于已存在的类构造一个新类继承已存在的类就是复用(继承)这些类的方法和域。1.2、如何实现继承关键字 extends表示继承。父类并不因为它优于子类或者拥有比子类更多的功能;子类比超类拥有的功能更加丰富。在通用扩展超类定义子类的时候,仅需要指出子类与超类的不同之处。因此在设计类的时候,应该将通用的方法放在超类。而将具有特殊用途的方法...原创 2020-01-18 22:31:57 · 169 阅读 · 0 评论 -
Java基础整理目录
为了复习Java基础知识,进行笔记的整理以及复习:计划整理内容:Java语言基础语法Java对象与继承、抽象类、接口、内部类Java反射机制Java异常处理机制Java容器JavaIO流Java多线程的基础计划时间: 2019/1/26-2020/2/10Java的程序语言基础>>>类与对象基础01>>>反射基础>>&...原创 2020-01-18 17:49:10 · 331 阅读 · 0 评论 -
反射基础
0、工厂模式分析对于程序的开发模式之前一直强调:尽量减少耦合,而减少耦合的最好做法是使用接口,但是就算使用了接口也逃不出关键字new,所以实际上new是造成耦合的关键元凶。没有使用反射package CoreJavaColume.Chapter5.Factory.OldModel;/** * @Author Zhou jian * @Date 2020 ${month} 2020...原创 2020-01-18 17:43:06 · 328 阅读 · 0 评论 -
类与对象基础
1、面向对象概述面向过程就是分析出解决问题所需要的步骤,然后用函数把这些步骤一一实现,使用的时候依次调用就可以了。面向对象则是把构成问题的事务按照一定规则划分为多个独立的对象,然后通过调用对象的方法来解决问题。当然,一个应用程序会包含多个对象,通过多个对象的相互配合即可实现应用程序所需要的功能,这样当应用程序功能发生变动时,只需要修改个别的对象就可以了。面向对象的特点可以概括为:封装、继承...原创 2019-12-30 16:41:02 · 866 阅读 · 1 评论 -
01Java的基本程序设计结构
1、数据类型Java是一种强类型语言,在JAVA中一共有8种基本数据类型化其中有4种整型,2种浮点型,一种用于表示Unicode编码的字符单元的字符类型char和一种用于表示真值的boolean类型1.1、整型整型表示没有小数部分的数值,它允许是负数,Java提供了四种整型|类型存储需求取值范围byte1-128 ~ 127short2-32768...原创 2019-12-25 14:50:40 · 259 阅读 · 0 评论