JAVA
文章平均质量分 65
CallmeZhe
晨曦微露,正义气奋发!
我用双手,成就妳的梦想!
展开
-
Java中类的初始化与实例化总结(类初始化的触发时机,类的实例化触发时机,new一个对象的过程)
全是干货,一网打尽类的基础知识!先看看下面的问题都能回答上来吗? 描述new一个对象的过程,并结合例子说明。 类初始化的触发时机。 多线程进行类的初始化会出问题吗? 类的实例化触发时机。 <clinit>()方法和<init>()方法区别。 在类都没有初始化完毕之前,能直接进行实例化相应的对象吗? 类的初始化过程与类的实例化过程的异同? 一个实例变量在对象初始化的过程中会被赋值几次? 描述new一个...原创 2021-02-10 08:47:39 · 1624 阅读 · 1 评论 -
深入理解JDK1.8中HashMap,LinkedHashMap源码及设计思路
目录(一)HashMap,LinkedHashMap的关系(二)加载因子的作用和默认的加载因子为什么是0.75f(三)为什么哈希表的容量(数组长度)是2的整数次幂(四)put操作的实现源码及设计思路HashMap中putLinkedHashMap中put(五)get操作的实现源码及设计思路HashMap中getLinkedHashMap中get(六)怎么进行扩容(七)HashMap是怎么解决hash冲突的之前有分析过1.8之前的HashMap源码,今天再来看看原创 2020-11-28 16:25:41 · 209 阅读 · 0 评论 -
Java语言实现排序算法---选择排序
选择排序(Selection sort)是一种简单直观的排序算法。它的工作原理如下。首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。算法规则:将待排序集合(0...n)看成两部分,在起始状态中,一部分为(k..n)的待排序unsorted集合,另一部分为(...原创 2018-08-07 09:12:50 · 237 阅读 · 0 评论 -
Java语言实现排序算法---冒泡排序
冒泡排序:是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢“浮”到数列的顶端。算法规则:由于算法每次都将一个最大的元素往上冒,我们可以将待排序集合(0...n)看成两部分,一部分为(k..n)的待排序u...原创 2018-08-14 09:07:26 · 293 阅读 · 0 评论 -
Java语言实现排序算法---快速排序
快速排序:又称划分交换排序(partition-exchange sort),一种排序算法,最早由东尼·霍尔提出。在平均状况下,排序n个项目要Ο(n log n)次比较。在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见。事实上,快速排序通常明显比其他Ο(n log n)算法更快,因为它的内部循环(inner loop)可以在大部分的架构上很有效率地被实现出来。算法规则: ...原创 2018-09-07 16:13:21 · 374 阅读 · 0 评论 -
Java语言实现排序算法---归并排序
归并排序:是创建在归并操作上的一种有效的排序算法,效率为O(n log n)。1945年由约翰·冯·诺伊曼首次提出。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用,且各层分治递归可以同时进行。算法规则: 像快速排序一样,由于归并排序也是分治算法。因此可使用分治思想:申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列 设...原创 2018-09-10 14:02:35 · 244 阅读 · 0 评论 -
常用查找思想——顺序查找、折半查找
顺序查找基本原理:依次遍历public class Solution { public static int SequenceSearch(int[] sz, int key) { for (int i = 0; i < sz.length; i++) { if (sz[i] == key) { return i; } } ret...原创 2018-10-18 13:09:46 · 361 阅读 · 0 评论 -
Java语言实现常见Singleton单例模式举例
/** * 单例模式,饿汉式,线程安全 */ public static class Singleton { private final static Singleton INSTANCE = new Singleton(); private Singleton() { } public static Singleton getInsta...原创 2018-10-23 11:10:18 · 260 阅读 · 0 评论 -
Java语言判断扑克牌顺子问题
题目:从扑克牌中随机抽5张牌,判断是不是顺子,即这5张牌是不是连续的。2-10 为数字本身,A 为 1,J 为 11,Q 为 12,K 为 13,而大小王可以看成任意的 数字。解题思路:我们可以把5张牌看成是由5个数字组成的数组。大小王是特殊的数字,我们可以把它们都定义为0,这样就可以和其他的牌区分开来。首先把数组排序,再统计数组中0的个数,最后统计排序之后的数组中相邻数字之...原创 2019-03-12 13:13:43 · 1145 阅读 · 0 评论 -
Java语言设计一个有getMin功能的栈
实现一个特殊的栈,在实现栈的基本功能的基础上,再实现返回栈中最小元素的操作。要求:pop、push、getMin操作的时间复杂度都是O(1) 设计的栈类型可以使用现成的栈结构实现代码:/** * * 实现一个特殊的栈,在实现栈的基本功能的基础上,在实现返回栈中最小元素的操作。 要求: 1. pop、push、getMin操作的时间复杂度都是O(1) * 2. 设...原创 2019-10-10 12:55:28 · 284 阅读 · 0 评论 -
Java语言用两个栈设计一个队列
题目:编写一个类,用两个栈实现队列,支持队列的基本操作(add,poll,peek)解题:/** * * 编写一个类,用两个栈实现队列,支持队列的基本操作(add、poll、peek)。 * */public class TwoStacksImplementQueue { public static class myQueue{ Stack<Integer>...原创 2020-11-16 11:22:47 · 120 阅读 · 0 评论 -
网络基础知识---TCP与UDP总结及优缺点比较
TCP与UDP面向报文的传输方式是应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。因此,应用程序必须选择合适大小的报文。若报文太长,则IP层需要分片,降低效率。若太短,会是IP太小。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。这也就是说,应用层交给UDP多长的报文,UDP就照样发送,即一次发送一个报文。面向字节流的话,虽然...原创 2019-07-02 09:12:00 · 653 阅读 · 0 评论 -
网络基础知识---Http协议小结
Http协议支持客户/服务器模式 简单快速:客户向服务端请求服务时,只需传送请求方式和路径。 灵活:允许传输任意类型的数据对象。由Content-Type加以标记。 无连接:每次响应一个请求,响应完成以后就断开连接。 无状态:服务器不保存浏览器的任何信息。每次提交的请求之间没有关联。非持续性和持续性HTTP1.0默认非持续性;HTTP1.1默认持续性持续...原创 2018-12-11 14:17:26 · 238 阅读 · 0 评论 -
《JAVA》New IO 简单介绍(Channel,Buffer)
Java NIO(New IO)是一个可以替代标准Java IO API的IO API(从Java1.4开始),Java NIO提供了与标准IO不同的IO工作方式。Channels and Buffers(通道和缓冲区)标准的俄IO基于字节流和字符流进行操作的,而NIO是基于通道(Channel)和缓冲区(Buffer)进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入通道也类似。Non-b...原创 2018-06-14 09:07:06 · 320 阅读 · 0 评论 -
Java常用基础知识点小结(二)
解析XML的几种方式的原理与特点:DOM、SAX、PULLSax定义SAX是一个解析速度快并且占用内存少的xml解析器,非常适合用于android等移动设备SAX全称是Simple API for Xml,既是指一种接口,也是一个软件包作为接口,sax是事件驱动型xml解析的一个标准接口Sax特点解析效率高,占用内存少可以随时停止解析不能载入整个文档到内存不能写入xmlSAX解析xml文件采用的...原创 2018-03-30 09:43:34 · 304 阅读 · 0 评论 -
Java Android中的常见内存泄漏场景及解决分析
1.Java内存回收机制不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址。Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Heap)中分配的,所有对象的回收都是由Java虚拟机通过垃圾回收机制完成的。GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方法进行...原创 2018-04-03 09:55:37 · 154 阅读 · 0 评论 -
Java中String类常用方法源码分析及总结
范例一:public void stringTest(){ String a = "a"+"b"+1; String b = "ab1"; System.out.println(a == b);}大家猜一猜结果如何?如果你的结论是true。好吧,再来一段代码:public void stringTest(){ String a = new String("ab1"...原创 2018-04-04 10:18:39 · 188 阅读 · 0 评论 -
Java 集合族谱概述总结
Java集合工具包位于Java.util包下,包含了很多常用的数据结构,如数组、链表、栈、队列、集合、哈希表等。Java集合框架下大致可以分为如下五个部分:List列表、Set集合、Map映射、迭代器(Iterator、Enumeration)、工具类(Arrays、Collections)。Java集合类的整体框架如下:从上图中可以看出,集合类主要分为两大类:Collection和Map。Col...原创 2018-04-08 08:29:40 · 199 阅读 · 0 评论 -
Java中ArrayList总结与源码解读
ArrayList是基于数组实现的,是一个动态数组,其容量能自动增长,类似于C语言中的动态申请内存,动态增长内存。ArrayList不是线程安全的,只能在单线程环境下,多线程环境下可以考虑用collections.synchronizedList(List l)函数返回一个线程安全的ArrayList类,也可以使用concurrent并发包下的CopyOnWriteArrayList类。Array...原创 2018-04-10 10:53:39 · 191 阅读 · 0 评论 -
Java中LinkedList总结与源码解读
LinkedList是基于双向循环链表(从源码中可以很容易看出)实现的,除了可以当作链表来操作外,它还可以当作栈,队列和双端队列来使用。LinkedList同样是非线程安全的,只在单线程下适合使用。它实现了Serializable接口,因此它支持序列化,能够通过序列化传输,实现了Cloneable接口,能被克隆。LinkedList的源码如下(加入了比较详细的注释):package java.ut...原创 2018-04-11 11:39:48 · 240 阅读 · 0 评论 -
Java中Vector总结与源码解读
Vector是基于数组实现的,是一个动态数组,其容量能自动增长。Vector是JDK1.0引入了,它的很多实现方法都加入了同步语句,因此是线程安全的(其实也只是相对安全,有些时候还是要加入同步语句来保证线程的安全),可以用于多线程环境。Vector没有实现Serializable接口,因此它不支持序列化,实现了Cloneable接口,能被克隆,实现了RandomAccess接口,支持快速随机访问。...原创 2018-04-16 09:05:19 · 179 阅读 · 0 评论 -
Java1.7中HashMap总结与源码解读
HashMap是基于哈希表实现的,每一个元素都是一个key-value对,其内部通过单链表解决冲突问题,容量不足(超过了阈值)时,同样会自动增长。HashMap是非线程安全的,只是用于单线程环境下,多线程环境下可以采用concurrent并发包下的concurrentHashMap。HashMap实现了Serializable接口,因此它支持序列化,实现了Cloneable接口,能被克隆。Hash...原创 2018-04-19 15:04:59 · 268 阅读 · 0 评论 -
Java JVM数据存储模型、GC判定与收集、类加载过程
JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。程序计数器(Program Counter Register)一块较小的内存空间,它是当前线程所执行的字节码的信号指示器,字节码解释器工作时通过改变该计数器的值来选择下一条需要执行的字节码指令,分支、跳转、循环等基础功能都要依赖它来实现。每条线程都有一个独立的的程序计数器,各线程间的计数器互不...原创 2018-04-27 16:36:23 · 313 阅读 · 0 评论 -
Java经典案例 生产者与消费者
package 生产者消费者;public class ProducerConsumerTest { public static void main(String[] args) { PublicResource resource = new PublicResource(); new Thread(new ProducerThread(resource)).start(); ...原创 2018-05-02 14:33:03 · 328 阅读 · 0 评论 -
《JAVA》线程中断interrupt总结
使用interrupt()中断线程当一个线程运行时,另一个线程可以调用对应的Thread对象的interrupt()方法来中断它,该方法只是在目标线程中设置一个标志,表示它已经被中断,并立即返回。这里需要注意的是,如果只是单纯的调用interrupt()方法,线程并没有实际被中断,会继续往下执行。演示休眠线程的中断public class SleepInterrupt extends Object...原创 2018-05-10 12:55:30 · 410 阅读 · 1 评论 -
Java 多线程同步机制synchronized互斥锁总结
在并发编程中,多线程同时并发访问的资源叫做临界资源,当多个线程同时访问对象并要求操作相同资源时,分割了原子操作就有可能出现数据的不一致或数据不完整的情况,为避免这种情况的发生,我们会采取同步机制,以确保在某一时刻,方法内只允许有一个线程。采用synchronized修饰符实现的同步机制叫做互斥锁机制,它所获得的锁叫做互斥锁。每个对象都有一个monitor(锁标记),当线程拥有这个锁标记时才能访问这...原创 2018-05-15 10:19:39 · 234 阅读 · 0 评论 -
《JAVA》之多线程环境下安全使用集合API
在集合API中,最初设计的Vector和Hashtable是多线程安全的。例如:对于Vector来说,用来添加和删除元素的方法是同步的。如果只有一个线程与Vector的实例交互,那么,要求获取和释放对象锁便是一种浪费,另外在不必要的时候如果滥用同步化,也有可能会带来死锁。因此,对于更改集合内容的方法,没有一个是同步化的。集合本质上是非多线程安全的,当多个线程与集合交互时,为了使它多线程安全,必须采...原创 2018-05-21 14:43:55 · 220 阅读 · 0 评论 -
《JAVA》多线程中wait,notify,notifyAll使用小结
在Java的Object类中有三个final的方法允许线程之间进行资源对象锁的通信,他们分别是: wait(), notify() and notifyAll()。调用这些方法的当前线程必须拥有此对象监视器,否则将会报java.lang.IllegalMonitorStateException异常。waitObject的wait方法有三个重载方法,其中一个方法wait() 是无限期(一直)等待,直...原创 2018-05-28 12:58:05 · 368 阅读 · 0 评论 -
Java常用基础知识点小结(一)
八种基本数据类型boolean,byte,int,character,long,short,float,double。对应的封装类:Boolean,Byte,Integer,Character,Long,Short,Float,DoubleSwitch能否用string做参数?在Java 5以前,switch(expr)中,expr只能是byte、short、char、int。从Java 5开始,...原创 2018-03-28 10:22:44 · 352 阅读 · 0 评论