java集合----------Map

来源:互联网 发布:辐射4无mod捏脸数据 编辑:程序博客网 时间:2024/05/17 06:01

Map(键值对)


Map都具有的方法put()向集合中放数据,size()集合数据的个数。


HashMap

其底层采用的数据结构也是哈希表,特点是键和值都无序,但是键必须唯一

每个HashMap都是由若干对键值对组成的,一个键对应一个值,可以把HashMap看成一个西瓜:

HashMap hm = new HashMap();

hm.put("Robin","VeryGooD");

hm.put("Tom","GooD");

hm.put("Jerry","Bad");put()中存放的数据必须是Object,但两个参数的类型不必相同

System.out.println(hm.size());打印键值的个数,不是对象的个数


把Map纵向切成两半,只要左边所有键所组成的一个新的Set集合(因为是无序唯一的)

Set ks = hm.keySet();

//通过keySet()方法获得HashMap中的所有键,组成一个新的Set集合,只包含键

for(Object obj:ks){

System.out.println(obj+"="+hm.get(obj));

//此处可以通过获取键得到对应的值,但是却无法通过获取值来得到对应的键,因为键和值是一一对应的,而键是无序唯一的,所以同一个值可能对应两个不同的键,所以无法通过获取值来获得键


}


把Map切成两半 只要右边所有的值所组成的一个新的Collection集合(此集合不符合任何一个特殊集合的特点所以只能归为Collection)

Collection vs = hm.values();

//通过values()方法获得每个键所对应的值,成为一个新集合,无序也不唯一

for(Object obj:vs)

System.out.println(obj);


把Map横向切片,得到一个由键和值组成的新类型的Set集合(由很多键值对所组成,无序、唯一)

Set entries = hm.entrySet();

for(Object obj:entries){

Map.Entry me = (Map.Entry)obj;

//获得一个有许多键值对所组成的新集合Set,而这个Set中每个键值对又是一个新的类型Map.Entry

System.out.println(me.getKey()+"="+me.getValue());


键值对中的键是不能替换的,而向HashMap存放键值相同的而数据不同的键值对时,会保留第一个进入的键,但是后来的键所对应的值会把之前的相同的键的对应的值覆盖掉,例如:

HashMap hm = new HashMap();

hm.put(new Teacher("Robin"),"GooD");

hm.put(new Teacher("Jerry"),"VeryGooD");

System.out.println(hm.size());

System.out.println(hm);

}

}

class Teacher{

String name;

public Teacher(String name){

this.name = name;

}

@Override

public int hashCode(){

return 1;

}

@Override

public boolean equals(Object obj){

return true;

}

@Override

public String toString(){

return name;

}

}

由于覆盖了toString()方法,打印结果是:Robin=VeryGood

TreeMap

用法与HashMap相似,但TreeMap是有序且唯一的。有序的特性与TreeSet相同,且同样是由Comparable和Comparator保证的,其比较机制和TreeSet相同。

原创粉丝点击