![](https://img-blog.csdnimg.cn/20201014180756923.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
java基础
文章平均质量分 70
DanLongChen
学以致用
展开
-
java HashMap按值进行排序
java HasnMap 按值进行排序方法实现代码如下:import java.util.ArrayList;import java.util.Collections;import java.util.Comparator;import java.util.HashMap;import java.util.Iterator;impor原创 2017-07-10 21:12:30 · 2022 阅读 · 0 评论 -
面试题:Overload和Override的区别。Overload的方法是否可以改变返回值的类型?
Overload和Override的区别。Overload的方法是否可以改变返回值的类型?Overload:重载Override:重写重载: 同一个类中,方法名相同,参数列表不同。与返回值类型无关。重写: 存在于子父类,或者子父接口中,方法声明相同。Overload的方法可以改变返回值的类型,因为它与返回值类型无关。...转载 2019-04-17 16:46:26 · 975 阅读 · 0 评论 -
java反射机制
什么是反射?JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。Java反射机制主要提供的功能?在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;...原创 2019-04-23 21:47:48 · 123 阅读 · 0 评论 -
Java集合类中的Iterator和ListIterator的区别
最近看到集合类,知道凡是实现了Collection接口的集合类,都有一个Iterator方法,用于返回一个实现了Iterator接口的对象,用于遍历集合;(Iterator接口定义了3个方法分别是hasNext(),next(),remove();)我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍历的过程,只需要每...原创 2019-04-28 19:50:54 · 229 阅读 · 0 评论 -
Query的list()和iterate()方法的区别
1.Query接口的list与iterate方法:iterate()方法:Return the query results as an Iterator. Ifthe query contains multiple results pre row, the results are returned in aninstance ofObject[].Entities returned as r...转载 2019-04-24 10:56:46 · 1410 阅读 · 0 评论 -
Java的快速失败和安全失败
一:快速失败(fail—fast)在用迭代器遍历一个集合对象时,如果遍历过程中对集合对象的内容进行了修改(增加、删除、修改),则会抛出Concurrent Modification Exception。原理:迭代器在遍历时直接访问集合中的内容,并且在遍历过程中使用一个 modCount 变量。集合在被遍历期间如果内容发生变化,就会改变modCount的值。每当迭代器使用hashNext()/n...原创 2019-04-28 20:07:11 · 145 阅读 · 0 评论 -
hashmap和hashtable区别
1、继承不同。public class Hashtable extends Dictionary implements Mappublic class HashMap extends AbstractMap implements Map2 产生时间不同Hashtable是java一开始发布时就提供的键值映射的数据结构,而HashMap产生于JDK1.2。虽然Hashtable比HashMa...原创 2019-04-28 20:22:38 · 593 阅读 · 1 评论 -
Java中“==”、equals()、hashcode()的区别与联系
在Java中判断两个对象是否相等的方法有许多,这里记录一下我所理解的三个方法之间的区别与联系首先我们最长用到的应该是==,毕竟很多人是从C语言入门编程的,所以更多的时候我们会习惯使用==来判断两个对象是否相等,==是Java语言为我们预留的关键字,用于比较两个对象是否相等。刚刚接触Java的时候有人告诉我Java中是不存在指针的(根据个人理解而异),但是我的理解是,C语言中指针的含义是存储数据的...原创 2019-04-24 14:05:05 · 171 阅读 · 0 评论 -
数组是协变的
数组是协变的,如果Apple是Fruit的子类型,那么数组类型Apple[]就是Fruit[]的子类型,所以这就使得此向上转型是成立的。Fruit[] apples=new Apple[size];数组在编译时表示法可能是抽象的,而在运行时表示法往往一定是具体的,包含更多的信息。Object[] objects=new Fruit[size]; Fruit[] apples=new A...转载 2019-05-05 10:04:09 · 702 阅读 · 0 评论 -
HashMap中的桶长度为啥要定为2^n
HashMap为了存取高效,要尽量较少碰撞,就是要尽量把数据分配均匀,每个链表长度大致相同,这个实现就在把数据存到哪个链表中的算法; 这个算法实际就是取模,hash%length,计算机中直接求余效率不如位移运算,源码中做了优化hash&(length-1), hash%length==hash&(length-1)的前提是length是2的n次方; 为什么这样能均匀分布减少碰撞呢...原创 2019-04-24 20:42:11 · 578 阅读 · 0 评论 -
为什么集合类没有实现Cloneable和Serializable接口
转自:https://blog.csdn.net/qq_18433441/article/details/78222335为什么集合类没有实现Cloneable和Serializable接口?答:克隆(cloning)或者序列化(serialization)的语义和含义是跟具体的实现相关的。因此应该由集合类的具体实现类来决定如何被克隆或者序列化一些解释:(1)什么是克隆?克隆是把一个对象...转载 2019-04-24 21:11:33 · 178 阅读 · 0 评论 -
java内存泄露剖析
虽然Java自带垃圾回收机制(GC),程序员不需要手动进行内存管理,但是仍然会出现内存泄漏的情况。尽管如此,Java的自动内存管理,比起C/C++,内存泄漏的情况大大减少了。下面总结下什么情况下会发生Java内存泄漏。静态集合类在使用Set、Vector、HashMap等集合类的时候需要特别注意,有可能会发生内存泄漏。当这些集合被定义成静态的时候,由于它们的生命周期跟应用程序一样长,这时候,就...原创 2019-04-30 20:55:45 · 164 阅读 · 0 评论 -
List,Map,Set三个接口,存取元素的时候,各有什么特点?
List与Set都是单列元素的集合,它们有一个功共同的父接口Collection。Set里面不允许有重复的元素,存元素:add方法有一个boolean的返回值,当集合中没有某个元素,此时add方法可成功加入该元素时,则返回true;当集合含有与某个元素equals相等的元素时,此时add方法无法加入该元素,返回结果为false。取元素:没法说取第几个,只能以Iterator接口取得所有的元素...转载 2019-05-06 20:14:07 · 409 阅读 · 0 评论 -
WeakHashMap浅析
在Java集合框架系列文章的最后,笔者打算介绍一个特殊的成员:WeakHashMap,从名字可以看出它是某种 Map。它的特殊之处在于 WeakHashMap 里的entry可能会被GC自动删除,即使程序员没有调用remove()或者clear()方法。更直观的说,当使用 WeakHashMap 时,即使没有显示的添加或删除任何元素,也可能发生如下情况:(1)调用两次size()方法返回不同的...原创 2019-05-22 15:06:58 · 214 阅读 · 0 评论 -
finally一定会被执行么?
finally作为异常处理的一部分,它只能用在try/catch语句中,并且附带一个语句块,表示这段语句最终一定会被执行(不管有没有抛出异常),经常被用在需要释放资源的情况下。(×)(这句话其实存在一定的问题)很多人都认为finally语句块一定会执行,但真的是这样么?答案是否定的,例如下面这个例子: 当我们去掉注释的三行语句,执行结果为:为什么在以上两种情况下都没有执行finally语句...原创 2019-04-17 16:41:50 · 4924 阅读 · 2 评论 -
深入理解String、StringBuffer、StringBuilder区别和源码实现
区别1、String是常量,而StringBuilder,StringBuffer是变量,2、StringBuffer 与 StringBuilder 中的方法和功能完全是等价的,3、只是StringBuffer 中的方法大都采用了 synchronized 关键字进行修饰,因此是线程安全的,而 StringBuilder 没有这个修饰,可以被认为是线程不安全的。4、在单线程程序下,St...原创 2019-04-17 11:10:48 · 973 阅读 · 0 评论 -
JAVA的基本类型及自动转换问题
JAVA的基本类型及自动转换问题2016-12-31 12:18 488人阅读 评论(0)收藏举报分类: codeJava(8) 作者同类文章XJava提供了一组基本数据类型,包括boolean, byte, char, short, int, long, float, double, v转载 2017-06-30 22:47:41 · 311 阅读 · 0 评论 -
Thinking in java个人笔记4
Thinking in java 个人笔记4Ø 范性:如ArrayList a=new ArrayList();List类型有size(),add(),get()Ø java容器类:常用集合类的继承关系CollectionCollectionCollectionCollectionCollectionCollectionMapMap一、 几个常用原创 2017-07-11 22:48:51 · 352 阅读 · 0 评论 -
Java的动态绑定那些事
Java的动态绑定那些事绑定:一个方法的调用与方法所在的类关联起来。java中的绑定分为静态绑定和动态绑定,又被称作前期绑定和后期绑定。 静态绑定:(final、static、private)在程序执行前已经被绑定,也就是说在编译过程中就已经知道这个方法是哪个类的方法,此时由编译器获取其他连接程序实现。 动态绑定:在运行根据具体对象的类型进行绑定。(对象无法知道它是属于方法所在的那...原创 2018-08-17 14:59:56 · 158 阅读 · 0 评论 -
java垃圾回收的三种算法
java垃圾回收的三种算法为什么需要垃圾回收: 在程序执行的过程中,会产生一系列的对象(占用内存的代表),这些都会存储在内存中。一部分对象在生命周期结束后,依然会占用一部分内存。这些占用内存却没有再次使用的对象,我们称之为“垃圾”,而对“垃圾”占用的内存的回收,就是垃圾回收。在没有垃圾回收机制的语言里,垃圾回收操作需要程序猿来完成,这常常会导致错误。内存泄漏:忘记释放一部分内存,导致...原创 2018-08-17 15:11:52 · 4495 阅读 · 1 评论 -
Java堆和Native堆
为什么引进非Java堆?Java如果和外界通讯,把Java 堆中的内容传输到外界,则需要把Java堆复制到非Java堆,如果使用native堆,则避免了内容在Java堆和非Java堆之间的copy.在什么场景下使用非Java堆? 非Java堆的回收不受java yong gc的影响,一般需要手工进行回收。如果大量的使用非Java堆,则丢失了Java 自动垃圾回收的特点。 一...原创 2018-09-08 20:22:51 · 3560 阅读 · 2 评论 -
Minor GC、Major GC和Full GC之间的区别
概念: ● 新生代 GC(Minor GC):从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,因为 Java 对象大多都具备朝生夕灭的特性,所以 Minor GC 非常频繁,一般回收速度也比较快。这一定义既清晰又易于理解。但是,当发生Minor GC事件的时候,有一些有趣的地方需要注意到: 1. 当 JVM 无法为一个新的对象分配空间时会触...原创 2018-09-08 20:45:51 · 19310 阅读 · 8 评论 -
Java并发中的通知/等待模式实现(2种)
Condition接口实现了通知/等待方法:await()当前线程进入等待状态,直到被通知(signal或者中断) awaitUninterruptibly()不能被中断 awaitNanos()可以设置纳秒级别的超时时间 awaitUntil()当前线程进入等待状态直到被通知(可以设置时间) signal()唤醒 signalAll()唤醒所有线程调用condition.awa...原创 2018-09-08 20:57:27 · 910 阅读 · 0 评论 -
java中的yield方法
使当前线程从执行状态(运行状态)变为可执行态(就绪状态)。cpu会从众多的可执行态里选择,也就是说,当前也就是刚刚的那个线程还是有可能会被再次执行到的,并不是说一定会执行其他线程而该线程在下一次中不会执行到了。Java线程中有一个Thread.yield( )方法,很多人翻译成线程让步。顾名思义,就是说当一个线程使用了这个方法之后,它就会把自己CPU执行的时间让掉,让自己或者其它的线程运行。...原创 2018-09-08 21:01:20 · 2482 阅读 · 0 评论 -
Java常量池解析
1.字符串常量池(String Constant Pool):1.1:字符串常量池在Java内存区域的哪个位置?在JDK6.0及之前版本,字符串常量池是放在Perm Gen区(也就是方法区)中;在JDK7.0版本,字符串常量池被移到了堆中了。至于为什么移到堆内,大概是由于方法区的内存空间太小了。JDK8以后也还是放在了Heap空间中,并没有移到元空间。1.2:字符串常量池是什么?在Ho...原创 2019-04-10 16:44:23 · 173 阅读 · 0 评论 -
Java中的String,StringBuilder,StringBuffer三者的区别
这三个类之间的区别主要是在两个方面,即运行速度和线程安全这两方面。1.运行速度,或者说是执行速度,在这方面运行速度快慢为:StringBuilder > StringBuffer > String String最慢的原因: String为字符串常量,而StringBuilder和StringBuffer均为字符串变量,即String对象一旦创建之后该对象是不可更改的,但后两者...原创 2019-04-12 11:00:57 · 136 阅读 · 0 评论 -
字符串编码和解码的两种方式
public void Decoder(String message) throws UnsupportedEncodingException, CharacterCodingException { /** * 将message解码为二进制数组 */ byte[] bytes=message.getBytes("UTF-8");...原创 2019-04-12 11:22:37 · 1176 阅读 · 0 评论 -
&和&&的区别及!和~区别
原文:https://blog.csdn.net/weilexuexi12/article/details/70141982&、|、都是位操作符,而&&、|、|都是逻辑操作!。下面我们就分成三组对问题进行分析:分别是&和&&,|和||及~和!。1.&是按位与操作,参加运算的两个数据按照二进制位进行“与”运算,如果两个相应的二进制位都为1...转载 2019-04-12 11:26:11 · 713 阅读 · 0 评论 -
JAVA中跳出多重嵌套循环的几种方法
一、标签方式类似于C语言的goto,用法是在最外层循环的上边放置一个标签,然后在里层的循环代码中使用break+标签的方式,就可以跳到最外层循环public static void main(String[] args) { outer: for(int i=0;i<3;i++){ for(int j=0;j<2;j++){ ...原创 2019-04-12 14:39:08 · 986 阅读 · 0 评论 -
HashMap1.8和HasMap1.6的区别
(1)1.6在put(null,value);的时候讲这个键值对放在哈希桶的第一个(直接判断),1.8是计算null的hash值(0)还是放在第一个(2)1.6中的put使用链表的头插法,而1.8中使用的是尾插法。(3)hash值计算不同:1.6: h ^= (h >>> 20) ^ (h >>> 12); return h ^ (h >>>...原创 2019-05-31 09:48:20 · 465 阅读 · 0 评论