只有创造,才是真正的享受,只有拚搏,才是充实的生活。
本讲内容:Map结构的集合类:HashMap类、Hashtable类
Map是个接口,它关心的是映射关系,它里面的元素是成对出现的,键和值都是对象且键必须保持唯一。这一点上看它和Collection是很不相同的。Map接口的常用方法如下:
put(K key, V value) | 向集合中添加指定的键值对 |
putAll(Map <? extends K,? extends V> t) | 把一个Map中的所有键值对添加到该集合 |
containsKey(Object key) | 如果包含该键,则返回true |
containsValue(Object value) | 如果包含该值,则返回true |
get(Object key) | 根据键,返回相应的值对象 |
keySet() | 将该集合中的所有键以Set集合形式返回 |
values() | 将该集合中所有的值以Collection形式返回 |
remove(Object key) | 如果存在指定的键,则移除该键值对,返回键所对应的值,如果不存在则返回null |
clear() | 移除Map中的所有键值对,或者说就是清空集合 |
isEmpty() | 查看Map中是否存在键值对 |
size() | 查看集合中包含键值对的个数,返回int类型 |
一、HashMap
HashMap是最常用的Map集合,它的键值对在存储时要根据键的哈希码来确定值放在哪里。
查找速度比ArrayList类快,并且不重复。
package a;
import java.util.*;
public class Text {
public static void main(String[] args) {
HashMap hm=new HashMap();
Student stu1=new Student("1","惠琳","90");
Student stu2=new Student("2","丹妹","100");
Student stu3=new Student("3","开妥","60");
hm.put("001", stu1);
hm.put("002", stu2);//键值
hm.put("002", stu3);//复盖
/*if(hm.containsKey("002")){//查询
System.out.println("该学生信息为:");
Student stu=(Student)hm.get("002");
System.out.println("编号:"+stu.getOn()+"\t名称:"+stu.getName()+"\t分数:"+stu.getScore());
}else{
System.out.println("对不起,没有该学生");
}*/
Iterator a=hm.keySet().iterator();//遍历 Iterator 迭代 hasNext有没有下一个返回一个boolean
while(a.hasNext()){
String key=a.next().toString();
Student b=(Student)hm.get(key);
System.out.println("编号:"+b.getOn()+"\t名称:"+b.getName()+"\t价格:"+b.getScore());
}
}
}
class Student {
private String on;
private String name;
private String score;
public String getOn() {
return on;
}
public void setOn(String on) {
this.on = on;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getScore() {
return score;
}
public void setScore(String score) {
this.score = score;
}
public Student(String on,String name,String score) {
this.on=on;
this.name=name;
this.score=score;
}
}
二、 HashMap与Hashtable的区别
HashMap与Hashtable都是java的集合类,都可以用来存放java对象,这也是它们的相同点,但它们也有区别:
1、历史原因:
Hashtable是基于陈旧的Dictionary类的,HashMap是java1.2引进的Map接口的一个实现。
2、同步性:
Hashtable是同步的,这个类中的一些方法保证了Hashtable中的对象是线程安全的,而HashMap是异步的,因此HashMap中的对象并不是线程安全的。因为同步的要求会影响执行的效率,所以如果你不需要线程集合那么使用HashMap是一个很好的的选择,这样可以避免由于同步带来的不必要的性能开销。从而提高效率。
3、值:
HashMap可以让你将空值作为一个表的条目的key或valeu,但是Hashtable是不能放入空值的。
三、总结
1、如果需要线程安全,使用Vector、Hashtable。
2、如果不需要线程安全,使用ArrayList、LinkedList、HashMap。
3、如果要求键值对,使用HashMap、Hashtable。
4、如果数据量大而且需要线程安全考虑Vector
本讲就到这里,Take your time and enjoy it