java map(为什么java中声明多用Map,List而不是具体实现类型)
本文目录
- 为什么java中声明多用Map,List而不是具体实现类型
- 今天看项目,看到别人在java中使用pair,这和map有啥区别呢
- java中map和list的区别
- JAVA中几种集合(List、Set和Map)的区别
- java中map与set的区别是什么
为什么java中声明多用Map,List而不是具体实现类型
设计模式应该是 适配器 模式吧。
至于为什么用Map实现,个人理解,是为了利用Map的Key不能重复, 来实现 Set的值不重复。
可以看到HashSet的add方法利用的HashMap的put方法,只不过是把值当做了 HashMap中的Key
而put的Value直接定义了一个空对象
今天看项目,看到别人在java中使用pair,这和map有啥区别呢
pair顾名思义 配对。就像你的身份证和代表你本人一样。k v结构,与map类似。不过map的语意,代表了key只是访问value的索引,实际key意义不大。且不能通过value 索引key.而pair不是,它强调的是key 跟value的唯一映射,数据结构上抽象成letf right,可以互相索引。这就意味着k v都是存在实际意义。一般使用场景,比如游戏场景,有充值点卡。那么生成卡号和卡密就可以放在pair中,好像还有一个Thrip还是啥,提供三个值映射的数据结构,它是pair的升级版本,有left middle right。可以看看,另外guava的BiMap也提供了类似的操作,通过reverse可以控制反转数据,由value也能获取到key。
java中map和list的区别
1、Java中的集合包括三大类,它们是Set、List和Map,它们都处于java.util包中,Set、List和Map都是接口,它们有各自的实现类。Set的实现类主要有HashSet和TreeSet,List的实现类主要有ArrayList,Map的实现类主要有HashMap和TreeMap。
2、List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,如通过list.get(i)方式来获得List集合中的元素。List是有序的Collection,使用此接口能够精确的控制每个元素插入的位置。用户能够使用索引(元素在List中的位置,类似于数组下标)来访问List中的元素,这类似于Java的数组。List允许有相同的元素。实现List接口的常用类有LinkedList,ArrayList,Vector和Stack。
3、Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。Map提供key到value的映射。一个Map中不能包含相同的key,每个key只能映射一个value。Map接口提供3种集合的视图,Map的内容可以被当作一组key集合,一组value集合,或者一组key-value映射。
JAVA中几种集合(List、Set和Map)的区别
Java中的集合包括三大类,它们是Set、List和Map。它们都处于
java.util
包中,Set、List和Map都是接口。Set中的对象不按特定方式排序,并且没有重复对象。但它的有些实现类能对集合中的对象按特定方式排序,例如TreeSet类,它可以按照默认排序,也可以通过实现java.util.Comparator
接口来自定义排序方式。List中的对象按照索引位置排序,可以有重复对象,允许按照对象在集合中的索引位置检索对象,如通过list.get(i)方式来获得List集合中的元素。Map中的每一个元素包含一个键对象和值对象,它们成对出现。键对象不能重复,值对象可以重复。Map的功能方法 : 方法put(Object key, Object value)添加一个“值”(想要得东西)和与“值”相关联的“键”(key)(使用它来查找)。方法get(Object key)返回与给定“键”相关联的“值”。可以用containsKey()和containsValue()测试Map中是否包含某个“键”或“值”。标准的Java类库中包含了几种不同的Map:HashMap, TreeMap, LinkedHashMap, WeakHashMap, IdentityHashMap。它们都有同样的基本接口Map,但是行为、效率、排序策略、保存对象的生命周期和判定“键”等价的策略等各不相同。执行效率是Map的一个大问题。看看get()要做哪些事,就会明白为什么在ArrayList中搜索“键”是相当慢的。而这正是HashMap提高速度的地方。HashMap使用了特殊的值,称为“散列码”(hash code),来取代对键的缓慢搜索。“散列码”是“相对唯一”用以代表对象的int值,它是通过将该对象的某些信息进行转换而生成的。所有Java对象都能产生散列码,因为hashCode()是定义在基类Object中的方法。java中map与set的区别是什么
Map与Set的本质区别有:Set不能包含重复的元素,最多有一个空值,继承自Collection接口,底层是Map实现机制。Map不能包含重复的键,每个键最多对应一个映射的值,不能有空值键。两接口提供的方法不完全一样。
更多文章:
![华为畅享20pro屏幕多少钱(华为畅享20pro手机换原装屏多少钱)](/static/images/nopic/20.jpg)
华为畅享20pro屏幕多少钱(华为畅享20pro手机换原装屏多少钱)
2023年8月6日 20:50
![酷派手机主题下载(我的酷派8712手机没有酷秀,只有主题管理,里面也没有在线下载主题的选项,现在的手机主题特别难看,)](/static/images/nopic/25.jpg)
酷派手机主题下载(我的酷派8712手机没有酷秀,只有主题管理,里面也没有在线下载主题的选项,现在的手机主题特别难看,)
2023年2月24日 21:00
![华硕灵耀系列哪款好(2022商务办公本推荐哪一款华硕灵耀系列产品如何)](/static/images/nopic/18.jpg)
华硕灵耀系列哪款好(2022商务办公本推荐哪一款华硕灵耀系列产品如何)
2023年10月31日 12:10
![thinkpad官方系统下载(ThinkPad原装系统在哪里下载)](/static/images/nopic/29.jpg)
thinkpad官方系统下载(ThinkPad原装系统在哪里下载)
2024年6月10日 00:01
![apple watch的功能都有哪些(apple watch有哪些功能)](/static/images/nopic/6.jpg)
apple watch的功能都有哪些(apple watch有哪些功能)
2023年10月5日 21:50
![打印复印一体机家用的哪个比较好(家庭用打印复印一体机哪款好,家用打印机有必要要输稿器吗)](/static/images/nopic/16.jpg)
打印复印一体机家用的哪个比较好(家庭用打印复印一体机哪款好,家用打印机有必要要输稿器吗)
2024年5月28日 16:34
![mt6765v cb(A8搭载八核、64位、主频2.3GHz联发科MT6765V/CB处理器,,打王者荣耀可以吗)](/static/images/nopic/16.jpg)
mt6765v cb(A8搭载八核、64位、主频2.3GHz联发科MT6765V/CB处理器,,打王者荣耀可以吗)
2023年1月8日 20:00
![inferred翻译(inferred annotations available,full signature是什么意思)](/static/images/nopic/20.jpg)
inferred翻译(inferred annotations available,full signature是什么意思)
2023年5月13日 04:00
![manufacturer什么意思(manufacturer是什么意思)](/static/images/nopic/16.jpg)
manufacturer什么意思(manufacturer是什么意思)
2024年5月5日 15:26