从Map接口继承而来或者实现来的,称为映射集。Map是键/值的集合,元素都成对出现,键和值都是对象,键对象用来在Map中标识一个值对象,键不能重复出现。
Map接口的常用方法:
public void clear() {}
public Object put(Object key, Object value) {}
public boolean containsKey(Object key) {}
public boolean containsValue(Object value) {}
public Object get(Object key) {}
public Set entrySet() {}
public void putAll(Map arg0) { }
public Object remove(Object arg0) {}
public int size() {}
public Collection values() {}
public boolean isEmpty() {}
public Set keySet() {
HashMap类:
该类通过键计算哈希码,来确定值的存储,该类的键值允许为Null,但只能出现一次。
HashMap不能保证存储顺序,如果对相同key的元素进行put,则会替代掉原先这个key的值。
Hashtable类:
与HashMap基本相同,但是Hashtable对元素的操作是同步的,在运行的时候可能有一些性能损失。注意这里的 t 要小写。
LinkedHashMap类:
是一个ordered类型的Map,键按照插入集合的顺序存储。基本功能和HashMap类似,遍历效率比HashMap高,插入删除效率比HashMap低。
SortedMap接口和TreeMap类
SortedMap接口继承自Map类能够按照键天然顺序排序,其中的元素必须实现键的比较器comparable。这里排序比较器都是针对键的。
package array;
import java.util.Comparator;
import java.util.TreeMap;
//自己实现一个比较器,对整数类型的key进行倒序排序
class MyCompara implements Comparator{
public int compare(Object o1, Object o2) {
// TODO Auto-generated method stub
Integer i1=(Integer)o1;
Integer i2=(Integer)o2;
return i2.intValue()-i1.intValue();
}
}
public class MapTest {
public static void main(String[] args){
TreeMap tmNoCompara=new TreeMap();
TreeMap tmCompara=new TreeMap(new MyCompara());
tmNoCompara.put(1, "hahah");
tmNoCompara.put(3, "goppd");
tmNoCompara.put(2, "yes");
System.out.println(tmNoCompara);
tmCompara.put(1,"eugd");
tmCompara.put(2,"fdsg");
tmCompara.put(3,"gshdf");
System.out.println(tmCompara);
}
}
没有比较器的是按照key=1,2,3的顺序输出的,有比较器的是按照key=3,2,1输出的。
遍历映射一般是先对键进行遍历,然后按照键对值进行遍历。
Map中有获取键或值得集合的方法:
public Set keySet(0;
public Collection values();
键的返回集合是Set集合我认为是因为 其中键是不可以重复的,Setj集合中的元素不能重复。
比如遍历一个HashMap
先创建一个Set类获取HashMap的keySet;
获取KeySet的迭代器Iterator;
遍历迭代器获取到每一个key,并强制转型为相应key的类型
用HashMap的get方法,通过Key获取Value,再把Value进行相应类型转换。完成遍历
也可以直接使用 HashMap的values获取值得集合
在使用foreach或者迭代器,对值得集合进行遍历,但是这样得不到键和值得对应关系。
下一篇写JAVA中栈的实现,集合元素的常用操作方法,泛型的使用。