- 浏览: 74553 次
- 性别:
- 来自: 大连
最新评论
-
Heart.X.Raid:
//非递归后序遍历二叉树
void aftorder_t ...
树的遍历 -
zhangjunji111:
airlink 写道建议你再加个0来循环。
我的测试结果是10 ...
Spring的获取Bean的性能测试。 -
airlink:
建议你再加个0来循环。我的测试结果是10倍以上的差距。spri ...
Spring的获取Bean的性能测试。 -
rmn190:
结果中哪一个是C++的,哪一个Java的呢? 楼主最好用一个t ...
简单的c++排序跟java的性能比较。仅仅学习。 -
moshalanye:
每个对象都有一个隐含锁静态对象属于Class对象,非晶态对象属 ...
Java里面的同步跟oracle的锁的联想
Map 是一种数据结构,用来实现key和value 的映射。通过Key可以找到Value。实现类包括
HashMap,LinkedHashMap,TreeMap
/**
* Applies a supplemental hash function to a given hashCode, which
* defends against poor quality hash functions. This is critical
* because HashMap uses power-of-two length hash tables, that
* otherwise encounter collisions for hashCodes that do not differ
* in lower bits. Note: Null keys always map to hash 0, thus index 0.
*/
static int hash(int h) {
// This function ensures that hashCodes that differ only by
// constant multiples at each bit position have a bounded
// number of collisions (approximately 8 at default load factor).
h ^= (h >>> 20) ^ (h >>> 12);
return h ^ (h >>> 7) ^ (h >>> 4);
}
/**
* Returns index for hash code h.
*/
static int indexFor(int h, int length) {
return h & (length-1);
}
/**
* Associates the specified value with the specified key in this map.
* If the map previously contained a mapping for the key, the old
* value is replaced.
*
* @param key key with which the specified value is to be associated
* @param value value to be associated with the specified key
* @return the previous value associated with <tt>key</tt>, or
* <tt>null</tt> if there was no mapping for <tt>key</tt>.
* (A <tt>null</tt> return can also indicate that the map
* previously associated <tt>null</tt> with <tt>key</tt>.)
*/
public V put(K key, V value) {
if (key == null)
return putForNullKey(value);
int hash = hash(key.hashCode());
int i = indexFor(hash, table.length);
for (Entry<K,V> e = table[i]; e != null; e = e.next) {
Object k;
if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {
V oldValue = e.value;
e.value = value;
e.recordAccess(this);
return oldValue;
}
}
modCount++;
addEntry(hash, key, value, i);
return null;
}
HashMap 是以数组的结构,用哈希函数值跟数组的长度做位与运算,获取对应数组的索引。浏览key值时,不保证顺序。
LinkedHashMap 是以双向列表的结构做实现的,浏览key值时候,可以保证顺序。LinkedHashMap继承HashMap ,不同的是数据存储结构。
TreeMap 是以二叉树实现的Map接口。Map中的key值按照从小到大的顺序排列。key要实现comparable
TreeMap 是用二叉树结构存储的,根据key找value的时间复杂度是o(以2为底,n的对数)
查找和插入的性能都没有hashmap好,但是可以实现key的有序存放。所以增加了hashMap的类。
二叉树的中序遍历就是从小到大的顺序排列。
评论
<div class="quote_div">
<p>Map 是一种数据结构,用来实现key和value 的映射。通过Key可以找到Value。实现类包括</p>
<p>HashMap,LinkedHashMap,TreeMap </p>
<p> </p>
<p> </p>
<p> /**<br> * Applies a supplemental hash function to a given hashCode, which<br> * defends against poor quality hash functions. This is critical<br> * because HashMap uses power-of-two length hash tables, that<br> * otherwise encounter collisions for hashCodes that do not differ<br> * in lower bits. Note: Null keys always map to hash 0, thus index 0.<br> */<br> static int hash(int h) {<br> // This function ensures that hashCodes that differ only by<br> // constant multiples at each bit position have a bounded<br> // number of collisions (approximately 8 at default load factor).<br> h ^= (h >>> 20) ^ (h >>> 12);<br> return h ^ (h >>> 7) ^ (h >>> 4);<br> }</p>
<p> </p>
<p> </p>
<p> /**<br> * Returns index for hash code h.<br> */<br> static int indexFor(int h, int length) {<br> return h & (length-1);<br> }</p>
<p> </p>
<p> /**<br> * Associates the specified value with the specified key in this map.<br> * If the map previously contained a mapping for the key, the old<br> * value is replaced.<br> *<br> * @param key key with which the specified value is to be associated<br> * @param value value to be associated with the specified key<br> * @return the previous value associated with <tt>key</tt>, or<br> * <tt>null</tt> if there was no mapping for <tt>key</tt>.<br> * (A <tt>null</tt> return can also indicate that the map<br> * previously associated <tt>null</tt> with <tt>key</tt>.)<br> */<br> public V put(K key, V value) {<br> if (key == null)<br> return putForNullKey(value);<br> int hash = hash(key.hashCode());<br> int i = indexFor(hash, table.length);<br> for (Entry<K,V> e = table[i]; e != null; e = e.next) {<br> Object k;<br> if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {<br> V oldValue = e.value;<br> e.value = value;<br> e.recordAccess(this);<br> return oldValue;<br> }<br> }</p>
<p> modCount++;<br> addEntry(hash, key, value, i);<br> return null;<br> }</p>
<p> </p>
<p> </p>
<p>HashMap 是以数组的结构,用哈希函数值跟数组的长度做位与运算,获取对应数组的索引。浏览key值时,不保证顺序。<br>LinkedHashMap 是以双向列表的结构做实现的,浏览key值时候,可以保证顺序。LinkedHashMap继承HashMap ,不同的是数据存储结构。</p>
<p>TreeMap 是以二叉树实现的Map接口。Map中的key值按照从小到大的顺序排列。key要实现comparable</p>
<p> </p>
</div>
<p> </p>
<p>原来看数据结构的时候,我觉得没啥大用,后来看Java的时候,发现数据结构的重要性了。</p>
我会继续努力的。。。。
发表评论
-
Java里面的同步跟oracle的锁的联想
2009-07-16 08:21 1170暂时不讨论。不明白 -
想做一个JMSServer,实现10000/s可以吗?
2009-07-02 17:51 1035本贴已经删除,有很多东西需要学习。谢谢大大家给予的建议和批评啊 ... -
Spring的事务管理例子代码
2009-06-27 10:29 3442事务管理: 分global事务管理和local事务管理, ... -
Java String中的hashCode函数
2009-06-27 09:43 4262String 类中的hash函数如下: public ... -
使用Spring后会带来什么好处
2009-06-23 16:20 9311 为你的项目增加一个管家,你不必写很多的代码去实现一些框架已 ... -
jboss EJB
2009-06-15 14:39 817暂时不讨论。不明白 -
简单的归并排序算法例子
2009-06-14 21:36 1062import java.util.ArrayList;impo ... -
Jboss消息中间件跟IBM MQ的比较
2009-06-12 21:28 1602简单说几点. 1 jboss消息以java编写,嵌入到jbo ... -
Jboss message point to point
2009-06-12 21:17 884下面的例子程序是从Jbos ... -
Jboss SubscriberClient 主动式接受消息
2009-06-11 21:35 691下载jboss后面,按照默认启动就可以。 packag ... -
http报文
2009-06-11 21:09 2550HTTP报文是面向文本的,报文中的每一个字段都是一些ASCII ... -
面向对象的三个特征
2009-06-11 20:52 778面向对象的三个基本特征是:封装、继承、多态。 Th ... -
java的同样排序函数的执行效率
2009-06-11 20:50 1303package com.liuxt.sort; import ... -
apache ab 性能测试
2009-06-10 20:22 1489测试结果的说明:参考文章:http://www.phpchin ... -
java虚拟机规范 3.5 运行期数据区
2009-06-10 14:35 923http://java.sun.com/docs/books/ ... -
java SQL注入分析程序
2009-06-09 22:11 1964DROP TABLE IF EXISTS `user`;CRE ... -
java virtural machine data type
2009-06-08 16:35 673data ... -
parse xml file with dom and sax .
2009-06-07 13:47 908基于dom方式的dom4j和jdom以及JDK提供的dom方式 ... -
memcached 的linux配置
2009-06-03 22:45 681详细参选下面的连接: http://www.ccvita.co ... -
memcached 的java 客户端的简单测试代码
2009-06-03 22:42 1548import java.io.IOException; imp ...
相关推荐
Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于List,List是以索引来访问元素,而Map...在实际开发中,根据应用程序特定的需求,选择合适的Map实现能更好地优化数据结构和性能。
Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构,其中每个键都是唯一的,并且与一个值相关联。Map集合不同于List,因为它不维护元素的顺序,而是通过键来访问其对应的值。本文将详细介绍...
Map 集合是 Java 中一种非常常用的数据结构,了解 Map 集合的用法、Map 接口和方法、Map 的实现类、Map 的遍历和优化等方面的知识点,可以帮助开发者更好地使用 Map 集合,提高应用程序的性能和效率。
Map是Java集合框架中的一个重要组成部分,它提供了一种存储键值对(key-value pair)数据结构的方式。与List和Set不同,Map并没有直接继承自`Collection`接口,而是独立于`Collection`体系之外。Map的主要特点是它通过...
在Java编程中,HashMap是一个非常重要的数据结构,它实现了Map接口,提供了键值对的存储功能,具有快速存取和高效查找的特点。HashMap基于哈希表(也称为散列表)原理,通过键对象的哈希码来定位元素,进而实现O(1)...
Java中的Map接口是Java集合框架的重要组成部分,它用于存储键值对的数据结构。Map不同于数组和List,因为它不依赖于连续的索引访问元素,而是通过键(Key)来查找对应的值(Value)。Map接口提供了多种实现,如...
此外,`equals(Object o)`和`hashCode()`方法用于比较Map对象的等价性和计算哈希值,这对于实现Map的比较和存放在哈希表中至关重要。 Map接口还有个内部类`Map.Entry`,它代表Map中的一个键值对。通过`Map.entrySet...
Java 容器的两种基本类型:Collection 和 Map Collection 和 Map 是 Java 中的两种基本容器类型,它们都可以用来存储和...理解它们的特点和实现原理是非常重要的,可以帮助我们更好地使用它们来提高程序的性能和效率。
了解这些知识点有助于理解和使用Java中的Map,特别是在处理大量数据时选择适合的Map实现类,以及在遍历和操作Map时选择高效的方式。在多线程环境中,如果需要线程安全,可以考虑使用ConcurrentHashMap。在需要有序...
总结起来,Java集合框架提供了多种数据结构和算法,通过接口和实现类的组合,可以根据实际需求选择合适的数据结构,同时通过Collections工具类进行便捷操作。正确实现equals()和hashCode()方法对于集合操作的正确性...
在Java编程语言中,Map接口是集合框架的一部分,它提供了键值对的存储方式。Map不是列表或数组,而是关联键(key)与值(value)的容器,每个...通过实践这些示例,你可以更熟练地在Java项目中运用Map接口及其实现类。
HashMap是Java中的一个接口java.util.Map的实现类,它允许使用null键和null值。HashMap通过使用哈希函数将键映射到数组的特定位置,以实现快速查找、插入和删除操作。其时间复杂度通常为O(1),但在最坏的情况下,当...
在Java编程语言中,`hashCode()` 和 `equals()` 方法是两个非常重要的概念,尤其是在处理集合类如 `List`, `Set`, `Map` 时。它们主要用于优化存储和查找效率,尤其是当涉及到哈希表(如 `HashMap` 和 `HashSet`)时...
7. **异常处理**:Exception类及其子类构成异常层次结构,用于处理程序运行中的错误和异常情况。try-catch-finally语句块是处理异常的标准模式。 8. **日期时间**:Java 8引入了新的日期和时间API(java.time包),...
Java 集合是 Java 编程语言中最重要和最常用的数据结构之一。它提供了多种方式来存储和操作数据,从而提高了程序的效率和可读性。本文将对 Java 集合的基本概念、实现原理和常用方法进行详细的解释。 集合框架概述 ...
Java集合框架是Java编程语言中一个非常重要的组成部分,它提供了一组高级的数据结构,...总之,这个实验深入地实践了Java集合框架的使用,加深了对集合概念、接口和实现类的理解,为后续的Java开发打下了坚实的基础。