【问题标题】:Java List.add() and Map.put() [closed]Java List.add() 和 Map.put() [关闭]
【发布时间】:2018-01-04 13:04:03
【问题描述】:

ListsMaps一起工作,我开始思考,为什么添加Object的Map方法被称为put而List是add

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

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

【问题讨论】:

  • 区分
  • 这就是他们设计语言的方式。
  • add() 可以看出您将其添加到某物的末尾,而使用put() 您将值放在键所在的位置(这不是真正的实现)跨度>
  • Map.putList.add 做非常不同的事情。说他们实际上以相同的方式行事是完全不正确的。
  • @UnholySheep 而Set中的add方法什么也做不了。

标签: java add put difference


【解决方案1】:

我认为如果您进入词源学,我们只能猜测,因为当您将值放入列表时,您总是会增加列表长度,但是如果您将值放入映射中,则不需要增加映射条目的数量(如果密钥已经存在)

【讨论】:

    【解决方案2】:

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

    可以这样说是为了得到一个清晰的理解。 由于 java 是人类可以理解的第三级语言,因此也可以将其表述为简单的英语以便更好地理解。

    【讨论】:

    • List是接口,ArrayList是使用数组的接口
    【解决方案3】:

    区别在于:

    1. .add() 表示在末尾或任何你想要的地方插入一些东西(你知道在哪里添加)而
    2. .put() 表示在需要放置的地方添加一个元素,不一定在Map的末尾,因为这完全取决于要插入的Key(你不知道在哪里添加)。

    【讨论】:

    • 技术上不正确。 add 不限于列表末尾。
    • 当然,这取决于参数,你可以在开头或任何你想要的地方添加,但是,你不知道实际插入的位置。感谢@Tezra 的留言!
    【解决方案4】:

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

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

    【讨论】:

      【解决方案5】:

      为此,您应该阅读addput 的Java 文档。

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

      来自文档

      PUT

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

      添加

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

      【讨论】:

        【解决方案6】:

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

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

        因此操作是不同的。在某种程度上,API 的作者必须做出平衡各种担忧的决定。添加到集合具有添加到列表和放入地图的某些方面,因为添加“相等”条目没有任何效果。

        【讨论】:

          【解决方案7】:

          List :- 如果我说我正在将一些项目添加到某个容器中,我会说我已经将这些项目添加到了容器中。在这里,我们更专注于将新项目添加到现有 容器List(在 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); 的内容,您不必担心在内部添加和更新数据。

          【讨论】:

          • 你的例子有茶、糖和List,更提醒我一张地图,每次更新的糖量在key(cup)中
          猜你喜欢
          • 2011-08-10
          • 1970-01-01
          • 1970-01-01
          • 2016-01-14
          • 2018-02-06
          • 1970-01-01
          • 2011-08-14
          • 1970-01-01
          相关资源
          最近更新 更多