java 为什么使用hashmap
一,存储方式: Java中的HashMap是以键值对(key-value)的形式存储元素的。
二,调用原理: HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素。当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上。如果key已经存在了,value会被更新成新值。
三,其他热性: HashMap的一些重要的特性是它的容量(capacity),负载因子(load factor)和扩容极限(threshold resizing)。
HashMap实现了Map接口,该接口的作用主要是为客户提供三种方式的数据显示:只查看keys列表;只查看values列表,或以key-value形式成对查看。Map接口并没有定义数据要如何存储,也没有指定如何判定key是一样,因此并不是所有的Map实现都会与hashCode方法扯上关系,如TreeMap便是要求对象实现Comparator接口,通过其compare方法来比对两者是否一致,而非hashCode及equals。同理,如果我们自己实现Map接口,我们也可以直接使用数组进行数据存储使用==判定key值是否一致,依然可以完全满足Map接口的定义。
已经给楼主写了个例子..
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
public class HashMapTest {
public static void main(String[] args){
HashMap hm=new HashMap();
People p1=new People();
People p2=new People();
People p3=new People();
People p4=new People();
hm.put("People3", p1);
hm.put("People1", p2);
hm.put("People4", p3);
hm.put("People2", p4);
Iterator it=hm.keySet().iterator();
while(it.hasNext()){
System.out.println(it.next());
}
}
}
class People {
private String name;
private int age;
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
运行了没问题..
祝楼主早日成功!
首先当我们需要存储数据的时候,动态数组虽然能够自动扩容,但是必须在初始时刻指定初始容量。而对于那些在编译时无法确定具体的数量即动态增长的数据,就需要用到Java集合类了。对于ArrayList 和 LinkedList,还有 Vector它们都有一些缺点,要么插入删除速度慢、要么就是遍历速度慢。那么有没有一种插入、删除、遍历都比较不错的集合类呢?于是 HashMap 就出现了。HashMap 是一个散列表,它存储的是一组键值对(key-value)的集合,并实现快速的查找。
(1)为了实现快速查找,HashMap 选择了数组而不是链表。以利用数组的索引实现 O(1) 复杂度的查找效率。
(2)为了利用索引查找,HashMap 引入 Hash 算法, 将 key 映射成数组下标: key -> Index。
(3)引入 Hash 算法又导致了 Hash 冲突。为了解决 Hash 冲突,HashMap 采用链地址法,在冲突位置转为使用链表存储。
(4)链表存储过多的节点又导致了在链表上节点的查找性能的恶化。为了优化查找性能,HashMap 在链表长度超过 8 之后转而将链表转变成红黑树,以将 O(n) 复杂度的查找效率提升至 O(log n)。
【综上】
HashMap 存在的意义就是实现一种快速的查找并且插入、删除性能都不错的一种 K/V(key/value)数据结构。
附上一位博主的高见:网页链接
为什么要使用Hashmap 这个问题,问的好。
HashMap和String一样是java的基本类,它们都在jdk的rt.jar中,是作为jvm运行时加载的基础类。
它们说到底也就是java的一个类,java是面向对象编程的,那它们的作用就是用来产生对象。 而对象的存在就是方便我们去存取,从用户的角度去看,它没有任何的意义,但是作为开发者它是一个用来存取键值对的工具,这样在开发时可以大大的提高开发者的效率。因为开发者不需要去想怎么将键值对应起来,HashMap正是提供了存储键值对的容器。
可能你会问为什么要存储键值对,打个比方,你想用身份证号码知道你的具体身份信息(年龄,地址等等),如果用键值对去存取就非常方便,结构也很清晰。而如果采用最基础类型的char字符去存取,那就很麻烦。
java中有8种基础数据类型,其他类型都是它们的包装类。也就是说看似存储键值对很方便的HashMap,它的底层实现还是这些最基础的数据类型的操作。
不是java使用HashMap,而是几乎所有高级编程语言都有这个实现。Map是key,value对存储的集合,Hash是这个key、value对的存储数据结构的具体形式,Hash具有最佳的查找、插入的时空效率,所以使用很广。
http://blog.csdn.net/rickiyeat/article/details/52708794
尘冰彼赛: 首先当我们需要存储数据的时候,动态数组虽然能够自动扩容,但是必须在初始时刻指定初始容量.而对于那些在编译时无法确定具体的数量即动态增长的数据,就需要用到Java集合类了.对于ArrayList 和 LinkedList,还有 Vector它们都有一些...
石阡县18710313302: Java中的HashMap的工作原理是什么? - ?
尘冰彼赛: 一,存储方式: Java中的HashMap是以键值对(key-value)的形式存储元素的.二,调用原理: HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素.当调用put()方法的时候,HashMap会...
石阡县18710313302: Java中HashMap和TreeMap的区别深入理解 - ?
尘冰彼赛: HashMap:数组方式存储key/value,线程非安全,允许null作为key和value,key不可以重复,value允许重复,不保证元素迭代顺序是按照插入时的顺序,key的hash值是先计算key的hashcode值,然后再进行计算,每次容量扩容会重新计算所以key...
石阡县18710313302: Java中的HashMap的工作原理是什么? - ?
尘冰彼赛: Java中的HashMap是以键值对(key-value)的形式存储元素的.HashMap需要一个hash函数,它使用hashCode()和equals()方法来向集合/从集合添加和检索元素.当调用put()方法的时候,...
石阡县18710313302: Java中HashMap和Hashtable分别是干什么用的?就是说他们有什么用途?什么时候用? - ?
尘冰彼赛: 1 HashMap不是线程安全的hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,并且不能包含重复键,但可以包含重复值.HashMap允许null key和null value,而hashtable不允许. 2 HashTable是线程安全...
石阡县18710313302: java Hashtable怎么好像用的地方不多,我开发这么久一直用的hasmMap呢 - ?
尘冰彼赛: 1. hashMap去掉了HashTable 的contains方法,但是加上了containsValue()和containsKey()方法.2. hashTable同步的,而hashMap是非同步的,效率上逼hashTable要高.3. hashMap允许空键值,而hashTable不允许.4. hashTable是基于...
石阡县18710313302: 请问Java中的HashMap的工作原理是什么? - ?
尘冰彼赛: HashMap要一个hash函数,当调用put()方法的时候,HashMap会计算key的hash值,然后把键值对存储在集合中合适的索引上.如果key已经存在了,value会被更新成新值.秒秒学有的,上面Java课程讲解得可以.
石阡县18710313302: java类的哈希码干嘛用的?与引用值有什么区别? - ?
尘冰彼赛: HashMap、HashSet等容器的底层数据结构就是哈希表,它们用hashCode()方法作为对象的哈希值.
石阡县18710313302: 为什么面试要问hashmap 的原理 - ?
尘冰彼赛: 我用笔记本给最佳答案排了一下版,给大家贴出来.虽说排版确实很乱,但是答案不得不给一个大赞.HashMap的工作原理 HashMap,都知道哪里要用HashMap,知道Hashtable和HashMap之间的区别,那么为何这道面试题如此特殊呢?是因...
石阡县18710313302: JAVA中的HashMap底层白话文解释? - ?
尘冰彼赛: 如果只是初学者,只需要了解hashMap是一种工具类,以键值对存放数据,非线程安全,用散列桶实现,查询遍历快.如果你想深入的学就还是自己读代码,网上大神的讲解很多啊;看完之后再看懂然后再去思考,然后这才能是你的东西....