Map和Set
1. Map(字典)
Map 对象保存键值对,并且能够记住键的原始插入顺序。任何值(对象或者原始值)都可以作为一个键或一个值。
说明:Map是一个接口类,该类没有继承自Collection,该类中存储的是<K,V>结构的键值对,并且K一定是唯一的不 能重复。
注意:
- Map是一个接口,不能直接实例化对象,如果要实例化对象只能实例化其实现类TreeMap或者HashMap。
- Map中存放键值对的Key是唯一的,value是可以重复的
- 在TreeMap中插入键值对时,key不能为空,否则就会抛NullPointerException异常,value可以为空。但 是HashMap的key和value都可以为空。
- Map中的Key可以全部分离出来,存储到Set中来进行访问(因为Key不能重复)。
- Map中的value可以全部分离出来,存储在Collection的任何一个子集合中(value可能有重复)。
- Map中键值对的Key不能直接修改,value可以修改,如果要修改key,只能先将该key删除掉,然后再来进行重新插入。
1.1 Map底层结构
HashMap:基于哈希表实现。
TreeMap:基于红黑树实现,红黑树的本质就是一棵二叉查找树.
Map<Character,Integer> hashMap = new HashMap<>();
Map<Character,Integer> treeMap = new TreeMap<>();
2.Set(集合)
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
简而言之,Set和Map类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在Set中,没有重复的key。
注意:
- Set是继承自Collection的一个接口类
- Set中只存储了key,并且要求key一定要唯一
- TreeSet的底层是使用Map来实现的,其使用key与Object的一个默认对象作为键值对插入到Map中的
- Set最大的功能就是对集合中的元素进行去重
- 实现Set接口的常用类有TreeSet和HashSet,还有一个LinkedHashSet,LinkedHashSet是在HashSet的基础 上维护了一个双向链表来记录元素的插入次序。
- Set中的Key不能修改,如果要修改,先将原来的删除掉,然后再重新插入
- TreeSet中不能插入null的key,HashSet可以。
2.1 Set底层结构
3.Map和Set区别
除了Set是继承自Collection的接口类,Set中只存储了Key,我们这里为大家总结一下它们的其他区别要点:
- Map和Set查找速度都非常快,时间复杂度为O(1),而数组查找的时间复杂度为O(n)。
- Map对象初始化的值为一个二维数组,Set对象初始化的值为一维数组。
- Map对象和Set对象都不允许键重复(可以将Set对象的键想象成值)。
- Map对象的键是不能改的,但是值能改,Set对象只能通过迭代器来更改值
在下小吉.: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,期待博主持续带来更多好文
阿熊不会编程: 优质好文,博主的文章细节很到位,兼顾实用性和可操作性,感谢博主的分享,文章思路清晰,图文并茂,详略得当,三连支持,期待博主持续输出好文!!!
愚润求学: 感谢博主分享,期待博主下一篇优质好文