一:Map<k,v>:该集合存储键值对,一对一对的忘里存,而且要保证键的唯一性
1.添加
put(k,v);
putAll(Map(? extends k,? extends v) m);
2.删除
clear();
remove(Object k);
3.判断
containsKey(k);
containsValue(v);
isEmpt();
4.获取
get(Object k);
size();
values();
二:Map的子类
Map<k,v>:
|--HashTable:底层是哈希表数据结构,线程是同步的,JDK1.0,效率低,不可以存入null键和null值
|--HashMap:底层是哈希表数据结构,线程是不同步的,效率高,可以存入null键和null值,已经代替HashTable
|--TreeMap:底层是二叉树数据结构,线程不同步,可以给Map中的键进行排序
1.当我们向一个Map中添加键值时,当添加的键是相同的时候,第二次添加的键会将第一次添加的键对应的值覆盖掉, 并返回第一次添加的
键对应的值
2.Map值的两种取出方式:
2-1:Set<key> keySet()获取Map中的值并将获取的值保存到Set集合中,因为set集合有迭代器的功能,然后有Map中的get(key)
方法获取值的值;
2-2:entrySet
① 利用ketSet()方法获取值的方法
main:
Map<String,String> m = new HashMap<String,String>();
m.put("01","张三1");
m.put("02","张三2");
② 利用keySet()方法获取键的集合
Set<String> s = m.ketSet();
//利用Set集合的迭代器进行输出
Iterator<String> it = s.iterator();
while(it.hasNext())
{
String key = it.next();
System.out.porintln(m.get(key));
}
②:利用enterSet()方法获取值的方法- import java.util.HashMap;
- import java.util.Iterator;
- import java.util.Map;
- import java.util.Set;
- //利用enterSet()方法获取值的方法
- class Student implements Comparable<Student>
- {
- private String name;
- private int age;
- Student(String name,int age)
- {
- this.name=name;
- this.age= age;
- }
- public void setName(String name)
- {
- this.name= name;
- }
- public String getName()
- {
- return name;
- }
- public void setAge(int age)
- {
- this.age= age;
- }
- public int getAge()
- {
- return age;
- }
- //实现hasCode方法
- public int hashCode()
- {
- return name.hashCode()+age*34;
- }
- //实现equals方法
- public boolean equals(Object obj)
- {
- if(!(obj instanceof Student))
- throw new ClassCastException("输入的类型不匹配");
- Student stu =(Student)obj;
- return this.getName().equals(stu.getName()) && this.getAge() == stu.getAge();
- }
- //实现Complarable接口的compareTo()方法
- public int compareTo(Student st)
- {
- if(this.getAge() ==st.getAge())
- return 0;
- if(this.getAge() >st.getAge())
- return 1;
- return -1;
- }
- }
- public class MapEntryDemo
- {
- public static void main(String[] args)
- {
- Map<Student,String> m = new HashMap<Student,String>();
- m.put(new Student("张三1",23),"beijingshi");
- m.put(new Student("张三2",22),"shanghai");
- m.put(new Student("张三3",27),"guangzhou");
- m.put(new Student("张三4",45),"nanjing");
- //利用entrySet()方法获取
- Set<Map.Entry<Student,String>> s =m.entrySet();
- Iterator<Map.Entry<Student,String>> it = s.iterator();
- while(it.hasNext())
- {
- Map.Entry<Student,String> me = it.next();
- Student st = me.getKey();
- String name=st.getName();
- int age = st.getAge();
- System.out.println(name+"---=-"+age);
- }
- }
- }
复制代码 ③:利用比较器对TreeMap进行排序
- //定义比较器
- class StuNameComplarator implements Comparator<Student>
- {
- @Override
- public int compare(Student stu1, Student stu2) {
- int num=stu1.getName().compareTo(stu2.getName());
- if(num==0)
- {
- return new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge()));
- }
- return num;
- }
- }
- 注意:TreeMap具有排序的功能
- Map集合的使用场景:当数据之间存在着映射关系时,就要先想到使用Map集合
复制代码
|
|