国庆七天后的自我救赎:

本文深入探讨了Java中的反射机制,详细介绍了如何通过反射创建和调用对象、方法和属性。同时,讲解了Java集合框架,包括Collection、List、Queue、Map的区别和使用,如ArrayList的扩容机制和LinkedList的搜索方式。此外,还涵盖了HashSet的底层实现及XML的解析方式。
摘要由CSDN通过智能技术生成

一、反射:

1、创建对象四种方式:

①直接new ②Object类的clone()返回复制对象 ③反序列化readObject() ④反射的newInstance()

2、反射创建对象:

Class cls = Class.forName(完全限定名)
①无参:Object o = cls.newInstance() 或者Constructor c = cls.getConstructor();Object o = c.newInstance()
②有参:Constructor c = cls.getConstructor(参数列表); Object o = c.newInstance()
③构造器组:Constructor c[] = cls.getConstructors(); 遍历数组

3、反射调用方法:

①公开的:Method m = cls.getMethod(方法名,参数类); m.invoke(o);
②私有的:Method m = cls.getDeclaredMethod(方法名,参数类); m.setAccessible(true); m.invoke(o);
③本类+父类非私有组:Method m[] = cls.getMethods();
④本类包括私有组:Method m[] = cls.getDeclaredMethods();

4、反射调用属性:

①公开的:Field f = cls.getField(属性名); 设置f.set(对象,值); 获取f.get(对象);
②私有的:Field f = cls.getDeclaredField(属性名); 权限f.setAccessible(true); 设置f.set(对象,值); 获取f.get(对象);

二、Collection集合

1、Collection和Collections区别:

Collection是集合类的顶级接口,提供了对集合对象操作的基本方法。直接继承接口有Set和List
Collections是包装类,是集合的工具类,提供集合的排序、搜索、线程安全等操作。无法实例化。

2、迭代器,for,增强for,forEach区别:

①Iterator语法:iterator()返回一个Iterator的实现类。只能遍历集合,不能增删。
②for语法:for(初始条件;循环条件;迭代因子){方法体},只能遍历数组,随意增删。
③增强for语法:for(元素类型 变量名:集合),语法糖,遍历集合底层是迭代器,遍历数组底层是for,不能增删。
④forEach():集合的方法,可使用lambda表达式遍历集合。多线程并发安全,可以增删。

3、集合数组互转:

①集合到数组:Collections.toArray()
②数组到集合:Arrays.asList(),通过集合转换而来的数组,对该集合元素操作就是对原数组的操作。

三、集合子接口之List链表

1、List的排序:

①实现Comparable接口,其中compareTo方法能满足需求的:调用Collections.sort()
②实现Comparable接口但不满足的:重载sort,传入临时比较规则
②没实现的:Comparator比较器接口,调用Collections.sort()匿名实现类,重写compare()定义规则

2、ArrayList底层容量:

JDK6直接创建容量10数组,JDK8创建空数组,第一次插入才分配10个对象空间,超过10个就*1.5

3、LinkedList搜索机制:

二分法。传入索引值与集合size()/2比较,大于则从最后一个找,小于则从第一个找

四、集合子接口之Queue

1、Queue:单向队列,先进先出FIFO,出poll入offer
2、Deque:双向队列,两端都可出入队,头First尾Last
3、Stack:栈结构,先进后出FILO,出pop入push

五、Map查找表:

1、遍历Map三种方式:

①遍历key:ketSet() 返回Set集合
②遍历键值对:entrySet(),返回Set集合
③遍历value:values(),返回Collection集合

2、HashMap容量:

初始化时没有指定容量,则返回一个空table数组。第一次put键值对,初始化长度为16;
达到加载因子0.75时,扩容为原来的二倍

3、HashMap存储:

底层是一个Entry数组。存放元素时,首先会根据key的hashCode值找到数据应该保存在table数组的下标位置。
如果数组位置上没有数据,则保存。如果有,则比较key的equals,如果true,则value值被覆盖。
如果false,则采用链地址法,把新的键值对对象保存到旧的键值对对象的next变量中,形成单向链表结构。
当数组长度>64链表长度>8,转换为红黑树。当树长度<6,转回链表。

4、HashMap查找:

查找数据时,首先会根据key的hashCode值找到对应下标,如果这个位置上什么都没有,返回null。
如果有键值对对象,且equals比较为true,直接返回value。
如果有单向链表,则用key比较链表上每个节点的value,直到相等返回vlue。
如果没有一个是相等,则返回null。

六、树结构:

1、红黑树要求:

①节点是红色或者黑色。
②根节点是黑色。
③所有叶子结点都是黑色。
④每个红色节点的两个子节点都是黑色。
④从根节点到任意叶子结点的所有路径上黑色节点数量相同。

2、红黑树三大基本操作:

左旋、右旋、着色

七、HashSet:

1、HashSet底层:

底层是HashMap,利用了key不能重复的特性,直接将要存储的元素作为key存储到了HashMap中。

八、注解:

1、三大注解:

①jdk注解:jdk提供的5个,比如@Override
②元注解:修饰注解的注解,常用来自定义注解,比如@Target指定位置,@Retention生命周期
③自定义注解

九、XML

1、解析方式:

①DOM:文档对象模型,官方推荐标准,无关语言平台。将xml的内容以树的形式一次性加载到内存,可随机访问修改。但效率低,内存成本高。
②SAX:简单应用程序接口,以事件为驱动,需要哪些数据解析哪些,效率快,但不会将内容加载到内存,不方便,增加程序负担。
③JDOM:java平台使用的,简单高效,但也要加载整个文档,对内存要求高。
④DOM4J:java的xml的API,类似于JDOM,性能优异、功能强大、简单易用,且开源。是目前最流行、最好用的XML解析工具,解析XML速度最快。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值