本文的核心内容:Java中的Map。
一:Map接口
Map接口的元素都是一个键-值对象。
key 无顺序,不可重复。 value 可以重复。
常用方法:
get(Object key); 键->值
put(Object key,Object value);添加键值对。键唯一,值可以覆盖。
remove(Object key);
size();
containsKey() ;/containsValues();
二:遍历方法
①:keySet()->key的Set集合 ,然后遍历Set集合。
键遍历指的是遍历所有的键。键遍历的实现非常简单:通过调用 Map 接口中的 keySet方法,就能获得所有键的集合。然后,就可以像遍历普通 Set 一样遍历所有键对象的集合。
key-> value
public static void main(String[] args) {
Map map = new HashMap();
map.put(1, "Tom");
map.put(2, "Jack");
map.put(3, "Jane");
map.put(4, "Peter");
Set keySet=map.keySet();
for(Object o:keySet)
{
int number=(int)o;
Object value=map.get(number);
System.out.println(number+":"+value);
}
}
②:map.values()方法 //值遍历
获取所有值的Collection集合
Collection values=map.values();
for(Object o:values)
{
System.out.println(o);
}
③: map.entrySet();获取所有键值对Set集合
在 Map 接口中,有一个方法叫做 entrySet。这个方法返回一个 Set 集合,这个集合中装的元素的类型是 Map.Entry 类型。
Map.Entry 是 Map 接口的一个内部接口。这个接口封装了 Map 中的一个键值对。在这个接口中,主要定义了这样几个方法:
l getKey() : 获得该键值对中的键
l getValue(): 获得该键值对中的值
l setValue():修改键值对中的值
因此,利用 Map.Entry 也可以进行遍历。
Set entrySet=map.entrySet();
Iterator it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry entry=(Map.Entry)(it.next());
Object key=entry.getKey();
Object value=entry.getValue();
System.out.println(key+":"+value);
}
三:实现类
Map 接口主要的实现类就是 HashMap 和 LinkedHashMap,此外还有一个使用较少的Hashtable。
①:HashMap 的特点是:在判断键是否重复的时候,采用的算法是 Hash 算法,因此要求作为 HashMap 的键的对象,也应该正确覆盖 equals 方法和 hashCode 方法。
②:LinkedHashMap 和 HashMap 之间的区别有点类似LinkedHashSet 和 HashSet 之间的区别:LinkedHashMap 能够保留键值对放入 Map 中的顺序。
③:Hashtable 也是 Map 接口的一个实现类。HashMap 和 Hashtable 之间的区别罗列如下:
HashMap | 轻量级,速度快,线程不安全 | 允许 null 作为键/值 |
Hashtable | 重量级,速度慢,线程安全 | null 作为键/值时会抛出异常 |
一方面,这两个实现类一个是重量级,一个是轻量级。这类似于 ArrayList 和 Vector 的区别,也就是说,Hashtable 中的所有方法都是同步方法,因此是线程安全的。另一方面,在于对 null 值的处理。
HashTable类有一个子类Properties,Properties主要是用来存储字符串类型的键和值。
Properties主要进行文档参数配置的。
④:Map 接口有一个子接口:SortedMap。这个接口的特点是:对 Map 的键进行了排序。这个接口的典型实现类是 TreeMap,如果要把某个键值对放入 TreeMap,则要求键对象必须实现 Comparable 接口。
在使用TreeMap时,也可以通过自定义比较的方法对所有的键进行排序。
public static void main(String[] args) {
Comparator c=new Comparator() {
@Override
public int compare(Object o1, Object o2) {
int number1=(int)o1;
int number2=(int)o2;
return number2-number1;
}
};
Map map = new TreeMap(c);
map.put(1, "Tom");
map.put(2, "Jack");
map.put(3, "Jane");
map.put(4, "Peter");
Set entrySet=map.entrySet();
Iterator it=entrySet.iterator();
while(it.hasNext())
{
Map.Entry entry=(Map.Entry)(it.next());
Object key=entry.getKey();
Object value=entry.getValue();
System.out.println(key+":"+value);
}
}