Map接口
如果要操作一对对象,则要使用Map接口,类似于以下的一种情况:
- 张三 123456
- 李四 234567
里面的内容都按照key→value的形式保存,也称为二元偶对象。
HashMap
HashMap是Map的子类,此类继承了AbstractMap类,同时可以被克隆,可以被序列化下来。
向集合中增加内容:
public static void main(String[] args){
Map<Integer, String> map = new HashMap<>();
map.put(1, "张三a");
map.put(1, "张三b"); //新的内容替换掉旧的内容
map.put(2, "李四");
map.put(3, "王五");
String val2 = map.get(1);
String val1 = map.get(6);
System.out.println(val);
}
结果为:
以上的操作是 Map 接口在开发中最基本的操作过程,根据指定的 key 找到内容,如果没有找到,则返回 null,找到了则返回具体的内容。
得到全部的key或value:
public static void main(String[] args) {
Map<Integer, String> map = new HashMap<Integer, String>();
map.put(1, "张三A");
map.put(2, "李四");
map.put(3, "王五");
Set<Integer> set = map.keySet(); // 得到全部的key
Collection<String> value = map.values(); // 得到全部的value
Iterator<Integer> iter1 = set.iterator();
Iterator<String> iter2 = value.iterator();
System.out.print("全部的key:");
while (iter1.hasNext()) {
System.out.print(iter1.next() + "、");
}
System.out.print("\n全部的value:");
while (iter2.hasNext()) {
System.out.print(iter2.next() + "、");
}
}
结果为:
HashMap是属于无序存放的。
Hashtable
Hashtable 是一个最早的 key→value 的操作类,本身是在 JDK 1.0 的时候推出的。其基本操作与 HashMap 是类似的。
public static void main(String[] args) {
Map<String, Integer> numbers = new Hashtable<String, Integer>();
numbers.put("one", 1);
numbers.put("two", 2);
numbers.put("three", 3);
Integer n = numbers.get("two");
if (n != null) {
System.out.println("two = " + n);
}
}
操作的时候,可以发现与 HashMap 基本上没有什么区别,而且本身都是以 Map 为操作标准的,所以操作的结果形式都一样。但是 Hashtable 中是不能向集合中插入 null 值的。
HashMap与Hashtable的区别
No. | 区别点 | HashMap | Hashtable |
---|---|---|---|
1 | 推出时间 | JDK1.2之后推出,新的操作类 | JDK1.0时推出,旧的操作类 |
2 | 性能 | 异步处理,性能较高 | 同步处理,性能较低 |
3 | null | 允许设置为null | 不允许设置,否则将出现空指向异常 |