Java List.add() 和 Map.put()

Java List.add() and Map.put()

使用 ListsMaps,我开始思考,为什么添加 Object 的 Map 方法被调用 put 而 List 呢是 add?

这只是开发人员的意愿,或者这些方法的命名有所不同。

可能是方法名称让开发人员在添加到 Map/List 时知道他正在使用哪种数据结构? 或者这些名称描述了它们的工作方式?

我想如果你了解词源学,我们只能猜测,因为当你将一个值放入列表时,你总是会增加列表的长度,但是如果你将值放入映射中,则不必增加列表的数量映射条目(如果键已经存在)

对我来说,这是有原因的。 毕竟,List 是一个动态数组,它内部包含一个我们要添加的逻辑索引。 并且 map 内部携带了一桶键值对。所以我们正在把一些东西放进桶里。

之所以这么说,是为了让大家明白。 由于 java 是人类可理解的第三级语言,因此也可以将其表述为简单的英语以便更好地理解。

区别是:

  1. .add() 表示在末尾或任何你想插入的地方(你知道在哪里添加)而
  2. .put()的意思是在需要放的地方添加元素,不一定在Map的末尾,因为这全看要插入的Key(你不知道往哪里添加) .

Collection#add() 可以看出你将你的值添加到某个池中(Collection<E> 的实现定义了 pool 实际上是什么)。

而对于 Map#put(),您将您的值与可能已经具有关联值的键相关联。

为此,您应该阅读 add and put 的 Java 文档。

它们是 2 个不同的函数,接受完全不兼容的输入,return 完全不兼容的值。它们是 2 个完全独立且截然不同的函数,它们的行为完全不同(除了它们都是用于向集合添加元素(概念,而不是接口。因为 map 不实现该接口))。

来自文档

PUT

将指定值与此映射中的指定键相关联(可选操作)。如果映射先前包含键的映射,则旧值将替换为指定值。 (当且仅当 m.containsKey(k) 将 return 为真时,映射 m 被称为包含键 k 的映射。)

添加

将指定的元素附加到此列表的末尾(可选操作)。 支持此操作的列表可能会限制可以添加到此列表的元素。特别是,一些列表会拒绝添加空元素,而另一些列表会对可能添加的元素类型施加限制。列表 类 应在其文档中明确说明对可以添加的元素的任何限制。

添加将始终在列表末尾添加一个条目。

如果键不存在,Put 会在映射中插入一个条目;如果键已经存在,则更新值。

因此操作不同。在某种程度上,API 的作者必须做出平衡各种顾虑的决定。添加到集合具有添加到列表和放入地图的某些方面,因为添加 "equal" 条目没有效果。

列表:- 如果我说我正在向某个容器中添加一些项目,我会说我已经将这些项目添加到 container.Here 我们更专注于新项目对现有 容器列表(在java)。

地图 :- 如果我想把一些东西放到一些 locker 或我的电脑上,而我的电脑已经有了我不关心的东西,我只需要放而不是添加。 这里我们专注于向储物柜或 Map(在 java 中)添加新数据,而不管是否存在。

实时示例:- 你在茶中加糖,记住已经加糖的量 their.you 把你的衣服送到服装店,看看他们是否有衣服。

在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); 你不必担心在内部添加和更新数据。