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. tomcat提示警告: An attempt was made to authenticate the locked user"tomcat"

    启动tomcat7之后,运行正常,但是运行一段时间就会提示以下警告: 十二月 04, 2013 5:10:15 下午 org.apache.catalina.realm.LockOutRealm au ...

  2. C#-WinForm-无边框窗体的移动和阴影-API

    //窗体移动API,先导入命名空间,在委托MouseDown事件 //移动前准备 [DllImport("user32.dll")] public static extern bo ...

  3. dede使用方法----调用导航

    在这里,极力推荐学习dede的朋友们观看老李的零基础织梦仿站系列课程的视频,讲的超级棒的~~ 网址链接是:http://www.dede888.com/15daylessons.html. 好了,言归 ...

  4. Python的禅,“提姆彼得斯”说的非常有道理道出了这门编程语言的真谛!

    The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...

  5. 2.python算法之回形矩阵

    代码: #!/usr/bin/env python # encoding: utf-8 """ @author: 侠之大者kamil @file: 2.回形矩阵.py @ ...

  6. matlab之meshgrid()函数

    以最常见的一个用法为例: [X,Y]=meshgrid(xgv, ygv) xgv是一个(一维的,行)向量,ygv也是. 产生的X和Y,规格相同,都是二维向量,高度为size(ygv,2),宽度为si ...

  7. 【BZOJ-4455】小星星 容斥 + 树形DP

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 204  Solved: 137[Submit][Status] ...

  8. NOI2016模拟赛Zbox loves stack

    #include <iostream> #include <cstdio> #include <cstring> #include <cmath> #i ...

  9. PowerShell控制台快捷键

    按键 功能 ← 光标向左移动一个字符 Ctrl + ← 光标向左移动一个单词 → 光标向右移动一个字符 Ctrl + → 光标向右移动一个单词 Home键 光标移动到行首 End键 光标移动到行尾 D ...

  10. Windows XP/Windows 7/Windows 8/Windows 10系统封装的另类教程和思路

    如果是早些年,XP时代的Ghost封装,各种的封装工具和驱动只能安装工具满天飞,比如龙帝国,还有很早用C++写的忘了什么名字了,自由天空的,非常的多: 当时为什么要用Ghost和用这些驱动安装工具以及 ...