Java集合框架中的Map集合

分手后的思念是犯贱 2023-02-14 10:52 124阅读 0赞

Map集合和Collection集合的区别?

Map集合是有Key(键)和Value(值)的,Collection集合是只有Value。

Collection集合底层也是有Key和Value,只是隐藏起来。

什么是Map集合呢?

Map集合:该集合存储键值对。一对一对往里存。而且要保证键的唯一性。

Map集合中的子类有:

  • Hashtable:底层是哈希表数据结构,不可以存入null键null值。该集合是线程同步的。jdk1.0.效率低;
  • HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,该集合是不同步的。将hashtable替代,jdk1.2.效率高;
  • TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序

Map集合和Set很像,其实Set底层就是使用了Map集合。

Map集合中的方法:

  1. 添加

    1. put(K key, V value) //向map集合中添加Key为key,Value为value的元素,当添加成功时返回null,否则返回value
    2. /*
    3. 就是说Map集合中的Key是不能重复的,这就类似于Set集合中元素不能重复,但是Map集合中的Value是可以重复
    4. */
    5. putAll(Map<? extends K,? extends V> m) //向map集合中添加指定集合的所有元素
  1. 删除

    1. clear() //把map集合中所有的键值删除
    2. remove(Object key) //删除Key为key值的元素
  1. 判断

    1. containsValue(Object value) //检出map集合中有没有包含Value为value的元素,如果有则返回true,否则返回false
    2. containsKey(Object key) //检出map集合中有没有包含Key为key的元素,如果有则返回true,否则返回false。
    3. isEmpty()
  1. 获取

    1. get(Object key) //根据map集合中元素的Key来获取相应元素的Value
    2. size() //返回map集合中元素个数
    3. values()
    4. Set<Map.Entry<K,V>> entrySet() //返回map到一个Set集合中,以map集合中的Key=Value的形式返回到set中
    5. Set<K> keySet() //返回map集合的所有key

例1:

  1. Map<String,String> map=new HashMap<String,String>();
  2. System.out.println(map.put("01","Tom"));
  3. System.out.println(map.put("01","Jack")); //当添加的key一样时,返回第一次key对应的值

2020060218082750.png

  1. Map<String,String> map=new HashMap<String,String>();
  2. map.put("01","Tom");
  3. map.put("02","Jack");
  4. map.put("03","Mike");
  5. map.put("04","Jane");
  6. map.remove("01"); //删除key为01对应的简直对
  7. map.remove("02","Jack"); //删除指定key和value对应的元素
  8. System.out.print(map);
  9. map.clear(); //删除map集合所有元素
  10. System.out.print(map);

20200602181920920.png

  1. Map<String,String> map=new HashMap<String,String>();
  2. map.put("01","Tom");
  3. map.put("02","Jack");
  4. map.put("03","Mike");
  5. map.put("04","Jane");
  6. System.out.println(map.containsKey("01")); //是否包含指定key的元素
  7. //可以通过get方法的返回值来判断一个键是否存在。如果返回null则不存在
  8. System.out.println(map.get("03")); //返回value
  9. System.out.println(map.values()); //获取map集合中所有的值
  10. System.out.println(map.size()); //返回map集合的大小

20200602182611660.png

例2:Map集合中的迭代器。

迭代方法一:

Set keySet:将map中所有的键存入到Set集合。因为set具备迭代器;

所以可以通过迭代方式取出所有的键,再根据get方法。获取每一个键对应的值;

Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。

  1. //迭代方法一:
  2. Map<String,String> map=new HashMap<String,String>();
  3. map.put("01","Tom");
  4. map.put("02","Jack");
  5. map.put("03","Mike");
  6. map.put("04","Jane");
  7. //方法一:先获取map集合的所有键的Set集合,keySet()
  8. Set<String>keyset=map.keySet();
  9. //有了Set集合。就可以获取其迭代器
  10. Iterator<String>it=keyset.iterator();
  11. while(it.hasNext())
  12. {
  13. String key=it.next();
  14. String value=map.get(key);
  15. System.out.println("key="+key+" value="+value);
  16. }

迭代器方法二:

Set> entrySet:将map集合中的映射关系存入到了set集合中;

而这个关系的数据类型就是:Map.Entry;

Entry其实就是Map中的一个static内部接口。

为什么要定义在内部呢?
因为只要有了Map集合,有了键值对,才会有键值的映射关系。关系属于Map集合中的一个内部事物。而且该事物在直接访问Map集合中的元素。

  1. Set<Map.Entry<String,String>> entrySet=map.entrySet();
  2. Iterator<Map.Entry<String,String>> it=entrySet.iterator();
  3. while(it.hasNext())
  4. {
  5. Map.Entry<String,String> me=it.next();
  6. String key=me.getKey();
  7. String value=me.getValue();
  8. System.out.println("key="+key+" value="+value);
  9. }

20200602183937203.png

例3:每一个学生都有对应的归属地。学生Student,地址String。
学生属性:姓名,年龄。
注意:姓名和年龄相同的视为同一个学生。保证学生的唯一性。

  1. class Student implements Comparable<Student>
  2. {
  3. private String name;
  4. private int age;
  5. Student(String name,int age)
  6. {
  7. this.name=name;
  8. this.age=age;
  9. }
  10. public int compareTo(Student s)
  11. {
  12. int num = new Integer(this.age).compareTo(new Integer(s.age));
  13. if(num==0)
  14. return this.name.compareTo(s.name);
  15. return num;
  16. }
  17. public int hashCode()
  18. {
  19. return name.hashCode()+age*34;
  20. }
  21. public boolean equals(Object obj)
  22. {
  23. if(!(obj instanceof Student))
  24. throw new ClassCastException("类型不匹配");
  25. Student s = (Student)obj;
  26. return this.name.equals(s.name) && this.age==s.age;
  27. }
  28. public String getName()
  29. {
  30. return name;
  31. }
  32. public int getAge()
  33. {
  34. return age;
  35. }
  36. public String toString()
  37. {
  38. return name+":"+age;
  39. }
  40. }
  41. class Demo {
  42. public static void main(String[] args)
  43. {
  44. HashMap<Student,String> hm = new HashMap<Student,String>();
  45. hm.put(new Student("lisi1",21),"beijing");
  46. hm.put(new Student("lisi1",21),"tianjin"); //当键一样时,新键替代旧键
  47. hm.put(new Student("lisi2",22),"shanghai");
  48. hm.put(new Student("lisi3",23),"nanjing");
  49. hm.put(new Student("lisi4",24),"wuhan");
  50. //第一种取出方式 keySet
  51. Set<Student> keySet = hm.keySet();
  52. Iterator<Student> it = keySet.iterator();
  53. while(it.hasNext())
  54. {
  55. Student stu = it.next();
  56. String addr = hm.get(stu);
  57. System.out.println(stu+".."+addr);
  58. }
  59. }
  60. }

20200602185805318.png

发表评论

表情:
评论列表 (有 0 条评论,124人围观)

还没有评论,来说两句吧...

相关阅读