自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(12)
  • 收藏
  • 关注

原创 集合面试题

HashMap经典面试题1.为什么加载因子是0.75?如果设置为1:空间利用率得到了很大的满足,很容易碰撞,产生链表,从而导致查询效率低如果设置为0.5:碰撞的概率低,扩容,产生链表的几率低,查询效率高,空间利用率太低所以做了一个折中,让空间利用率和时间效率都得到满足2.主数组的长度为什么是2^n?原因1: h & (lengh -1) 等效于 h % length操作,等效的前提就是:length必须是2的整数倍原因2:防止哈希冲突,位置冲突集合面试题HashMap和Hashta

2022-03-15 22:59:42 786

原创 常用集合知识笔记(全)

集合可以分为两大类:Collection和Map,其中Collection是一个个存放数据的,而Map是一对一对存放数据的Collection是一个接口,有两个重要的子接口:List和Set,其中List是有序的可以重复的,Set是无序的不可重复的List接口重要的实现类:ArrayList、LinkedList、Vector(已淘汰)Set接口重要的实现类:HashSet(重要)、TreeSetCollection接口实现类的特点:1.Collection的实现类可以存放多个元素,每个元素可以

2022-03-15 21:39:40 1136

原创 Java面试(四)

遇到过异常吗,如何处理?在java中,可以按照如下三个步骤处理异常:1.捕获异常将可能发生异常的代码块包裹在try内部,当业务代码中发生任何异常时,系统都会为此异常创建一个异常对象。创建异常对象后,JVM会在try块后寻找可以处理它的catch块,把这个异常对象交给这个catch块来处理2.处理异常在catch块中处理异常时,应该先记录日志,便于以后追溯这个异常。然后根据异常的类型、结合当前的业务情况,进行相应的处理3.回收资源如果业务代码块打开了某个资源,比如数据库链接,网络链接和磁盘文件等

2022-03-14 23:07:58 163

原创 Java面试(三)

1.说一说hashCode()和equals()的关系hashCode()用于获取哈希码,equals()用于比较两个对象是否相等,他们应遵循如下规定:1.如果两个对象相等,则它们必须拥有相等的哈希码2.如果两个对象有相等的哈希码,但是他们未必相等2.为什么要重写hashCode()和equals()Object类的equal方法默认是用==来进行比较的,也就是两个对象是同一个对象的时候,才能返回相等的结果。但是实际业务中,我们通常的需求是:若两个不同的对象他们的内容是相等的,就认为是相等的,所以

2022-03-14 22:05:02 350

原创 Java面试(二)

1.int和Integer的区别,二者在==运算时会得到什么结果?int是基本数据类型,Integer是int的包装类。二者在做==运算时,Integer会自动拆箱成int类型,然后再进行比较,如果两者的int值一样就返回true否则返回false2.说一说对面向对象的理解对比面向过程,是两种不同的处理问题的角度面向过程更注重事情的每一个步骤以及顺序,面向对象更注重有哪些参与者(对象),以及各自需要做什么面向过程比较直接高效,而面向对象更易于复用、扩展和维护**封装:**封装的意义在于明确标识出

2022-03-14 20:45:00 348

原创 JAVA面试基础(一)

1.为什么Java代码可以实现一次编写、到处运行?JVM是Java跨平台的关键。在程序运行前,java源代码.java需要经过编译器编译成字节码.class。在程序运行时,JVM负责将字节码翻译成特定平台下的机器码并运行,也就是说,只要在不同的平台上安装对应的JVM,就可以运行字节码文件。注意:1.编译的结果是生成字节码而不是机器码,字节码不能直接运行,必须通过JVM翻译成机器码才能运行。2.跨平台的是java程序,而不是JVM。2.一个Java可以有多个类吗(不含内部类)1.一个java文件

2022-03-14 01:08:09 380

原创 反射机制理解

Java Refleciton1.反射机制允许程序在执行期间借助于ReflectionAPI取得任何类的内部信息,并且能够操作对象的属性以及方法。反射在设计模式和框架底层都会用得到2.加载完类后,在堆中就产生了一个Class类型的对象(一个类只有一个Class对象),这个对象包含了类的完整结构信息。通过这个对象得到类的结构,这个Class对象就像一面镜子,透过这个镜子可以看到类的结构反射机制原理图Java反射机制可以完成1.在运行时判断任意一个对象所属的类2.在运行时构造任意一个类的对象3.

2022-03-13 14:16:23 1151

原创 HashSet和TreeSet去重机制的理解

1.HashSet的去重机制hashCode() + equals(),底层先通过存入对象,进行运算得到一个hash值,通过hash值得到对应的索引,如果发现table索引所在的位置没有数据,那么直接存放;如果有数据,就会进行equals遍历比较,如果比较后不相同那么就加入,否则不加入。2.TreeSet的去重机制如果你传入了一个Comparator匿名对象,就使用实现的compare去重,如果方法返回0则认为是相同的元素,是不会添加的。如果你没有传入一个Comparator匿名对象,那么就以你添加的

2022-02-23 21:14:08 116

原创 LinkedHashSet源码解读

结论:1.在LinkedHashSet中维护了一个hash表和双向链表2.每一个节点有before和after属性,这样可以形成双向链表3.在添加一个元素时,先求hash值再求索引,确定该元素在table表的位置,然后将添加的元素加入到双向链表(如果存在则不添加[原则和HashSet一样])//代码表示如下:tail.next = newElement;newElement.pre = tail;tail = newElement;4.这样的话,我们遍历LinkedHashSet也能确保插

2022-02-22 19:34:10 229

原创 HashSet底层扩容机制和转成红黑树机制

结论:1.HashSet底层是HashMap,第一次添加的时候,table表扩容到16大小,此时临界值threshold是16 * 0.75(加载因子loadFactor) = 122.如果table表使用了临界值12的位置,就会扩容到 16 * 2 = 32大小,此时新的临界值就是32 * 0.75 = 24,以此类推3.在java8中,该链表转化成红黑树需要满足两个条件:3.1该链表元素达到83.2table表大小 > 64另外需要注意:所谓加入一个元素size++不是说只有加到tab

2022-02-22 18:39:29 841

原创 HashSet源码解读

对如下代码进行解读: HashSet hashSet = new HashSet(); hashSet.add("java"); hashSet.add("php"); hashSet.add("java"); System.out.println("set = " + hashSet);1.先执行构造器public HashSet() { map = new HashMap<>();

2022-02-22 18:05:25 737

原创 汉诺塔第一次思考

代码新人渣第一次记录博客,是关于第一次思考的实验汉诺塔的原理。实验的要求是有n个从小到大的圆盘已经在a柱了,一共有三个柱子,分别是最左边的a柱,中间的b柱,最右边的c柱。每次移动只能移动一个圆盘并且要保持每个柱子的圆盘都是从小到大的顺序(从上往下)。分析:根本目的是将a中一共n个圆盘移动到c。于是大致分为了三个步骤。第一步:将在a中最大的上面的n-1个圆盘移动到b。第二步:将在a中最大的圆盘(第n个)直接移动到c。第三步:将在b中共n-1个圆盘移动到c中。观察发现,除了第二步是可以一步实现的,

2021-03-10 00:55:21 165

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除