理解Map
- 映射表(的基本思想),是维护他的建和值的关联。,你可以使用键来维护它的查找值。想理解Map,可以观察关联数组是如何创建的
public class AssociativeArray<K,V>{
private Object[][] pairs;
private int index;
private AssociativeArray(int length){
pairs=new Object[length][12];
}
public void put(K key,V value){
if(index>=pairs.length)
throw new ArrayIndexOutOfBoundsException();
pairs[index++]=new Object[]{key,value};
}
public V get(K key){
for(int i=0;i<index;i++){
if(key.equals(pairs[i][0])){
return (V)pairs[i][1];
}
}
//找不到
return null;
}
public String toString(){
StringBuffer stringBuffer=new StringBuffer();
for(int i=0;i<index;i++){
stringBuffer.append(pairs[i][0].toString());
stringBuffer.append(":");
stringBuffer.append(pairs[i][1].toString());
if(i<index-1){
stringBuffer.append("\n");
}
}
return stringBuffer.toString();
};
public static void main(String args[]){
AssociativeArray<String,String> map=new AssociativeArray<String, String>(6);
map.put("sky","blue");
map.put("grass","green");
map.put("ocean","dancing");
map.put("earth","brown");
System.out.println(map.get("sky"));
System.out.println();
System.out.println(map.get("grass"));
}
}
关联数组中的基本方法就是put和get, main()加载了一个AssociativeArray,并打印了所产生的映射表。
为了使用get()方法,你需要传递一个key,然后它会与相关的值结果返回。或者在找不到值的时候返回null。
get()方法可能是想象到的最低效率的查找方式,因为它需要从头开始查找。是用equals依次比较。 ,但是在实际的Map中没有这些问题。因为使用hash表查找的。
Map的性能
- 性能是映射表的重要问题。 就像上边的代码。在使用get搜索的时候,执行速度会非常的慢。而这正是HashMap提高速度的方法。HashMap是用的特殊值。称作散列码 ,来取代对键的缓慢搜索。
- 散列码 是相对唯一的 用代表的对象的int值,它是通过将该对象的某些信息而生成的。HashCode是父类Object中的方法,因此所有Java对象都能产生散列码。 HashMap就是使用对象HashCode进行快速查询的,因此可以提高查询的性能。如果觉得java的Map性能还是不够快,可以自己写一个更快速的查询。
- 下面一章对于如何用HashCode查询的理解。!!!!!!