ArrayList 与HashSet的比较,及应用反射读取properties配置文件中的数据进行实例化再调用,以及类加载器的使用;还有HashCode的分析,及导致内存泄露,内存溢出的原因之一
2012-09-19 10:22
1241 查看
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; } }
相关文章推荐
- 反射的应用,读取properties配置文件中的数据(普通InputStream方式,类加载方式),再调用运行
- java学习之ArrayList和HashSet的比较以及HashCode分析
- ArrayList与HashSet的比较,以及HashCode分析, 内存泄露
- android中JNI调用时内存分布以及内存泄露原因分析
- 09_通过读取配置文件的方式来使用反射完成对实例对象方法调用
- mark/reset方法的使用以及导致内存溢出的原因(java)
- 用Properties读取配置文件后,使用TreeMap对keys进行排序
- 应用反射+配置文件+抽象工厂时出现的错误和原因分析
- SpringMVC(11):利用数据流InputStream 读取调用 database.properties 配置文件的内容及实例
- 无废话Android之android下junit测试框架配置、保存文件到手机内存、android下文件访问的权限、保存文件到SD卡、获取SD卡大小、使用SharedPreferences进行数据存储、使用Pull解析器操作XML文件、android下操作sqlite数据库和事务(2)
- 300.33通过读取配置文件方式来使用反射完成实例对象调用方法
- java基础巩固系列(五):ArrayList与HashSet的比较,以及HashCode分析
- Java 反射将配置文件数据加载到对象属性中Reflect与Properties使用
- 编写一个文件,读取 src 下面day12包 下面的my.properties 文件,文件内容如下, className=day12.User 结合 IO、反射知识,完成 配置文件中对象的创建和方法调用。并编写方法,列举出 Student 类中所有的属性、
- 加强eclipse的使用技巧。可变参数。基本数据类型自动装箱和拆箱。枚举。反射。数组反射的应用。ArrayList和HashSet。JavaBean
- Struts2为应用指定多个配置文件和动态方法调用以及通配符的使用方法
- FCKeditor是使用非常广泛的HTML编辑器,本文从 ASP.NET 的使用场景对 FCKeditor 与 FCKeditor.NET 的配置、功能扩展(如自定义文件上传子目录、自定义文件名、上传图片的后期处理等)、以及安全性进行初步的阐述。
- 从零开始学JDBC--1.9 代码抽取--使用Properties读取配置文件
- Java基础知识_ArrayList和HashSet的比较,以及HashCode方法