黑马程序员技术交流社区

标题: 毕老师视频学习笔记之Map集合 [打印本页]

作者: 骑着毛驴去赶    时间: 2014-3-16 22:17
标题: 毕老师视频学习笔记之Map集合
一: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()方法获取值的方法
  1. import java.util.HashMap;
  2. import java.util.Iterator;
  3. import java.util.Map;
  4. import java.util.Set;

  5. //利用enterSet()方法获取值的方法
  6. class Student implements Comparable<Student>
  7. {
  8.         private String name;
  9.         private int age;
  10.         Student(String name,int age)
  11.         {
  12.                 this.name=name;
  13.                 this.age= age;
  14.         }
  15.         public void setName(String name)
  16.         {
  17.                 this.name= name;
  18.         }
  19.         public String getName()
  20.         {
  21.                 return name;
  22.         }
  23.         public void setAge(int age)
  24.         {
  25.                 this.age= age;
  26.         }
  27.         public int getAge()
  28.         {
  29.                 return age;
  30.         }
  31.         //实现hasCode方法
  32.         public int hashCode()
  33.         {
  34.                 return name.hashCode()+age*34;
  35.         }
  36.         //实现equals方法
  37.         public boolean equals(Object obj)
  38.         {
  39.                 if(!(obj instanceof Student))
  40.                         throw new ClassCastException("输入的类型不匹配");
  41.                 Student stu =(Student)obj;
  42.                 return this.getName().equals(stu.getName()) && this.getAge() == stu.getAge();
  43.         }
  44.         //实现Complarable接口的compareTo()方法
  45.         public int compareTo(Student st)
  46.         {
  47.                 if(this.getAge() ==st.getAge())
  48.                         return 0;
  49.                 if(this.getAge() >st.getAge())
  50.                         return 1;
  51.                 return -1;
  52.         }
  53. }
  54. public class MapEntryDemo
  55. {
  56.         public static void main(String[] args)
  57.         {
  58.                 Map<Student,String> m = new HashMap<Student,String>();
  59.                 m.put(new Student("张三1",23),"beijingshi");
  60.                 m.put(new Student("张三2",22),"shanghai");
  61.                 m.put(new Student("张三3",27),"guangzhou");
  62.                 m.put(new Student("张三4",45),"nanjing");
  63.                 //利用entrySet()方法获取
  64.                 Set<Map.Entry<Student,String>> s =m.entrySet();
  65.                 Iterator<Map.Entry<Student,String>> it = s.iterator();
  66.                 while(it.hasNext())
  67.                 {
  68.                         Map.Entry<Student,String> me = it.next();
  69.                         Student st = me.getKey();
  70.                         String name=st.getName();
  71.                         int age = st.getAge();
  72.                         System.out.println(name+"---=-"+age);
  73.                 }
  74.         }
  75. }
复制代码
③:利用比较器对TreeMap进行排序
  1. //定义比较器
  2. class StuNameComplarator implements Comparator<Student>
  3. {

  4.         @Override
  5.         public int compare(Student stu1, Student stu2) {
  6.                 int num=stu1.getName().compareTo(stu2.getName());
  7.                 if(num==0)
  8.                 {
  9.                         return new Integer(stu1.getAge()).compareTo(new Integer(stu2.getAge()));
  10.                 }
  11.                 return num;
  12.         }
  13. }
  14. 注意:TreeMap具有排序的功能
  15. Map集合的使用场景:当数据之间存在着映射关系时,就要先想到使用Map集合

复制代码









欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2