与Lists
和Maps
合作,我开始思考为什么用于添加Object
的Map方法被称为 put ,而对于List,它为{{1} }?
这只是开发人员的意愿,或者说有些东西在命名这些方法不同。
可能是开发人员在添加add
/ Map
时所知道的方法名称是什么类型的数据结构?
或者那些名字描述了他们的工作方式?
答案 0 :(得分:6)
区别在于:
答案 1 :(得分:2)
对我而言,它有一些原因。 毕竟,List是一个动态数组,它在内部包含我们要添加的逻辑索引。 而地图内部带有一桶钥匙和价值对。所以我们正在把一些东西放进桶里。
可以这样说,因为要清楚了解。 由于java是一种人类可理解的第三级语言,因此可以将其简化为简单的英语,以便更好地理解。
答案 2 :(得分:1)
Collection#add()
可以看出您将值添加到某个池中(Collection<E>
的实现定义了池实际上是什么)。
使用Map#put()
,您可以将您的值与可能已经具有相关值的键相关联。
答案 3 :(得分:1)
它们是两个不同的功能,它们采用完全不兼容的输入,并返回完全不兼容的值。它们是两个完全独立且不同的函数,它们的行为完全不同(除了它们都是为了向集合添加元素(概念,而不是接口。因为map没有实现该接口)。)
来自文档
<强> PUT 强>
将指定的值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定的值。 (当且仅当m.containsKey(k)返回true时,地图m才包含密钥k的映射。)
添加强>
将指定的元素追加到此列表的末尾(可选操作)。 支持此操作的列表可能会限制可能添加到此列表的元素。特别是,某些列表将拒绝添加null元素,而其他列表将对可能添加的元素类型施加限制。列表类应在其文档中明确指出可以添加哪些元素的任何限制。
答案 4 :(得分:1)
添加将始终在列表末尾添加一个条目。
如果密钥尚不存在,则会在地图中注入一个条目;如果密钥已存在,则更新该值。
因此操作是不同的。在某种程度上,API的作者必须做出平衡各种问题的决策。添加到一个集合有一些方面添加到列表并放到一个地图,在那里添加一个&#34;等于&#34;进入没有效果。
答案 5 :(得分:1)
列表: - 如果我说我在某些容器中添加了一些物品,请说我已将物品添加到容器中。这里我们更专注于新物品添加到现有的容器或列表(在java中)。
地图: - 如果我想把一些东西放到某些locker
或我的计算机上,而这台计算机已经有了我不关心的东西,我只需要不加。
在这里,我们专注于向锁定器或Map
(在java中)添加新数据,无论现有的是什么。
实时例子: - 你在茶叶中添加糖,记住已经是他们的量。你把衣服放在服装店,不管是否有布料。
在java方面: - 如果你列出的是这样的: -
List<String> list = new ArrayList<String>();
list.add("java");
list.add("php");
list.add("python");
list.add("perl");
list.add("c");
list.add("lisp");
list.add("c#");
并且您希望在列表中添加一些内容,您必须关注现有内容,因为如果它是list
,它将添加重复内容,如果设置则不重复。
如果您创建了地图。
Map<String, Object> foodData = new HashMap<String, Object>();
foodData.put("penguin", 1);
foodData.put("flamingo", 2);
再次添加foodData.put("penguin", 3);
内容,您不必担心内部添加和更新数据。
答案 6 :(得分:0)
我认为如果你进入词源,我们只能猜测,因为当你将一个值放入一个列表时,你总是会增加列表长度,但是如果你把这个值放到一个地图中你就不需要增加地图条目的数量(如果密钥已存在)