反射、HashMap、ArrayList与LinkedList区别

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查找(或修改)第一个元素与最后一个元素的效率都是高的。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值