- 浏览: 238792 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
mhsjlove:
正则表达式的捕获组比这好用多了
高效率分离字符串到一个Map中 -
yk0025:
正在研究中。。。
Antx学习总结 -
asialee:
博主这块写的挺好的,我完全看了,不过我也写了一些关于编解码器的 ...
Netty源代码框架剖析( 二 ) -
he_wen:
不能够停止tomcat的话 kill -9 进程号 得到进程 ...
检查tomcat是否宕机 -
zhangyou1010:
catalina.sh stop 如果这个不能停止tomc ...
检查tomcat是否宕机
一、List接口
ArrayList,对象加入之后大都是为了取出,而不会长做删除或插入的动作,则使用ArrayList效率会更加好,但是经常在容器里面做删除添加动作,则使用LinkList会更加好(该类是利用链表实现的),故增加了象addFirst()、addLast()、getFirst()、getLast()、removeFirst()、removeFast()等,这样适合实现堆栈和队列。
二、Set接口
List容器中允许重复的对象,但是Set容器中的对象都是唯一的,介入Set 容器必须重新定义equals(),hasCode()方法,Set容器有自己一套排序规则,其规则是根据哈希法,所以加入HashSet容器的对象还必须重新定义hasCode()方法.
Set<String> set=new HashSet<String>();
Iterator iterator=set.iterator();
while(iterator.hasNext()){ iterator.next() };
也可以利用加强型进行访问元素:for(String name : set){ System.out.println(name); }
如果想要以加入的顺序显示,则可以用LinkedHashSet,此类是HashSet的子类,它在内部类实现时使用哈希玛进行排序但是在迭代的行为上像LinkList那样.
TreeSet实现了Set接口和SortSet接口,SortSet提供的相关方法让您有序的去处对应位置的对象,像first()、last()等方法,TreeSet是J2SE中唯一实现了SortSet接口的类,它使用了红黑树结构来加入对象将进行排序。如果对对象有自己的一套排序,要定义一个实现java.util,Comparator接口的对象,要实现compare()方法.
三、Map接口
Map接口的对象会将键(Key)映射至值(Value),值指的是要存入Map容器的对象,其对象不能有重复的键,Map拥有
自己的排序机制。
HashMap实现Map接口,在内部实现使用了哈希法,如果在迭代的时候想要以添加的顺序
来排序,则可以用HashMap子类LinkedHashMap。
其访问对象的代码:
Map<String,String> map=new HashMap<String,String>();
for(String value :map.values){
System.out.println(value);
}
TreeMap实现Map接口和SortMap接口,SortMap提供相关的方法让你有序地取出对应位置的对象,像firstKey(),lastKey()等方法,TreeMap是唯一实现SortedMap接口的类,它使用了红黑树结构来对加入的对象进行排序。
四、hashCode的作用
非常重要
小心内存泄露问题
用容器的时候为什么要覆盖equals()和hasCode()方法?上面是解释的原因
什么时候需要覆盖hashCode方法?
下面用例子进行证明:
package cn.itcast.day1; import java.util.Date; public class ReflectPoint { private Date birthday = new Date(); private int x; public int y; public String str1 = "ball"; public String str2 = "basketball"; public String str3 = "itcast"; public ReflectPoint(int x, int y) { super(); this.x = x; this.y = y; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + x; result = prime * result + y; return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final ReflectPoint other = (ReflectPoint) obj; if (x != other.x) return false; if (y != other.y) return false; return true; } @Override public String toString(){ return str1 + ":" + str2 + ":" + str3; } public int getX() { return x; } public void setX(int x) { this.x = x; } public int getY() { return y; } public void setY(int y) { this.y = y; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } }
package cn.itcast.day1; import java.io.FileInputStream; import java.io.InputStream; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.HashSet; import java.util.Map; import java.util.Properties; public class ReflectTest2 { /** * @param args */ public static void main(String[] args) throws Exception{ // TODO Auto-generated method stub /*getRealPath();//金山词霸/内部 一定要记住用完整的路径,但完整的路径不是硬编码,而是运算出来的。*/ //InputStream ips = new FileInputStream("config.properties"); //InputStream ips = ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itcast/day1/config.properties"); //InputStream ips = ReflectTest2.class.getResourceAsStream("resources/config.properties"); /* InputStream ips = ReflectTest2.class.getResourceAsStream("/cn/itcast/day1/resources/config.properties"); Properties props = new Properties(); props.load(ips); ips.close(); String className = props.getProperty("className"); Collection collections = (Collection)Class.forName(className).newInstance(); */ Collection collections = new HashSet(); ReflectPoint pt1 = new ReflectPoint(3,3); ReflectPoint pt2 = new ReflectPoint(5,5); ReflectPoint pt3 = new ReflectPoint(3,3); collections.add(pt1); collections.add(pt2); collections.add(pt3); collections.add(pt1); //pt1.y = 7; //collections.remove(pt1); System.out.println(collections.size()); } }
也就是说如果突然修改对象hashCode的值pt1.y=7,此容器想要移出这个对象,这个是办不到的,因此导致了内存的泄露
六、如何利用反射读取配置文件?用类加载器的方式管理资源和配置文件
InputStream ips = ReflectTest2.class.getClassLoader().getResourceAsStream("cn/itcast/day1/config.properties");
InputStream ips = ReflectTest2.class.getResourceAsStream("resources/config.properties")这个是第二种方式寻找配置文件.此文件假设存放在cn/itcast/day1/resources/config.properties
cn/itcast/day1/config.properties这个是所在的包中的文件路径,ReflectTest2类是在本类中找到装载器并加载所在的文件,这里注意类加载器再在class文件是从自己建的项目的路径开始加载,所以在寻找配置文件的时候一定要注意要加上所放配置文件的相对路径。所以在找文件的时候是在calsspath路径下找此文件。
Properties props = new Properties();
props.load(ips);
ips.close();
String className = props.getProperty("className");
Collection collections = (Collection)Class.forName(className).newInstance();
这样就能够根据className字符串动态的构建对象.
读取的文件格式为:className=java.util.ArrayList
具体源码请您参见张孝祥的源代码高级编程
还有疑问就是配置文件放在哪个路径下?
发表评论
-
编程中注意事项
2012-10-18 15:23 1175最近的机器内存又爆满了,除了新增机器内存外,还应该好好re ... -
java线程池的设计思想
2012-07-03 20:25 1757ExecutorService executorForFM = ... -
java 代码规范
2012-02-16 16:25 1419java 代码规范 一、方法的规范 ... -
代码质量保证
2011-10-27 18:31 1537本文分为四节如:如何提高代码的可读性、一般异常的处理机制、JV ... -
高效率分离字符串到一个Map中
2010-12-08 21:10 2138package test.hewen; import j ... -
Java集合 之 如何动态控制HashMap
2010-12-08 20:29 3519本文章主要是控制HashMap权限如:设置一把锁(这里实现是通 ... -
Java集合 之 动态数组
2010-12-08 19:44 1475注意:首先本程序是根 ... -
servlet源码和生命周期
2010-11-01 22:47 3151这里是servlet的类图之间的设计关系,里面接口、抽象类我只 ... -
泛型的内部原理与应用
2010-09-20 00:08 1509一、下面是说明泛型的基本原理与代码的应用 /** * ... -
注解与反射
2010-09-19 12:29 1770一、java 1.5的新特新注解和枚举 二、本文主要讲解注解 ... -
JavaBean内省的用法
2010-09-19 11:30 2015Introspector (Java Platform SE ... -
反射之类加载器详解和委托加载
2010-09-18 23:09 1870父类加载器。 下面用例子进行说明如: public ... -
Java流总结
2010-09-14 17:06 1570一、IO流的三种分类方式 1.按流的方向分为:输 ... -
java比较陌生的语法
2010-09-10 11:35 1073一、 Java并没有虚构函数,但是有finalize ... -
JAVA API String小细节之享元模式
2010-09-10 10:01 1478GOF:运用共享技术有效地支持大量细粒度的对象。 解释一下 ... -
Java对日期操作处理类
2010-09-08 21:08 4767项目中经常用到对日期 ...
相关推荐
Java容器详细解析 Java容器是一种基本的数据结构,用于存储和管理对象。Java容器主要分为两大类:Collection和Map。 Collection Collection是一个独立元素的序列,这些元素都服从一条或多条规则。Collection接口...
在IT领域,Java容器是一个非常重要的概念,尤其对于软件开发者来说,它们是理解和构建高效、可扩展的应用程序的关键。本文将深入探讨Java容器,并结合标签“源码”和“工具”,从源码层面和实用工具角度来分析这些...
### Java容器学习心得详解 在Java编程中,容器(Containers)是存储和操作对象集合的重要工具,主要包括集合(Collections)和映射(Maps)。本文将深入解析Java容器的关键概念、特性以及不同容器类型的应用场景。 ...
这篇博客"JAVA容器对象整理"可能涵盖了关于Java中的不同容器类、接口以及它们的使用方式。在这里,我们将深入探讨一些核心的Java容器知识点。 1. **ArrayList与LinkedList** - `ArrayList`是一个基于数组实现的...
Java 容器详解 Java 容器是 Java 语言中的一种集合类库,主要包括 Collection 和 Map 两种类型。Collection 存储着对象的集合,而 Map 存储着键值对(两个对象)的映射表。 Collection Collection 是一种集合接口...
Java容器类是Java编程语言中不可或缺的一部分,它们主要用于存储和管理对象。这些类和接口位于`java.util`包中,为开发者提供了灵活的数据结构和数据操作方式。在Java中,容器类主要分为两大类:Collection和Map。 ...
在Java编程中,容器是用于...总之,理解并掌握这些Java容器的特性和效率差异,能够帮助我们在实际开发中做出更合适的选择,提高程序的性能和可维护性。在具体应用时,还需要结合业务需求和性能测试,才能做出最佳决策。
Java容器讲解PPT,Collection Map(HashMap TreeMap LinkedHashMap) List (ArrayList LinkedList Vector) Set (HashSet TreeSet LinkedHashSet)
Java容器是Java编程中至关重要的一个部分,它们用于存储、管理和操作对象集合。在这个主题下,我们将深入探讨Java中的核心容器类,包括数组、List、Set和Map,以及它们各自的特点和使用场景。 1. **数组**:数组是...
题目摘要:考虑下列的信息系统。出版社需要记录下列书籍和作者的信息: P1: 每一本书有一个title,一个description和一个ISBN number 还有 出版的日期(包括年/月) P2: 每一本书有1个或多个作者。...
### Java容器起源与JSP容器背景解析 #### 容器技术概述 容器技术在现代IT领域扮演着极其重要的角色,特别是在云计算和微服务架构中。本文将深入探讨容器技术的起源,尤其是针对Java环境中JSP容器的发展历程及其...
对于java容器的一些归纳整理,顺着思维导图能方便自己的理解,提高运用能力
JAVA 容器用法详解,关于JAVA容器的详细讲解
Java容器是Java编程中不可或缺的一部分,它们主要用于存储和管理对象,提供了一种高效且灵活的方式来组织和操作数据。本文将简要介绍Java容器的主要概念、API以及常用的容器类。 首先,Java容器分为两大主要类别:...
Java容器类是Java集合框架的重要组成部分,它们提供了一种存储、管理和操作对象的方式。在Java中,容器类包括数组、列表、队列、集、映射等数据结构,它们为开发者提供了灵活的数据处理能力。本篇文章将深入探讨Java...
Java容器是Java编程中一个非常重要的概念,它主要用于管理和组织对象。在Java中,容器可以是集合、框架或服务提供者等,它们为其他对象提供存储、管理以及生命周期控制等功能。容器广泛应用于企业级开发,尤其是在...
后缀为.mmap的思维导图,总结了JAVA容器的常见类
Java容器是Java编程中至关重要的部分,它们是用于存储、管理和操作对象的工具。Java集合框架,包括List、Set、Map、ArrayList、LinkedList等,构成了Java容器的主要元素。以下是对这些概念的详细解释: 1. **集合...
Java容器学习笔记: 容器概览, 容器中的设计模式, 容器源码分析 - List, 容器源码分析 - Map, 容器源码分析 - 并发容 Java是一种面向对象的编程语言,由Sun Microsystems于1995年推出。它是一种跨平台的语言,...