java中Map接口的常用方法和遍历方法

Map接口,元素以键值对的形式存在,键不可以重复(所以作为键的对象需要正确重写hashCode方法和equals方法),值可以重复
实现子类有:HashMap(无序不重复,轻量级、线程不安全、允许null作为键值)、LinkedHashMap(能保留键值对输入的顺序)和HashTable(重量级、线程安全,null为键值时会抛出异常)
常用方法
get(key)方法,通过key找到对应的值对象
put(key,value)方法,如果没有此key,则插入新的数据,如果key已经存在,则修改value值
remove(key)方法,根据key,删除一个键值对
keySet()方法,获取所有键构成的Set集合(无重复)
values()方法,获取所有值构成的Collection结合(可能有重复)
entrySet()方法,返回一个Set集合,集合中放的是Map.Entry类型(此类型里封装的是键值对,有getKey()、getValue()和setValue()方法),这个方法用于键值对的遍历
containsKey/containsValue方法,判断Map中是否存在某个键或者值
size(),获取键值对数量
isEmpty(),判断Map是否为空
clear(),清空Map
Map的遍历有:键遍历、值遍历、键值遍历和使用Map.Entry进行键值遍历
import java.util.*;
public class TestMap
{
public static void main(String args[]){
//实例化HashMap
Map<Student,String> map = new HashMap<Student,String>();
//添加数据
map.put(new Student(25,”ldt”),”1111″);
map.put(new Student(26,”love”),”2222″);
map.put(new Student(26,”waj”),”3333″);
map.put(new Student(23,”ldt”),”2222″);
//遍历数据
//1、键遍历
Set<Student> set = map.keySet(); //获取键的Set集合
Iterator<Student> it = set.iterator();
while(it.hasNext()){
System.out.println(it.next().getName());
}
System.out.println(“================”);
//2、值遍历
Collection<String> col = map.values();//获取值得Collection集合
Iterator<String> itV = col.iterator();
while(itV.hasNext()){
System.out.println(itV.next());
}
System.out.println(“================”);
//3、键值遍历
Set<Student> set_1 = map.keySet(); //通过键的Set集合获取值
Iterator<Student> it_1 = set.iterator();
while(it_1.hasNext()){
Student key = it_1.next();
String value = map.get(key);
System.out.println(key.getName()+”–>”+value);
}
System.out.println(“================”);
//4、使用Map.Entry进行键值遍历
Set setEntry = map.entrySet(); //获取键值对的集合
Iterator itE = setEntry.iterator();
while(itE.hasNext()){
Map.Entry entry = (Map.Entry)itE.next();
Student stu =(Student) entry.getKey();
System.out.println(stu.getName() +”–>”+ entry.getValue());
}
}
}
//自定义数据类,在HashSet中有Hash算法,只有HashCode方法的返回值相同时才会调用equals方法
//为了让在set中添加自定义类时,添加的数据不同,需要重写HashCode方法(相同对象返回值相同、不同对象返回值尽量不同)和equals方法
class Student
{
//属性
private int age;
private String name;
//构造器
public Student(){
this.age = 20;
this.name = “ldt”;
}
public Student(int age,String name){
this.age = age;
this.name = name;
}
//公开属性操作方法
public String getName(){
return this.name;
}
//重写equals
public boolean equals(Object obj){
//自反性
if(this == obj){
return true;
}
//obj不能为null
if(obj == null){
return false;
}
//this和obj的实际类型要相同
if(this.getClass() != obj.getClass()){
return false;
}
//基本类型用==比较,对象类型用equals比较
Student stu = (Student)obj;
if(this.age == stu.age && this.name.equals(stu.name)){
return true;
}else{
return false;
}
}
//重写hashCode方法
public int hashCode(){
return this.age + this.name.hashCode();
}
}

© 2014 – 2016, 李德涛博客. 版权所有.

发表评论

电子邮件地址不会被公开。 必填项已用*标注