---------------------- android培训、java培训、期待与您交流! ----------------------
Map接口可以操作两个值。
比如说:
Key(姓名) value(电话号码)
张三 123123
李四 456456
王五 789789
这样的数据 就可以使用Map存储。使用的时候根据key值去map中查找与其对应的value值。
Map接口旗下有3个子类:
1. HashMap<K,V>
2. Hashtable<K,V>
3. TreeMap<K,V>
常用方法:
NO. | 方法 | 作用 |
1 | public void clear() | 清空所有元素 |
2 | public V put(K key,V value) | 设置元素的内容 返回该位置上的旧元素 |
3 | public V get(Object key) | 根据提供的键(key) 查找值(value) |
4 | public boolean containsKey(Object key) | 查找指定的key是否存在 |
5 | public boolean containsValue(Object value) | 查找指定的value是否存在 |
6 | public boolean isEmpty() | 判断集合是否为空 |
7 | public Set<Map.Entry<K,V>> entrySet() | 将全部的元素变成一个Set |
8 | public Set<K> keySet() | 将全部的key变成Set |
9 | public int size() | 获取结合元素数量 |
1 | public Collection<V> values() | 将所有的value变成collection |
1 | public V remove(Object key) | 指定key删除value |
1 | public void putAll(Map<? extends K,? extends V> m) | 增加一组元素 |
1. HashMap<K,V>
Map中 key值不可以重复。 如果重复了,则新value会覆盖旧value。
如果使用用户自定义类做key 则同样需要同时重写:hashCode()方法和equals()方法。少一个都不行。
如果想完整的使用HashMap<K,V>类那么最少要重写equals()和hashCode()方法。
重写hashCode() 用于获得元素的存储位置。
重写equals() 用于在两个元素的位置相同的时候 比较两个元素的key是否相等。
2. Hashtable<K,V>
Hashtable<K,V>和HashMap<K,V>相比
No. | 区别点 | HashMap | Hashtable |
1 | 推出版本 | JDK1.2 | JDK1.0 |
2 | 操作 | 异步操作 | 同步操作 |
3 | 安全性 | 非线程安全 | 线程安全 |
4 | 性能 | 比Hashtable 高 | 比HashMap 低 |
3. TreeMap<K,V>
import java.util.*; public class MapDemo { public static void main(String[] args){ Map<String,String> map = new TreeMap<String,String>(); map.put("No.1","张三"); map.put("No.1","李四"); map.put("No.2","王五"); map.put("No.3","赵六"); map.put("No.4","秦七"); System.out.println(map); } } |
程序执行结果:
{No.1=李四, No.2=王五, No.3=赵六, No.4=秦七} |
TreeMap类同样不允许key重复。并且会自动排序。
Map集合的输出:
在Map中可以保存两个值。 但是实际上在Map接口内部却不是直接保存这两个值。
在Map接口中真正保存的是一个个MapEntry对象。
在一个MapEntry对象保存的才是map中定义的K和V。
因此在Map中不可以直接使用Iterator接口遍历。
范例:Iterator遍历元素。
import java.util.*;
public class MapDemo {
public static void main(String[] args){
Map<Person,String> map = new TreeMap<Person,String>();
map.put(new Person("张三", 20),"No.1");
map.put(new Person("李四", 21),"No.2");
map.put(new Person("李四", 21),"No.3");
map.put(new Person("王五", 64),"No.4");
Set<Map.Entry<Person, String>> set = map.entrySet();
Iterator<Map.Entry<Person, String>> iter = set.iterator();
while(iter.hasNext()){
Map.Entry<Person, String> temp = iter.next();
System.out.println(temp.getKey()+" "+temp.getValue());
}
}
}
范例:foreach遍历元素。import java.util.*;
public class MapDemo {
public static void main(String[] args){
Map<Person,String> map = new TreeMap<Person,String>();
map.put(new Person("张三", 20),"No.1");
map.put(new Person("李四", 21),"No.2");
map.put(new Person("李四", 21),"No.3");
map.put(new Person("王五", 64),"No.4");
for(Map.Entry<Person, String> temp : map.entrySet())
System.out.println(temp.getKey()+" "+temp.getValue());
}
}
---------------------- android培训、java培训、期待与您交流! ----------------------