1,反射机制
答:JAVA反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意方法和属性;这种动态获取信息以及动态调用对象方法的功能称为java语言的反射机制。
2,HashMap的底层实现
1),HashMap是继承自Map接口与AbstractMap抽象类,按照键值对的方式进行存储数据,无序,存储的key值是唯一的,但是value值可以重复,
key与value可以为null,但是key只能有一个为null,值可以多个为null
2),HashMap的底层实现在jdk1.8之后是数组+单链表+红黑树,在链表的长度大于等于8并且数组的长度大于等于64的时候会将链表转化成红黑树,在红黑树的节点数小于等于6的时候会将红黑树转化成链表,存储键值对的其实是一个node节点,数组是node数组,发生hash冲突是采用的是拉链法。
3),HashMap在jdk1.7之前的底层是数组+链表,每次发生hash冲突,进行拉链法采取的是头插法(这样会导致扩容的时候元素的指向与扩容之前有所不同,可能会造成环,从而使得程序陷入死循环),jdk1.8之后采用的是尾插法。
4),HashMap的初始值是16,阈值是0.75,扩容的倍数为2倍。如果初始化的时候调用的是无参构造器,那么HashMap会在第一次put元素的时候进行第一次扩容,也就是默认的长度16。如果初始化的时候我们传入了自定义的数组长度,那么HashMap会选取大于或等于传入值的2的倍数的值。扩容时对所有的元素进行重新计算在数组中的存储位置。
5),HashMap中的对于key值存储的位置采取了重新hash的方法,即(h=key.hashCode())^(h>>>16);
3,ArrayList与LinkedList的区别
1),ArrayList的底层时动态数组;LinkedList的底层时双向链表
2),根据底层的不同,可知,ArrayList中所有的元素存储的地址都是一串连续的地址空间;而LinkedList则是无序,随机的地址空间
3),ArrayList由于有索引的存在,而LinkedList是节点之间的指向,在查找的时候必须依次遍历查找,所以ArrayList的查找与修改效率高于LinkedList
4),LinkedList由于在删除与添加元素的时候只需要改变节点之间的指向,而ArrayList删除与添加元素的时候需要移动添加位置之后的所有元素,所以它的删除与添加的效率高于ArrayList。
5),但是也不是绝对的,比如ArrayList删除(或添加)最后一个元素的效率与LinkedList查找(或修改)第一个元素与最后一个元素的效率都是高的。
反射、HashMap、ArrayList与LinkedList区别
最新推荐文章于 2023-08-09 15:25:22 发布
本文深入探讨了Java中的反射机制,解释了如何通过反射操作类和对象。同时,对比分析了ArrayList和LinkedList两种集合的区别,包括它们的底层实现、插入删除性能等方面。此外,还详细介绍了HashMap的工作原理及其与数组、链表的关系,帮助读者理解其在不同场景下的使用选择。
摘要由CSDN通过智能技术生成