欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

集合--Map

程序员文章站 2022-07-13 09:20:41
...

Map集合是双列集合,Map中的集合是成对存在的,每个元素由键和值两部分组成,通过键可以找到对应的值。

注意:Map中的集合不能包含重复的键,值可以重复。每个键只能对应一个值。

HashMap<K,V>:存储数据采用哈希表结构,元素的存取顺序不能保证一致。由于要保证键的唯一,不重复,需要重写键的hashcode()方法,equals()方法。

LinkedHashMap<K,V>:HashMap下有个子类LinkedHashMap,通过下面的源码我们可以看出。存储数据采用的哈希表结构+链表结构。通过链表结构可以保证元素的存取顺序一致;通过哈希表结构可以保证键的唯一,不重复。需要重写键的hashcode() 方法,equals()方法。

注意:Map接口中的集合都有两个泛型变量<k,v>,在使用时,要为两个泛型变量赋予数据类型。两个泛型变量<k,v>的数据类型可以相同,也可以不同。

集合--Map

集合--Map

Map的方法:

集合--Map

put方法:将指定的键与值对应起来,并添加到集合中

1.方法返回值为键所对应的值

 使用put方法,若指定的键在集合中没有,则没有这个键对应的值,返回null,并把指定的键值添加到集合中。

使用put方法时,若指定的键在集合中存在,则返回值为集合中键对应的值(该值为替换前的值),并把指定键对应的值,替换成指定的新值。

集合--Map

返回結果:

集合--Map

get方法:获取指定键所对应的值

remove方法:根据指定的键删除元素,返回被删除元素的值。


map集合中遍历键找值的方式?

由于集合中的键是唯一的,所以我们通过键来找值。

步骤:

1.获取map集合中所有的键,由于键唯一,所以返回一个set集合存储所有的键

2.遍历键 的set集合,得到每一个键

3.根据键,获取键所对应的值

代码展示:

集合--Map

结果:

集合--Map

在map类设计时,提供了一个嵌套接口:Entry。Entry将键值对的对应关系封装成了对象,即键值对对象,这样我们在遍历map集合时,就可以从每个键值对对象中获取对应的键与对应的值。

Map集合遍历键值对方式?

通过集合中每个键值对对象,获取键值对对象中的键与值

步骤:

1.获取Map集合中,所有的键值对对象,以set集合形式返回

2.遍历包含键值对对象的set集合,得到每一个键值对对象

3.通过键值对对象,获取entry对象中的键与值

集合--Map

注意:map集合不能直接使用迭代器或者foreach进行遍历。但是转成set之后就可以使用了

当key中存放的是自定义类型的变量?

                // 1,创建hashmap集合对象。
		Map<Student, String> map = new HashMap<Student, String>();

		// 2,添加元素。
		map.put(new Student("lisi", 28), "上海");
		map.put(new Student("wangwu", 22), "北京");
		map.put(new Student("zhaoliu", 24), "成都");
		map.put(new Student("zhouqi", 25), "广州");
		map.put(new Student("wangwu", 22), "南京");

		// 取出元素,键找值方式
		Set<Student> keySet = map.keySet();
		for (Student key : keySet) {
			String value = map.get(key);
			System.out.println(key.toString() + "=" + value);
		}

		// 取出方式,键值对方式
		Set<Entry<Student, String>> entrySet = map.entrySet();
		for (Entry<Student, String> entry : entrySet) {
			Student key = entry.getKey();
			String value = entry.getValue();
			System.err.println(key.toString() + "=" + value);
		}

当给hashMap中存放自定义对象时,如果自定义对象作为key存在这时要保证对象唯一,必须复写独享的hashcode和equals方法。

如果要保证map中存放的key和取出的顺序一致,可以使用LinkedHashMap集合存放


LinkedHashMap:

我们知道hashmap保证成对元素唯一,并且查询速度很快,可是成对元素存放进去是没有顺序的,那么我们要保证有序,还要速度快怎么办呢?

在Hashmap中有个子类linkedhashmap,它是链表和哈希表组合的一个数据存储结构。

示例代码:

LinkedHashMap<String, String> map = new LinkedHashMap<String, String>();
  map.put("邓超", "孙俪");
  map.put("李晨", "范冰冰");
  map.put("刘德华", "柳岩");
  Set<Entry<String, String>> entrySet = map.entrySet();
  for (Entry<String, String> entry : entrySet) {
	System.out.println(entry.getKey() + "  " + entry.getValue());
}
运行结果:

集合--Map