2015-10-11 21:26 58人阅读 评论(0) 收藏 举报
 分类:
学习笔记(5) 

版权声明:本文为博主原创文章,未经博主允许不得转载。

Hash集合主要有HashMap、HashTable以及HashSet,前两者的区别在于HashMap允许null值且unsynchronized,而最后一个为Set。Hash集合的特点在于其通过哈希算法在内存中存储以及检索元素。这么做的目的在于将分配给该集合的内存区域划分为若干份(bucket),然后通过hashCode方法为每一个集合元素获取一个哈希码,根据哈希码将元素存储于特定的内存区域,在检索时也可以根据检索对象的哈希码,先确定所在区域,之后遍历查找,从而提升效率。HashMap的构造方法中的参数有两个,一个为initial capacity,一个为load factor。

几个需要注意的小问题:

1)哈希集合的元素一旦添加后,一般不要更改集合元素中的参与了hashCode方法计算的字段的值,否则,哈希码值会发生变化,从而导致无法检索到原对象,会引起内存泄漏(MemoryLeak);

2)哈希集合中的contains/remove/put(或add)等方法底层都依赖于equals方法;

3)equals与hashcode的关系:两个对象a1.equals(a2)==true则必能推出a1.hashCode()==a2.hashCode(),而反之则不一定,比如String对象“BB"与"Aa"二者的哈希码都是2112,但二者明显不相等;

4)关于内存泄漏:

1、概念:用动态存储分配函数开辟的内存空间在使用完毕后未释放,一直占据内存空间直至程序结束。动态分配存储地址是堆heap内存常用的内存分配方式。

2、Java中有垃圾回收器机制(Garbage Collection)会及时回收内存空间,不必程序员手动处理,简化了编程工作,减轻了程序员的操作难度,但同时也增加了程序运行的时间,因为GC需要一直监视某个对象在程序中的状态,以决定是否回收。GC的回收策略也有多种,可以根据情况选择,比如内存使用到达某个量值后开始回收,定时回收,平缓回收等等。

 
 

关于Hash集合以及Java中的内存泄漏的更多相关文章

  1. Java中关于内存泄漏出现的原因以及如何避免内存泄漏

    转账自:http://blog.csdn.net/wtt945482445/article/details/52483944 Java 内存分配策略 Java 程序运行时的内存分配策略有三种,分别是静 ...

  2. Java中的内存泄漏

    [转]介绍Java中的内存泄漏 1. 什么是内存泄漏? 内存泄漏的定义:对象已经没有被应用程序使用,但是垃圾回收器没办法移除它们,因为还在被引用着. 要想理解这个定义,我们需要先了解一下对象在内存中的 ...

  3. Java中的内存泄漏问题

    今天来谈谈Java语言中的内存泄漏问题,可能还有人不知道什么是内存泄漏,先来说下内存泄漏的概念. 内存泄漏:比较正式的说法是,不再使用的对象,却不能被Java垃圾回收机回收.用我的话来说,就是Java ...

  4. 详细Java中的内存泄漏

    1.Java内存回收机制 不论哪种语言的内存分配方式,都需要返回所分配内存的真实地址,也就是返回一个指针到内存块的首地址.Java中对象是采用new或者反射的方法创建的,这些对象的创建都是在堆(Hea ...

  5. Java中的内存泄漏分析说明

    Java语言的一个关键的优势就是它的内存管理机制.你只管创建对象,Java的垃圾回收器帮你分配以及回收内存.然而,实际的情况并没有那么简单,因为内存泄漏在Java应用程序中还是时有发生的. 下面就解释 ...

  6. 如何识别Java中的内存泄漏

    Java开发人员都知道,Java利用垃圾回收机制来自动保持应用程序内存的干净和健康.然而可能有人不知道的是,即使使用了垃圾回收机制,Java中仍然可能存在内存泄漏风险.如果你碰到下面的错误代码: ja ...

  7. Java技术——Java中的内存泄漏

    . OOM的常见类型 按照JVM规范,JAVA虚拟机在运行时会管理以下的内存区域: 程序计数器:当前线程执行的字节码的行号指示器,线程私有. JAVA虚拟机栈:Java方法执行的内存模型,每个Java ...

  8. Java中的内存泄露 和 JVM GC(垃圾回收机制)

    一.什么是Java中的内存泄露? 在Java中,内存泄漏就是存在一些被分配的对象,这些对象有下面两个特点, 首先,这些对象是可达的,即在有向图中,存在通路可以与其相连:其次,这些对象是无用的,即程序以 ...

  9. 在 JNI 编程中避免内存泄漏

    JAVA 中的内存泄漏 JAVA 编程中的内存泄漏,从泄漏的内存位置角度可以分为两种:JVM 中 Java Heap 的内存泄漏:JVM 内存中 native memory 的内存泄漏. Java H ...

随机推荐

  1. 状态压缩 poj 3254

    n * m 个玉米 n*m个数字 0 或者1 1可以种玉米 0 不能  种玉米不能相邻 计算有几种 种的方法 #include<stdio.h> #include<algorithm ...

  2. 通过JS实现网站繁体简体互换

    html部分 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www. ...

  3. dede使用方法----如何调用最新文章,最热文章,友情链接

    dede如何调用最新文章 {dede:arclist      row='5'       titlelen='50'    orderby ='pubdate'} <li><a h ...

  4. Spark 编程基础

    1. 初始化Spark import org.apache.spark.{SparkContext, SparkConf} val conf=new SparkConf().setAppName(&q ...

  5. 【BZOJ-1976】能量魔方Cube 最小割 + 黑白染色

    1976: [BeiJing2010组队]能量魔方 Cube Time Limit: 10 Sec  Memory Limit: 64 MBSubmit: 884  Solved: 307[Submi ...

  6. ubuntu安装eclipse tomcat的参考网址

    Neither the JAVA_HOME nor the JRE_HOME environment variable is defined解决 - Linux操作系统:Ubuntu_Centos_D ...

  7. Ajax请求接口加密研究(针对网页前端的接口安全加密机制研究)

    通常我们在h5前端调用后台接口时,一般是ajax,那么接口的安全成了一个问题. 这里可以肯定的说,前端调用的接口一定要验证! 然后剖析了微信网页版.京东网页版这些,也都是通过接口的形势绑定数据,所以在 ...

  8. Android成长日记-数据存储之SQLite[1]

    [SQLite简介] SQLite是R.Richard Hipp用C语言编写的开源嵌入式数据库引擎.它支持大多数的SQL92标准,并且可以在所有主要的操作系统上运行 ---支持高达2TB大小的数据库: ...

  9. phpweb /version.php Vul

    catalog . 漏洞描述 . 漏洞触发条件 . 漏洞影响范围 . 漏洞代码分析 . 防御方法 . 攻防思考 1. 漏洞描述 Relevant Link:2. 漏洞触发条件3. 漏洞影响范围4. 漏 ...

  10. Cloud Design Patterns Book Reading(undone)

    目录 . the most common problem areas in cloud application development ) Availability ) Data Management ...