ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一

Java面试题 JDK中包含JRE,JDK中有一个名为jre的目录,里面包含两个文件夹bin和lib,bin就是JVM,lib就是JVM工作所需要的类库。JRE(Java Runtime Environment),Java运行环境。JDK(Java Development Kit),Java开发工具包。如果重写了equals方法,equals比较的是对象的内容。如果没有重写equals,equals就相当于==;对于引用类型,==比较的是堆中内存对象的地址;对于基本类型,==比较的是栈中的值; 阅读详情



package com.lianxi;

import java.io.FileInputStream;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashSet;
import java.util.Properties;
/**
 * hashCode介绍:
 * 	通过hashCode把集合中(该集合必须基于hashCode算法的才行,
 * 	比如HashSet,HashMap等等)的数据分成多个区域,再插入新的数据时,
 * 	按照区域查找要快的多,所以提高了效率
 * 
 * @author zjw
 *
 */
public class LianXi {
	public static void main(String[] args) throws Exception {
		method();
	}
	public static void method() throws Exception{
		//用反射方式,读取配置文件的数据,再实例化调用,实现框架的初级使用
		Properties p=new Properties();
		//一般不用这种相对路径,最好用绝对路径,首先通过getRealPath获取项目绝对路径,在添加对应项目的相对路径即可
		//这种方式,如果要对properties配置文件进行修改数据,可以用FileOutputStream进行操作
//		InputStream is=new FileInputStream("src/com/lianxi/reflect.properties");
//用类加载器加载,方式一:
			//只要运行,LianXi.class就会自动加载到内存,通过该Class再加载其他文件
		//类加载器只能加载配置文件,不能对配置文件进行修改操作
//		InputStream is=LianXi.class.getClassLoader().getResourceAsStream("../resource/reflect.properties");//这样用相对路径会报错,这个没有相对路径一说,必须用绝对路径
		InputStream is=LianXi.class.getClassLoader().getResourceAsStream("com/resource/reflect.properties");
//类加载器方式二:
//类文件直接实现了类加载,内部封装了getClassLoader()方法,可直接调用getResourceAsStream()方法,
		InputStream is2=LianXi.class.getResourceAsStream("reflect.properties");//可以直接用相对路径,此路径为LianXi。class的路径
		InputStream is3=LianXi.class.getResourceAsStream("../reflect.properties");//可以直接用相对路径,此路径为LianXi。class上一级的路径
		InputStream is4=LianXi.class.getResourceAsStream("../resource/reflect.properties");//可以直接用相对路径,此路径为LianXi。class上一级的路径resource包下的路径
//用类文件也可以用绝对路径加载
		InputStream is5=LianXi.class.getResourceAsStream("/com/resource/reflect.properties");//注意顶级包前也要加上"/",这是绝对路径,可以不用随着LianXi.class这个类文件走
		p.load(is5);
		is5.close();
		Collection list=(Collection)Class.forName(p.getProperty("ArrayList")).newInstance();
		//用普通方式,直接实例化对象
//		Collection list=new HashSet();
		Class_a f1=new Class_a(3,3);//创建几个实例对象
		Class_a f2=new Class_a(4,4);
		Class_a f3=new Class_a(5,5);
		Class_a f4=new Class_a(3,3);
		list.add(f1);
		list.add(f2);
		list.add(f3);
		list.add(f4);
		list.add(f1);
		
		f1.b=88;//修改f1对象中的值
		list.remove(f1);//从HashSet中移除该对象,但因为上面修改了f1对象的值,导致该对象的hashCode值改变,
		//现在移除的话,会在另一个hashCode区域查找,但根本找不到,虽然表面上移除了该对象,
		//但其实该对象还是在HashSet集合中,这样长久下去,会导致内存泄露,导致内存溢出
		
		System.out.println(list.size());
	
//		list.add("aa");
//		list.add("bb");
//		list.add("cc");
//		list.add("dd");
//		list.add("aa");
		System.out.println(list);
	}
}
class Class_a{
	private int a;
	public int b;
	public Class_a(int a, int b) {
		this.a = a;
		this.b = b;
	}
	//下面的hashCode和equals方法都是生成的,右键---》Source---》Generate HashCode() and Equals()
	@Override
	public int hashCode() {
		final int prime = 31;
		int result = 1;
		result = prime * result + a;
		result = prime * result + b;
		return result;
	}
	@Override
	public boolean equals(Object obj) {
		if (this == obj)
			return true;
		if (obj == null)
			return false;
		if (getClass() != obj.getClass())
			return false;
		Class_a other = (Class_a) obj;
		if (a != other.a) 
			return false;
		if (b != other.b)
			return false;
		return true;
	}
}


