
深入Java基础
文章平均质量分 50
对Java基础知识进行深入理解,对Java部分源码进行分析与解释。结合面试中常考问题进行Java的学习与复习。
勇敢牛牛_
不念往昔,无惧将来。
展开
-
【深入Java基础】序列化和反序列化
序列化对象Java中的对象是伴随jvm而存在的,当虚拟机运行结束后,这些对象也随即被释放,当我们需要将这些对象保存时,就需要序列化这些对象(保存为文件存在磁盘上)要实现序列化,则需要类实现Serializable接口。如下,C类实现了Serializable接口,则这个类是可序列化的。 class C implements Serializable{ ...原创 2018-04-09 15:55:33 · 284 阅读 · 0 评论 -
【深入Java基础】for和foreach的区别
for适合随机访问,例如底层是数组实现的情况。(ArrayList和Vector等)foreach适合顺序访问,例如底层是链表实现的情况。(LinkedList等)foreach无法获取迭代的索引。使用foreach遍历集合时,集合必须实现了Iterator接口。原创 2018-04-06 09:46:29 · 862 阅读 · 0 评论 -
【深Java基础】Java设计模式——代理
代理什么是代理?代理就是通过一个中间组件将两个不同的两个模块联系起来,使得两个模块不必知道彼此的详细实现细则,和中间件类似。这里两个组件一般是只接口和接口的实现类。代理的作用?可以隐藏委托类(被代理的类)的实现;可以实现客户与委托类间的解耦,在不修改委托类代码的情况下能够做一些额外的处理。静态代理若代理类在程序运行前就已经存在,那么这种代理方式被成为静态代理...原创 2018-04-06 16:56:44 · 280 阅读 · 0 评论 -
【深入Java基础】排序算法(一)
1.冒泡排序基本思想(升序):属于交换排序。依次比较前一个数和后一个数的大小,若后一个数小于前一个数,则交换位置,否则不交换,一趟下来,最大的数就被交换到了尾部。3 2 1 5 42 1 3 4 51 2 3 4 5最差时间时间复杂度:O(n²)平均...原创 2018-03-28 14:27:46 · 381 阅读 · 0 评论 -
【深入Java基础】Java IO 使用
一个常用的读取和写入txt的工具类package util;import java.io.*;/** * @author * wxg */public class TxtUtil { /** * 读取txt文件 * @param path * 文件路径 * @return */ public StringBuilder rea原创 2018-03-19 17:42:59 · 363 阅读 · 0 评论 -
【深入Java基础】catch和finally中的return
catch和finally中的returnQ1:catch中出现return后finally还会执行嘛?有以下代码: File file = new File("C:\\Users\\Administrator\\Desktop\\aa.txt"); try { BufferedReader br = new Buffere...原创 2018-02-20 18:17:56 · 955 阅读 · 0 评论 -
【深入Java基础】多线程、多进程及并发
多线程、多进程及并发进程:百科描述: 进程(Process)是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。在早期面向进程设计的计算机结构中,进程是程序的基本执行实体;在当代面向线程设计的计算机结构中,进程是线程的容器。程序是指令、数据及其组织形式的描述,进程是程序的实体。实际上一个进程就是指一段程序的...原创 2018-02-17 20:59:25 · 2085 阅读 · 0 评论 -
【深入Java基础】各个Map类的比较与总结
各个Map类的比较与总结 本文主要对 HashMap, LinkedHashMap, TeeeMap, WeakHashMap, IdentityHashMap 进行对比分析。Map : 以key-value键值对的形式存储数据,通过key获取value。是一种无序的数据结构。一、HashMapHashMap是最常用的一种map。它有以下特点:1.内部数据原创 2018-02-04 14:45:39 · 1294 阅读 · 0 评论 -
【深入Java基础】LinkedHashMap的特点与原理
LinkedHashMap的特点与原理一般来说HashMap的无序的,及内部的存储顺序和输出顺序不一定相同(除非输入key的hash值是有序的)。而LinkedHashMap则是有序的。LinkedHashMap同样支持null键和值,并且值可以重复,它也是不同步的。它的有序性表现为两种:1.遍历输出的顺序与put顺序一致2.按访问顺序输出按输入顺序遍历输出,这个好理解:原创 2018-02-03 19:25:25 · 2244 阅读 · 0 评论 -
【深入Java基础】HashMap总结
HashMap总结【深入Java基础】HashMap的基本用法【深入Java基础】HashMap高级用法(一):排序【深入Java基础】HashMap的高级用法(二):同步【深入Java基础】HashMap源码分析【深入Java基础】HashMap源码分析(二) hashmap的基于数组和链表及红黑树实现的哈希表。采用数组作为键值对的容器,数组中存放的是单链表的头节点。h原创 2018-02-02 19:07:14 · 1188 阅读 · 0 评论 -
【深入Java基础】HashMap源码分析
HashMap源码分析在分析源码之前先学习一下Hash(散列表)的相关内容符号表是一种用于存储键值对(key-value pair)的数据结构,我们平常经常使用的数组也可以看做是一个特殊的符号表,数组中的“键”即为数组索引,值为相应的数组元素。也就是说,当符号表中所有的键都是较小的整数时,我们可以使用数组来实现符号表,将数组的索引作为键,而索引处的数组元素即为键对应的值,但是这一表示仅原创 2018-02-01 14:30:08 · 485 阅读 · 0 评论 -
【深入Java基础】java八种基本数据类型及其包装类
八种基本数据类型以及包装类1. 基本数据类型byte 占用1个字节(8位),范围:-2^7~2^7-1short占用2个字节(16位),范围:-2^15~2^15-1int 占用4个字节(32位),范围:-2^31~2^31-1long 占用8个字节(64位),范围:-2^63~2^63-1float占用4个字节(32位,1位符号位,8位指数位),范围:2^-149~2^128-原创 2018-01-01 18:36:41 · 4414 阅读 · 0 评论 -
【深入Java基础】 switch用String作参数
一般情况switch只能用int(或者Integer)做参数,但是jdk17及其之后可以用枚举、String、float以及double作参数。- 为什么float和double不能做参数?事实上switch case语句只能判断int类型的数据,在比它小的数据类型比如byte、short可以自动转换为int,而比它大的比如float和double无法自动转换为int,所以会报错。当然String也原创 2018-01-01 21:10:41 · 659 阅读 · 0 评论 -
【深入Java基础】java中的hash和equals
关于hash的基本知识Hash,一般翻译做“散列”,也有直接音译为”哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,而不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的消息压缩到某一固定长度的消息摘要的函数。HAS原创 2018-01-02 15:47:57 · 2526 阅读 · 1 评论 -
【深入Java基础】String、StringBuffer与StringBuilder的区别
String、StringBuffer与StringBuilder的区别**String 字符串常量****StringBuffer 字符串变量(线程安全)****StringBuilder 字符串变量(非线程安全)** 简要的说, String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象, 因此在每次对 String 类型进行改变的时候其实都等同于原创 2018-01-03 12:57:34 · 554 阅读 · 0 评论 -
【深入Java基础】ArrayList、LinkedList和Vector的用法与区别
Java中的集合类——ArrayList、LinkedList和VectorArrayList:是List接口的大小可变数组的实现,可以不预设长度,根据需要增加长度。当数组长度达到设定值(即使不显示指定长度,也有一个默认的长度),会产生一个新的对象,长度是增加为50%,并把旧数组的元素复制到新数组,这会使得效率比较慢。LinkedList:是List接口链表的实现,增加、修改以及删除效率比Array原创 2018-01-19 20:30:02 · 684 阅读 · 0 评论 -
【深入Java基础】ArrayList源码分析
本质为对数组的各种操作1. 全局变量默认长度为10 private static final int DEFAULT_CAPACITY = 10;空数组,作用差不多private static final Object[] EMPTY_ELEMENTDATA = {};private static final Object[] DEFAULTCAPACITY原创 2018-01-21 22:57:11 · 345 阅读 · 2 评论 -
【深入Java基础】Vector源码分析
Vector源码分析 Vector和ArrayList一样,基于数组实现。但是Vector实现了同步,里边有好多synchronized修饰的方法。所以适合在多线程下使用。存放数据的数组 protected Object[] elementData;数组长度 protected int elementCount;增量 protected int cap原创 2018-01-24 14:38:47 · 379 阅读 · 0 评论 -
【深入Java基础】LinkedList源码分析
LinkedList源码分析 LinkedList是基于链表实现的。适合大量数据的插入、修改以及删除。链表节点定义这是一个双向链表,有前驱节点和后继节点。 private static class Node { E item; Node next; Node prev; Node(Node prev, E原创 2018-01-24 18:05:03 · 411 阅读 · 0 评论 -
【深入Java基础】HashMap的基本用法
HashMap的基本用法创建HashMap对象 HashMapString,Integer> hashMap = new HashMap添加键值对添加元素时,如果key已经存在,则返回旧value,并将新的value存到该key中;如果key不存在,则返回null hashMap.put("aa",1); hashMap.put("bb",2)原创 2018-01-29 13:40:09 · 58169 阅读 · 0 评论 -
【深入Java基础】HashMap高级用法(一):排序
HashMap高级用法(一):排序根据key排序HashMap是无序的,我们可以根据key进行升序或降序。1.利用List和Collections来实现排序先获取HashMap的keySet,然后将keySet放入List,在由Collections的sort方法进行排序。 HashMapInteger,String> hashMap = new HashMap();原创 2018-01-29 16:06:53 · 21059 阅读 · 2 评论 -
【深入Java基础】HashMap的高级用法(二):同步
HashMap的高级用法:同步HashMap是不支持同步的,不能用于多线程中。而HashTable是同步的,这个日后再论。我们可以使用以下两种方法来实现HashMap的同步:使用ConcurrentHashMap使用Collections.synchronizedMap获取同步map使用ConcurrentHashMap ConcurrentHashMapInteg原创 2018-01-30 18:07:55 · 2522 阅读 · 2 评论 -
【深入Java基础】Hashtable的用法:基本用法,排序及同步
Hashtable的用法:基本用法,排序及同步Hashtable是继承的Dictionary类,实现了Map Hashtable<Integer,String> hashtable = new Hashtable<>(); hashtable.put(1,"aa"); hashtable.put(4,"dd"); hashtable.put(2,"原创 2018-01-31 14:23:24 · 8081 阅读 · 0 评论