Java List.add() 和 Map.put()
Java List.add() and Map.put()
使用 Lists
和 Maps
,我开始思考,为什么添加 Object
的 Map 方法被调用 put 而 List 呢是 add
?
这只是开发人员的意愿,或者这些方法的命名有所不同。
可能是方法名称让开发人员在添加到 Map
/List
时知道他正在使用哪种数据结构?
或者这些名称描述了它们的工作方式?
我想如果你了解词源学,我们只能猜测,因为当你将一个值放入列表时,你总是会增加列表的长度,但是如果你将值放入映射中,则不必增加列表的数量映射条目(如果键已经存在)
对我来说,这是有原因的。
毕竟,List 是一个动态数组,它内部包含一个我们要添加的逻辑索引。
并且 map 内部携带了一桶键值对。所以我们正在把一些东西放进桶里。
之所以这么说,是为了让大家明白。
由于 java 是人类可理解的第三级语言,因此也可以将其表述为简单的英语以便更好地理解。
区别是:
- .add() 表示在末尾或任何你想插入的地方(你知道在哪里添加)而
- .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);
你不必担心在内部添加和更新数据。
使用 Lists
和 Maps
,我开始思考,为什么添加 Object
的 Map 方法被调用 put 而 List 呢是 add
?
这只是开发人员的意愿,或者这些方法的命名有所不同。
可能是方法名称让开发人员在添加到 Map
/List
时知道他正在使用哪种数据结构?
或者这些名称描述了它们的工作方式?
我想如果你了解词源学,我们只能猜测,因为当你将一个值放入列表时,你总是会增加列表的长度,但是如果你将值放入映射中,则不必增加列表的数量映射条目(如果键已经存在)
对我来说,这是有原因的。 毕竟,List 是一个动态数组,它内部包含一个我们要添加的逻辑索引。 并且 map 内部携带了一桶键值对。所以我们正在把一些东西放进桶里。
之所以这么说,是为了让大家明白。 由于 java 是人类可理解的第三级语言,因此也可以将其表述为简单的英语以便更好地理解。
区别是:
- .add() 表示在末尾或任何你想插入的地方(你知道在哪里添加)而
- .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);
你不必担心在内部添加和更新数据。