Java基础高级进阶篇之Jvm详解(详解篇五十六) 本文系统介绍了JVM的核心知识点,主要包括以下内容: JVM架构概述:包括类加载子系统、运行时数据区、执行引擎和垃圾收集器等核心模块的组成与功能。 类加载机制:详细解析了类加载的七个阶段(加载、验证、准备、解析、链接、初始化、使用),重点说明了加载阶段的字节流来源、验证阶段的四种检查、准备阶段的静态变量初始化规则等关键过程。 运行时数据区:介绍了堆、方法区、虚拟机栈等内存区域的划分与作用。 执行与垃圾回收:简要提及执行引擎的工作机制和垃圾收集器的不同类型。 文章通过图示和代码示例(如类加载过程、静态变量初始 阅读详情

相关推荐

Intel RealSense D435深度相机实战:从数据采集到点云生成的完整避坑指南

本文详细介绍了Intel RealSense D435深度相机的实战应用,从数据采集到点云生成的完整流程,并提供了避坑指南。内容包括环境配置、硬件调优、数据采集技巧、点云生成核心技术及典型场景解决方案,帮助开发者高效利用D435进行机器人导航、三维重建等应用。

weixin_29054195的博客 472

JAVA面试题(1~95)《上》

1、面向对象的特征有哪些方面?  答:面向对象的特征主要有以下几个方面:  - 抽象:抽象是将一类对象的共同特征总结出来构造类的过程,包括数据抽象和行为抽象两方面。抽象只关注对象有哪些属性和行为,并不关注这些行为的细节是什么。  - 继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类被称为父类(超类、基类);得到继承信息的类被称为子类(派生类)。继承让变化中的软件系统有了一定的延续性...

ywl470812087的博客 4964

UQLab——其他概率分布随机变量转换标准Gaussian分布

1、使用UQLab将其他类型的随机变量转换成标准Gaussian分布; 2、使用科学计数法输出样本,方便后续ANSYS的调用分析; 3、基于MC的可靠度分析。 原随机变量分布类型: % 调用UQLab进行采样 clc clear uqlab %% Specify these distributions as a UQLab INPUT object: PriorOpts.Marginals(1...

ikhui7的博客 3014

Java基础

JAVA后端面试题<JAVA基础> 1.JDK和JRE有什么区别? JDK: JAVA Development Kit的简称,JAVA开发工具包,包括了JAVA的开发环境和运行环境(JRE)。 JRE: JAVA Runtime Environment的简称,JAVA运行环境。 两者关系: JDK包含JRE,同时还包含了JAVA源码编译器 JAVAC,还包含了JAVA程序调试和分析的.........

weixin_43766298的博客 760

AI赚钱新思路 利用RPA+KIMI实现小红书全自动制作发布(详细攻略)

我已经事先准备好了文案素材,现在就利用Kimi的智能,根据我们已有的文案来创作出新的文案吧。之前我写过一篇关于【:一个戴着用百元大钞制成的简约头饰的少女,她坐在小车里,手里拿着一叠港元,整个画面洋溢着现实主义动漫风格和治愈系的温暖气息。通过这篇文章,我们已经一步步地完成了小红书治愈系文案的创作、治愈系图片的生成,以及笔记的发布,实现了整个流程的自动化。不慌不忙,快乐常在 在繁忙的日常中,给自己的心灵留一片净土,感受内心深处的平静与安宁。接下来,我将展示如何使用影刀来编写自动化脚本,以生成治愈系的图文图片。

weixin_42172073的博客 3691

实验三 Gmapping建图

自主移动机器人第三次实验课,内容包括:(1)turtlebot的gmapping建图;(2)rosbag的使用;(3)gazebo中的gmapping建图。

lj164567487的博客 4649

2026 Java面试不是背八股:从原理到场景构建核心知识体系

Java面试正在发生本质变化,从单纯的八股文记忆转向对知识体系与场景落地能力的综合考察。面试官不再满足于“HashMap底层是数组加链表加红黑树”这样的结论,而是连环追问扩容机制、并发问题等原理细节,甚至直接抛出秒杀防超卖、分布式锁等真实业务场景。理解线程池核心参数如何配合、事务传播行为在什么条件下失效,比死记硬背答案更能体现工程能力。掌握JVM内存模型、并发工具与Spring生命周期等基础概念,是深入解析原理的起点;而技术价值最终要落到分布式系统、缓存一致性等实际应用中去。面对2026年的面试趋势,将每个

weixin_30325971的博客 338

同物种,不同版本之间的坐标转化

是最常用的工具,如果有可用的链文件,这通常是最便捷的方法。CrossMap是一个功能强大的替代工具,支持多种文件格式和物种。自定义生成链文件适用于没有现成资源的情况,虽然复杂一些,但可以满足特定需求。Ensembl 和 Gramene提供的工具适用于支持的物种,尤其在植物基因组领域可能更具优势。选择合适的方法取决于你正在处理的物种、基因组版本以及现有的资源。

qq_40256654的博客 1853

Java校招笔试通关指南:从集合框架到并发JVM的核心考点

在Java后端开发岗位的校招笔试中,除了扎实的语言基础,更看重对底层原理与工程实践的深度理解。集合框架作为高频考点,要求掌握HashMap扩容机制、红黑树转换条件以及ArrayList的subList陷阱等源码级细节;而并发编程则聚焦Synchronized锁升级、线程池任务调度策略及AQS原理,这些知识点直接决定了多线程场景下的代码可靠性。JVM内存模型与GC回收机制同样是笔试分水岭,理解GC Roots判定、G1收集器特性与类加载过程,能帮助候选人快速定位生产环境中的性能瓶颈。算法部分则需熟练运用滑动窗

weixin_34198453的博客 396

嵌入式u-boot最全面试题及参考答案(5万字长文持续更新)

例如,在一个便携式设备中,U-Boot 在启动时初始化电源控制器,将输出电压设置为合适的值。命令是u-boot构建过程中用于配置u-boot选项的命令。在嵌入式系统中,启动画面(也称为启动Logo或Splash Screen)是展示给用户的第一印象,它可以包含公司的标志、产品的名称或其他相关信息。u-boot允许通过环境变量来进行配置,这使得开发者可以根据不同的硬件平台和项目需求灵活地调整u-boot的行为。写入操作可以是字节级别的,也可以是块级别的,具体取决于设备的性能和操作系统的需求。

大模型大数据攻城狮的专栏 997

S7-200 SMART PLC 数字量阀门控制功能块(FB)汇总

S7-200 SMART PLC功能块的各种写法可以查看专栏的其它文章,链接地址如下:S7-200 SMART PLC 子程序功能块(阀门控制)_RXXW_Dor的博客-优快云博客_plc控制阀门开关程序由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 4001

面试与压测问题汇总

回答框架(STAR 法则):背景 (S): XX公司业务线众多(金融租赁、保险、营销、物流、发票等),每个迭代需要大量回归测试,手工执行效率低、覆盖不全。任务 (T): 负责设计和开发公司级的 API 自动化测试平台,覆盖多条业务线的接口回归、流程编排和版本对比。基于 Spring Boot + TestNG + llrunner 搭建分层架构设计 Component → Flow → Factory → TestCase 四层架构。

weixin_46921460的博客 554

innovus:streamOut gds中pg text带有冒号(:)解决办法

streamOut后查看layout,发现部分PG text后面加了冒号,比如VDD: / VSS:。当然,这个问题还有另一种解决办法,就是通过脚本给terminal打text再streamOut。我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?

m0_61544122的博客 1190

后端八股整理

后端八股整理

蔡林浩的博客 498

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

工作中使用到的单词(软件开发)

1.エイリアス   alias 别名 powershell使用 get-help 命令时,会得到与此命令 相关(别名)的命令 2.プロキシ proxy 代 理 3.プロモート   promote 促进,提升   开发的系统新功能上线发布,有时会使用到这个词,比如 STプロモート 还有使用リリース这个词的。比如STリリース。个人认为两者含义相同。 4.見逃し み................................................................

sun0322 6万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Java面试八股核心拆解:从JVM内存到并发编程的高频考点

Java基础是技术面试的硬核门槛,无论是HashMap底层原理、JVM内存区域划分,还是synchronized与volatile的并发语义,都是面试官高频考察的知识锚点。理解这些概念背后的设计原理,能帮助开发者构建系统化的知识体系,而牛客面经恰好提供了透视各家公司考点分布的窗口。通过分析大量面经,可以提炼出及格答法与高分答法的分层逻辑,并将散装知识点串联成完整的认知地图。本文从集合框架、JVM调优到线程池参数,系统拆解Java面试中的核心八股,并结合真实线上问题(如OutOfMemoryError)的排查

weixin_42550052的博客 295

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Java基础语法学习指南:从零到精通的系统化路径

Java作为面向对象编程语言的代表,其强类型系统和丰富的语法特性构成了企业级开发的基石。理解数据类型体系、变量作用域和运算符原理是掌握Java编程的基础,这些概念直接影响代码的执行效率和内存管理。在实际开发中,从JDK环境配置到集合框架应用,每个环节都需要遵循工程实践规范。特别是随着Java 8引入Lambda表达式和Stream API,以及后续版本的模式匹配等特性,现代Java开发呈现出函数式与面向对象融合的趋势。本指南针对Java SE 17 LTS版本,系统梳理了从基础语法到面向对象核心概念的完整知

weixin_34062469的博客 424

前端学 Java 课程笔记

面向前端开发人员:大量以前端概念类比

estrusKing的博客 230

注解Annotation简介,及注解简单应用,数组类型的属性,未完待续---枚举类型的属性,注解类型的属性

package com.base_super.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target; imp

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 1万+

BeanUtils包的使用,主要是BeanUtils和PropertyUtils的区别

用BeanUtils工具包时,先要把两个Jar包进行Building Path,就是引入两个jar包, commons-beanutils.jar commons-logging-1.1.jar package com.base_super; import java.util.Date; import java.util.Map; import org.apache.commons.

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 4262

黑马程序员——静态导入,可变参数,自动拆箱装箱以及享元设计模式 JDK1.5新特性

----------------------    android培训    java培训   期待与您交流!    ----------------------                               package zhangxiaoxiang.bank; //import static java.lang.Math.max;//单独导入Math类中的一个max

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 3289

反射的应用,读取properties配置文件中的数据(普通InputStream方式,类加载方式),再调用运行

package com.itheima; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.InputStream; import java.lang.reflect.Method; import java.util.Propertie

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 2608

自己用awt实现界面输入数据保存到Excel文件中

package com; import java.awt.Button; import java.awt.Dimension; import java.awt.FlowLayout; import java.awt.Frame; import java.awt.Label; import java.awt.TextField; import java.awt.Toolkit; import ja

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 2607

内省Introspector操作 JavaBean的简单实现方式及稍复杂实现方式 主要用到PropertyDescriptor类

package com.base_super; import java.beans.BeanInfo; import java.beans.IntrospectionException; import java.beans.Introspector; import java.beans.PropertyDescriptor; import java.lang.reflect.Invocation

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 1680

反射之Method类

这是无参方法的调用 package com.itheima; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; /** * 无参方法调用 */ public class Test5 { public static void main(String[]

知识搬运工,资料任你拿,包括书籍、电影、电视剧、网站、软件等,VX公人人人号:向前书局 1341
上一篇: 数组与Object的关系及其反射类型,数组反射应用实例,通过Array类实现数组的反射
下一篇: 反射的应用,读取properties配置文件中的数据(普通InputStream方式,类加载方式),再调用运行
King·Forward
博客等级 码龄14年 117粉丝 218原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

King·Forward

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值