36、Map接口和HashMap实现

学习目标:

1、了解Map结构的数据特点

2、了解Map接口和HashMap实现类的常见用法

学习过程:

一、Map接口

 Map意为映射,java.util.Map接口规定了一组通过键值对(key-value)方式组织的集合,键必须是唯一的,Map的数据也是不能保证顺序的,也就是Map中数据的顺序与放置数据的先后顺序无关。,其基本的操作是get 和 put,即放置数据和取数据,我们一般是通过键key获得其对应的值value。

我们在通过键取值时,不管数据量,一般其随机访问速度都是一致的,但是如果经常需要遍历整个Map的所有数据,那么Map可能就不是最好的选择。

二、HashMap实现

HaspMap实现了Map接口,所以在键值对存储关系中,顺序是无需考虑,对象放到HashMap中,所在的位置时由哈希来分布在集合中所在的位置,取值时一般不理会这个位置,而是通过键Key去索引取得对象。跟hashSet一样,Hash序列为HashMap的基本操作(get 和 put)提供稳定的性能。

常用方法:

void clear()  //从此映射中移除所有映射关系。

boolean containsKey(Object key) //如果此映射包含对于指定键的映射关系,则返回 true。

 boolean containsValue(Object value) //如果此映射将一个或多个键映射到指定值,则返回 true。

 Set<Map.Entry

 boolean isEmpty()  //返回此映射所包含的映射关系的 Set 视图。

 V get(Object key) 如果此映射不包含键-值映射关系,则返回 true。

 Set

 V put(K key, V value) 在此映射中关联指定值与指定键。

 void putAll(Map

 V remove(Object key)  从此映射中移除指定键的映射关系(如果存在)。

 int size()  返回此映射中的键-值映射关系数。

三、示例代码

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

public class Stu3 {

 

    public static void main(String[] args) {

 

        HashMap map = new HashMap();

 

        Student stu1 = new Student();

        stu1.setNum(1);

        stu1.setName("刘德华");

 

        Student stu2 = new Student();

        stu2.setNum(2);

        stu2.setName("张学友");

 

        Student stu3 = new Student();

        stu3.setNum(3);

        stu3.setName("曾志伟");

 

        Student stu4 = new Student();

        stu4.setNum(3);

        stu4.setName("刘宝");

 

        // 添加 key=键 value=值 key唯一

        map.put("440602", stu2);

        map.put("440601", stu1);

        map.put("440603", stu3);

 

        map.put("440603", stu4);

 

        // 删

        // map.remove("440602");

 

        System.out.println("大小:" + map.size());

 

        Student stu = (Student) map.get("440601");

        System.out.println(stu.getName());

 

        // 遍历

        // 1、取得key。

        Set keySet = map.keySet();

        // 2、循环 迭代

        Iterator iterator = keySet.iterator();

        while (iterator.hasNext()) {

            Object object = iterator.next();

            Student student = (Student) map.get(object.toString());

            System.out.println(student.getNum() + ":" + student.getName());

        }

 

    }

 

Map的循环方式比较多,除了上面这种循环方式之外比较常用的一下四种方式:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

  //第一种:普遍使用,二次取值

  System.out.println("通过Map.keySet遍历key和value:");

  for (String key : map.keySet()) {

   System.out.println("key= "+ key + " and value= " + map.get(key));

  }

   

  //第二种

  System.out.println("通过Map.entrySet使用iterator遍历key和value:");

  Iterator<Map.Entry<String, String>> it = map.entrySet().iterator();

  while (it.hasNext()) {

   Map.Entry<String, String> entry = it.next();

   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

  }

   

  //第三种:推荐,尤其是容量大时

  System.out.println("通过Map.entrySet遍历key和value");

  for (Map.Entry<String, String> entry : map.entrySet()) {

   System.out.println("key= " + entry.getKey() + " and value= " + entry.getValue());

  }

 

  //第四种

  System.out.println("通过Map.values()遍历所有的value,但不能遍历key");

  for (String v : map.values()) {

   System.out.println("value= " + v);

  }

 }

上面用到了for each循环,其中比较常用的是第三种,尤其是如果键值对都需要获取的时候,所以大家需要记忆第三种方式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值