在Java里对对象的操作是基于引用的。而当我们需要对一组对象操作的时候,就需要有接收这一组引用的容器。平时我们最常用的就是数组。在Java里可以定义一个对象数组来完成许多操作。可是,数组长度是固定的,如果我们需要更加灵活的解决方案该怎么办呢?
本文重点介绍HashMap。首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。在下文中会有例子具体说明。
再来看看HashMap和TreeMap有什么区别。HashMap通过hashcode对其内容进行快速查找,而TreeMap中所有的元素都保持着某种固定的顺序,如果你需要得到一个有序的结果你就应该使用TreeMap(HashMap中元素的排列顺序是不固定的)。
下面就要进入本文的主题了。先举个例子说明一下怎样使用HashMap:
java 代码
- import java.util.*;
- public class Exp1 {
- public static void main(String[] args){
- HashMap h1=new HashMap();
- Random r1=new Random();
- for(int i=0;i<1000;i++){
- Integer t=new Integer(r1.nextInt(20));//生成1000个0到20的数字
- if(h1.containsKey(t))//比较h1里面是否有t,其实h1里面是个空对象,更本不会有的,这里是为了演示containsKey()这个方法
- ((Ctime)h1.get(t)).count++;//要是有的话,取得它,并把指针移到下一个的地址
- else
- h1.put(t, new Ctime());//插入值
- }
- System.out.println(h1);
- }
- }
- class Ctime{//Ctime是自带的,表示一个生成的秒数。
- int count=1;
- public String toString(){
- return Integer.toString(count);
- }
- }
在HashMap中通过get()来获取value,通过put()来插入value,ContainsKey()则用来检验对象是否已经存在。可以看出,和ArrayList的操作相比,HashMap除了通过key索引其内容之外,别的方面差异并不大。