在Map接口定义有如下常用方法:
No. | 方法名称 | 类型 | 描述 |
1 | public V put(K key,V value) | 普通 | 向集合保存数据 |
2 | public V get(Object key) | 普通 | 根据key超找对应value数据 |
3 | public Set<Map.Entry<K,V>>entrySet() | 普通 | 将Map集合转化为Set集合 |
4 | public Set<K>keySet() | 普通 | 取出全部key |
在Map接口有两个常用子类:HashMap、Hashtable
范例:观察HashMap的使用
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<>();
map.put("壹", 1);
map.put("贰", 2);
map.put("叄", 3);
map.put("叄", 33);
System.out.println(map);
}
}
PS:结果发现使用HashMap定义是无需存放;如果有重复的Key会进行覆盖,新的内容替换掉旧的内容
============分割线============
范例:查询操作
import java.util.HashMap;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<>();
map.put("壹", 1);
map.put("贰", 2);
map.put("叄", 3);
map.put(null, 0);
System.out.println(map.get("壹"));
System.out.println(map.get("陸"));
System.out.println(map.get("null"));
}
}
============分割线============
范例:取得所有的key值
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new HashMap<>();
map.put("壹", 1);
map.put("贰", 2);
map.put("叄", 3);
map.put(null, 0);
Set<String> all = map.keySet();
Iterator<String> iter = all.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
============分割线============
范例:使用Hashtable(key和value都不允许为null)
import java.util.Hashtable;
import java.util.Map;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new Hashtable<>();
map.put("壹", 1);
map.put("贰", 2);
map.put("叄", 3);
System.out.println(map);
}
}
============分割线============
HashMap与Hashtable区别:
No. | 区别 | HashMap | Hashtable |
1 | 推出时间 | JDK1.2 | JDK1.0 |
2 | 性能 | 异步处理 | 同步处理 |
3 | 数据安全 | 非线程安全 | 线程安全 |
4 | 设置null | 允许key和value为null | 不允许设置null |
============分割线============
Iterator输出Map
使用put(K key,V value)时候,实际将数据自动封装为Map.Entry<K,V>对象。
Map.Entry<K,V>接口定义的两个操作:
·取得key : public K getKey();
·取得value : public V getValue();
范例:
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
public class Demo {
public static void main(String[] args) throws Exception {
Map<String, Integer> map = new Hashtable<>();
map.put("壹", 1);
map.put("贰", 2);
map.put("叄", 3);
// 将Map集合转化为Set集合,方便使用Iterator输出
Set<Map.Entry<String, Integer>> set = map.entrySet();
Iterator<Map.Entry<String, Integer>> iter = set.iterator();
while (iter.hasNext()) {
Map.Entry<String, Integer> data = iter.next();
System.out.println(data.getKey() + "->" + data.getValue());
}
}
}
============分割线============
范例:
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
class Book {
private String title;
private double price;
public Book(String title, double price) {
this.title = title;
this.price = price;
}
@Override
public String toString() {
return "书名:《" + this.title + "》,价格:" + this.price + "元。";
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
long temp;
temp = Double.doubleToLongBits(price);
result = prime * result + (int) (temp ^ (temp >>> 32));
result = prime * result + ((title == null) ? 0 : title.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (this == obj)
return true;
if (obj == null)
return false;
if (getClass() != obj.getClass())
return false;
Book other = (Book) obj;
if (Double.doubleToLongBits(price) != Double.doubleToLongBits(other.price))
return false;
if (title == null) {
if (other.title != null)
return false;
} else if (!title.equals(other.title))
return false;
return true;
}
}
public class MapDemo03 {
public static void main(String[] args) {
Map<Book, String> all = new Hashtable<>();
all.put(new Book("Java", 88.6), "JAVA");
all.put(new Book("Oracle", 79.6), "Oracle");
all.put(new Book("JSP", 88.6), "JSP");
Set<Map.Entry<Book, String>> set = all.entrySet();
Iterator<Map.Entry<Book, String>> iter = set.iterator();
while (iter.hasNext()) {
Map.Entry<Book, String> me = iter.next();
System.out.println(me.getKey() + "->" + me.getValue());
}
}
}
总结:
1、Map集合保存数据是为了方便查询,Collection保存数据是为了方便输出;
2、Map使用Iterator接口输出的步骤以及代码;
3、HashMap可以保存null,key重复会出现覆盖。