Java SE基础知识(13)

Map集合

Map集合:就是用来存储 这种 键值映射关系的数据 。

**Map集合做大的特点:**可以储存键值对应的元素。

将键映射到值的对象,一个映射不能包含重复的键,每个键最多只能映射到一个值。

Map集合与Collection 集合的区别:

  • Map集合储存元素是成对出现的,Map集合的键是唯一的,值是可以重复的。

  • Collection 集合储存元素是单独出现的,其中Set是唯一的,List是可重复的。

  • Map 是双列集合,Collection 集合是单列集合。

  • 多次存储相同的键,就会发生键相同值覆盖。

  • Map集合的数据结构只跟键有关,跟值没关系,而Collection 集合的数据结构是针对元素有效的。

注意:

Collection 单列集合

存储键是String类型 值是Student类型

HashMap 键的数据结构是哈希表

键的唯一性,要靠键重写hashCode( )和equals( )方法才能保证,如果不重写,则无法保证键的唯一性。

String 类重写hashCode( )和equals( )方法

主要方法:

Map集合的key和value都可以是任何引用类型的数据。Map集合的key不允许重复,value允许重复。key和value之间存在单向一对一关系,即通过指定的键可以找到唯一,确定的value。Map集合中获取数据时,只要给出指定的key,就可以取出对应的value。

(1)void clear():删除该Map对象中所有的键值对。

(2)boolean containsKey(Object key):查询Map中是否包含指定key。

(3)boolean containsValue(Object value):查询Map中是否包含一个或多个value。

(4)Set entrySet():返回Map中所包含的键值对所组成的Set集合,每个集合元素都是Map.Entry对象。

(5)Object get(Object obj):返回指定key所对应的value。如果没有,这返回null。

(6)boolean isEmpty():查询该Map是否为空,如果为空则返回true。

(7)Set keySet():返回该Map中所有key组成的Set集合。

(8)Object put(Object key, Object value):添加一个键值对,如果当前Map中已经有一个与该key相等的键值对,则新的键值对将覆盖原来的键值对。

(9)void putAll(Map m):将指定Map中的键值对复制到m中。

(10)Object remove(Object key):删除指定key所对应的键值对,如果不存在,则返回null。

(11)int size():返回Map里的键值对个数。

(12)Collection values():返回该Map里所有的vlaue组成的Collection。

LinkedHashMap类:

LinkedHashMap和LinkedHashSet一样,也是使用双向链表来维持键值对的顺序,该链表定义了迭代顺序,该迭代顺序与键值对的插入顺序保持一致。

LinkedHashMap需要维护元素的插入顺序,因此性能略低于HashMap的性能,但在迭代方法Map集合的全部元素时将有很好的性能,因为它以链表来维护内部顺序。

遍历方式一:
通过键找值:
获取所有键的集合,然后遍历键的集合,获取到每一个键,接着根据键找值

Map<String, String> map=new HashMap<>();
		map.put("bb", "13");
		map.put("aa", "12");
		map.put("cc", "14");
		map.put("dd", "15");
		Set<String> st = map.keySet();
		for (String set : st) {
			System.out.println("键"+set+"   值"+map.get(set));
		}

遍历方式二:
直接获取键值对对象:
获取所有的键值对对象的集合,遍历键值对对象的集合,获取到值。

Map<String, String> map=new HashMap<>();
		map.put("bb", "13");
		map.put("aa", "12");
		map.put("cc", "14");
		map.put("dd", "15");
		Set<Entry<String, String>> set2 = map.entrySet();
		for (Entry<String, String> entry : set2) {
			System.out.println("键"+entry.getKey()+"   值"+entry.getValue());
		}

删除功能
remove(Object key):根据键删除键值对元素

Map<String, String> map=new HashMap<>();
		map.put("bb", "13");
		map.put("aa", "12");
		map.put("cc", "14");
		map.put("dd", "15");
	    System.out.println(map.toString());
	    String st=map.remove("bb");
	    System.out.println(st);
	    System.out.println(map.toString());

HashMap 键的数据结构是哈希表 保证键唯一,键无序

LinkedHashMap 键的数据结构链表和哈希表。链表保证了键有序,哈希表保证了键唯一

示例一:

import java.util.LinkedHashMap;

public class lizi1 {
    public static void main(String[] args) {
        LinkedHashMap<Integer, String> hm = new LinkedHashMap<>();
        hm.put(100, "aaa");//重复
        hm.put(100, "aaa2222");//键值重复
        hm.put(200, "bbb");
        hm.put(300, "ccc");
        hm.put(400, "ddd");
        System.out.println(hm);
    }
  
}

运行结果:

{100=aaa2222, 200=bbb, 300=ccc, 400=ddd}

Process finished with exit code 0
TreeMap:

键的数据结构是红黑树, 可保证键的排序和唯一性,排序分为自然排序和比较器排序,线程是不安全但是效率比较高。

  • 空参构造:就使用的自然排序。

  • 自然排序:他对键的要求是,要求键实现Comparable接口,重写 compareTo方法,根据此方法的返回值的正负0 来决定键的排列顺序

  • Integer 默认实现了Comparable接口

示例:

import java.util.LinkedHashMap;
import java.util.TreeMap;

public class lizi1 {
    public static void main(String[] args) {
        TreeMap<Integer, String> treeMap = new TreeMap<>();
        treeMap.put(10,"aaa");
        treeMap.put(5, "aaa");
        treeMap.put(1, "aaa");
        treeMap.put(63, "aaa");
        treeMap.put(10, "aaa");
        treeMap.put(19, "aaa");

        System.out.println(treeMap);
    }
}

运行结果:

自动去重并且从大到小排好序了

{1=aaa, 5=aaa, 10=aaa, 19=aaa, 63=aaa}

Process finished with exit code 0
  • HashMap 并允许 null值和 null关键。线程不安全效率高

  • Hashtable 不允许存储null值和null键 线程安全效率低

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值