Map :存储的是键值对,一对一对出现的,要保证键的唯一性.
Map常见的三个子类. 1.HashTable 底层是哈希表结构,不能存在null的情况.该集合是线程同步的.效率低 此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。
2.HashMap 底层是哈希表数据结构,允许null值和null键,该集合不同步. 效率高
3.TreeMap 底层是二叉树结构, 线程不同步,具备排序的特点.可以给Map集合中的键排序. 与Set很像,Set集合的底层就是使用了Map集合方法.
Map其共性方法有:
1.添加 put() putAll() 2.删除 clear(); remove(); 3.判断 containsValue(Object value) containsKey(Object key) isEmpty(); 4.获取 get(); size(); values();
基本共性方法代码演示:
import java.util.*;
class MapDemo
{
public static void main(String [] args)
{
Map<String,String> map = new HashMap<String,String>(); //Hash无序的.
//添加元素,添加了相同的键,后添加的值会将原先的键对应的值替换掉.put方法会返回原先被覆盖的值.
sop("Put :"+map.put("01","zhangsan01"));
sop("Put :"+map.put("01","wangwu"));
map.put("02","zhangsan02");
map.put("03","zhangsan03");
//判断是否包含
sop("containsKey : zhangsan01 "+"------"+map.containsKey("01"));
//sop("remove : "+map.remove("03")); //找寻键,并打印出其对应的值: zhangsan03
//获取
sop("get : "+map.get("02"));
map.put("04",null);
sop("get : "+map.get("04"));
//可以通过个get方法的返回值来判断一个 键 是否存在. 通过返回null来判断.
//获取Map集合中的所有值
Collection<String> coll = map.values();
sop(coll);
sop(map);
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
Map的重点方法: entrySet() KeySet() 这两种方法就是Map集合取出元素的方式:
Map集合两种取出方式:
1.Set<k> keySet 将Map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键. 在根据get方法,获取每个键所对应的值.
Map集合取出原理:转成Set集合.在通过迭代器取出.
2.Set<Map.Entry<k,v>> entrySet
将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
其中Entry其实是一个内部接口.定义在map接口里面
格式如下: interface Map { public static interface Entry { public static void getValue(); public static void getKey(); }
}
class HashMap implements Map { class Hash implements Map.Entry { public Object getValue(){}; public Object getKey(){}; } }
两种取出方式的代码演练:
/*
Map集合两种取出方式:
1.Set<k> keySet
将map中所有的键存入到Set集合.Set具备迭代器,可以用迭代取出所有的键.
在根据get方法,获取每个键锁对应的值.
Map集合取出原理:转成Set集合.在通过迭代器取出.
2.Set<Map.Entry<k,v>> entrySet ,将map集合中的 映射关系 存入到Set集合中,这个关系的数据类型是 : Map.Entry
Entry其实是一个内部接口.定义在map接口里面
interface Map
{
public static interface Entry
{
public static void getValue();
public static void getKey();
}
}
class HashMap implements Map
{
class Hash implements Map.Entry
{
public Object getValue(){};
public Object getKey(){};
}
}
*/
import java.util.*;
class MapDemo2
{
public static void main(String [] args)
{
Map<String,String> map = new HashMap<String,String>();
map.put("01","zhangsan01");
map.put("02","zhangsan02");
map.put("03","zhangsan03");
map.put("04","zhangsan04");
//将map集合中的 映射关系 取出.
Set<Map.Entry<String,String>> mapEntry = map.entrySet();
Iterator<Map.Entry<String,String>> it = mapEntry.iterator();
while(it.hasNext())
{
Map.Entry<String,String> me = it.next();
String key = me.getKey();
String value = me.getValue();
sop("Key :"+key+"Value :"+value);
}
/*
//获取Map集合的所有键,并放在Set集合中. 获取方法: keySet();
Set<String> keySet = map.keySet();
//迭代取出所有的键.
Iterator<String> it = keySet.iterator();
while(it.hasNext())
{
String key = it.next();
//有了键以后可以通过Map集合的get(key)方法获取其对应的值.
String value = map.get(key);
sop("Key :"+key+" Value :"+value);
}
*/
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
相关练习:
/*
练习:
每一个学生都有对应的归属地。
键值对: 学生Student为键,地址类型String值。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。
保证学生的唯一性。
1.描述学生。
2.定义map容器。将学生作为键,地址作为值。存入。
3.获取map集合中的元素。
*/
import java.util.*;
class MapTest
{
public static void main(String [] args)
{
Map<Student,String> map = new HashMap<Student,String>();
map.put(new Student("zhangsan01",21),"beijing");
map.put(new Student("zhangsan02",22),"shanghai");
map.put(new Student("zhangsan03",23),"guangzhou");
map.put(new Student("zhangsan04",24),"shenzhen");
//第一种取出方式:keySet
Set<Student> keySet = map.keySet();
Iterator<Student> it = keySet.iterator();
while(it.hasNext())
{
Student stu = it.next();
String addr = map.get(stu);
sop("第一种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", address : "+addr);
}
sop("-----------------------------------------");
//第二种取出方式:entrySet
Set<Map.Entry<Student,String>> entrySet = map.entrySet();
Iterator<Map.Entry<Student,String>> iter = entrySet.iterator();
while(iter.hasNext())
{
Map.Entry<Student,String> me = iter.next();
Student stu = me.getKey();
String addr = me.getValue();
sop("第二种取出方式 : student : "+stu.getName()+", age : "+stu.getAge()+", adresss :"+addr);
}
}
public static void sop(Object obj)
{
System.out.println(obj);
}
}
class Student implements Comparable<Student>
{
private String name;
private int age;
Student(String name,int age)
{
this.name = name;
this.age = age;
}
public int compareTo(Student s)
{
if(!(s instanceof Student))
throw new ClassCastException("类型匹配失败");
int num = new Integer(this.age).compareTo(new Integer(s.age));
if(num == 0)
{
return this.name.compareTo(s.name);
}
return num;
}
public int hashCode()
{
return name.hashCode()+age*17;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Student))
throw new ClassCastException("类型匹配失败");
Student stu = (Student)obj;
return this.getName().equals(stu.getName()) && this.age==stu.age;
}
public void setName(String name)
{
this.name = name;
}
public void setAge(int age)
{
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}