Map集合
Set集合和List集合都属于Collection
Map每个元素的值都包含两个对象,key-value键值对
key不能够重复,唯一的key可以对应多个value
Map中不存在索引,有key,可以实现循环访问
HashMap
允许 null值和 null关键
初始化
HashMap<key,value> hashMap = new HashMap<key,value>();
常用方法
boolean containsKey(Object key) #返回 true如果这Map包含一个指定的键映射
boolean containsValue(Object value) #返回 true如果映射到指定的值的一个或多个键
V get(Object key) #返回指定的键映射的值,或 null如果这个Map不包含的键映射
Set<K> keySet() #返回一个 Set的关键视图包含在这个Map
V put(K key, V value) #将指定的值与此映射中的指定键关联
V replace(K key, V value) #仅当它当前映射到某一值时,替换指定的键的条目
boolean replace(K key, V oldValue, V newValue) #仅当当前映射到指定的值时,替换指定的键的条目
遍历
Student类
package com.HashMap.util;
/*
* @author Administrator
* @version 1.0
*/
public class Student {
//成员变量
private String id;
private String name;
private char sex;
//无参构造方法
public Student(){
}
//有参构造方法
public Student(String id,String name,char sex){
this.id = id;
this.name = name;
this.sex = sex;
}
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public char getSex() {
return sex;
}
public void setSex(char sex) {
this.sex = sex;
}
@Override
public int hashCode(){
return id.hashCode();
}
@Override
public boolean equals(Object obj){
if (this == obj){
return true;
}
if (obj instanceof Student){
Student stu = (Student) obj;
if ((this.id == stu.id) && (this.name == stu.name) && (this.sex == stu.sex)){
return true;
}
}else {
System.out.println(obj.getClass());
}
return false;
}
}
HashMapDemo类
package com.HashMap.util;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Set;
/*
* @author Administrator
* @version 1.0
*/
public class HashMapDemo {
//主函数
public static void main(String[] args) {
//初始化HashMap对象
HashMap<String,Student> hashMap = new HashMap<String, Student>();
//初始化Student对象
Student student1 = new Student("00000002","邓一",'男');
Student student2 = new Student("00000001","李二",'男');
Student student3 = new Student("00000003","张三",'男');
//不能重复
hashMap.put(student1.getId(),student1);
hashMap.put(student2.getId(),student2);
hashMap.put(student3.getId(),student3);
hashMap.put(null,null);
//Iterator遍历HaspMap
//方法一:通过keyset()方法获得key的set集合
Set<String> set = hashMap.keySet();
Iterator<String> it1 = set.iterator();
while (it1.hasNext()){
String key = it1.next();
System.out.println(key + ":" + hashMap.get(key));
}
//方法二:通过entrySet()方法
Iterator it2 = hashMap.entrySet().iterator();
while (it2.hasNext()){
//获得entry(多态),向下转型
Map.Entry<String,Student> entry = (Map.Entry<String, Student>) it2.next();
System.out.println(entry.getKey() + ":" + entry.getValue());
}
//null:null
//00000003:com.HashMap.util.Student@ba071803
//00000002:com.HashMap.util.Student@ba071802
//00000001:com.HashMap.util.Student@ba071801
}
}
Hashtable
不接受Null
为了成功的再Hashtable中存储和获取对象,用作键的对象必须实现hashCode和equals方法
HashTableDemo类
package com.HashTable.util;
import java.util.*;
/*
* @author Administrator
* @version 1.0
*/
public class HashTableDemo {
//主函数
public static void main(String[] args) {
//初始化Hashtable对象
Hashtable<String,Student> hashtable = new Hashtable<String, Student>();
//初始化Student对象
Student student1 = new Student("00000002","邓一",'男');
Student student2 = new Student("00000001","李二",'男');
Student student3 = new Student("00000003","张三",'男');
//不能重复
hashtable.put(student1.getId(),student1);
hashtable.put(student2.getId(),student2);
hashtable.put(student3.getId(),student3);
//不允许null值
// hashtable.put(null,null);
//Hashtable特有的循环Enumeration<V> elements() 返回此散列表中值的枚举
Enumeration<String> enumeration = hashtable.keys();
while (enumeration.hasMoreElements()/*类比hashNext()*/){
String key = enumeration.nextElement();
System.out.println(key + ":" + hashtable.get(key));
}
//00000003:com.HashMap.util.Student@ba071803
//00000002:com.HashMap.util.Student@ba071802
//00000001:com.HashMap.util.Student@ba071801
}
}