支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项

Posted

技术标签:

【中文标题】支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项【英文标题】:C# equivalent for java arraylist supporting get, set and remove certain Index 【发布时间】:2012-09-02 18:50:57 【问题描述】:

我是一名 Java 程序员,我以前使用过 Java ArrayList,现在我想在 C# 中使用类似的东西。我需要的一些选项在这个 Java 代码中:

String[] strs = new String[]"str1" , "str2" , "str3" , "str4";
ArrayList arrayList = new ArrayList(35);
arrayList.add(strs[0]);
arrayList.add(strs[1]);
arrayList.remove(0);
arrayList.set(0, strs[2]);
String s = (String) arrayList.get(1);

我使用了 C# ArrayListLinkedList,但它们没有我需要的这些简单选项。 C# 中是否有另一个选项支持使用索引访问对象、插入和删除某个索引?

【问题讨论】:

使用List<T>,List[index]List.RemoveAt 哇,这令人困惑;现在通常将 List 视为 Linked List 的简写,而不是连续的集合。 【参考方案1】:

使用List <T>

 String[] strs = new String[]"str1" , "str2" , "str3" , "str4";
 List<string> stringList = new List<string>();
 stringList.add(strs[0]);
 stringList.add(strs[1]);
 stringList.RemoveAt(indexYouWantToDelete)     
 String s = stringList[0];

c# 中的 ArrayLists 来自前通用时代。从 C# 2.0 开始,我们就有了泛型集合,List &lt;T&gt; 就是其中的一个例子。正如对此答案的评论所说,如果您使用 ArrayList,则必须将放入 ArrayList 的元素装箱(到Object,因为这是 ArrayList 唯一作为输入的东西)。如果您想在那之后访问它们,则必须明确地将它们拆箱,就像您在问题中所做的那样。 ( --> String s = (String) arrayList.get(1); )

使用泛型集合(如List &lt;T&gt;),不再需要装箱,因为编译器知道列表将包含什么数据类型。在这种情况下,字符串。 您还可以使用List&lt;int&gt;List&lt;char&gt;List&lt;whatever&gt;,并且可以对它们使用相同的索引功能。

【讨论】:

值得指出的是,推荐使用ArrayList,因为它是非通用的并且会导致装箱。 谢谢!首先我认为 LinkedList 比纯 List 更高级,我没有注意到这一点。 OK... 我理解通用数据类型是从 C 继承而来的,相当于 C 和 C++ 中的模板。但是非泛型数据类型的行为类似于对象并且需要类型转换。谢谢! 以下是 C# 和 java 泛型以及 C 模板之间的区别:***.com/a/31929/284240。【参考方案2】:

使用List&lt;T&gt; ...................................

其中有AddRemoveRemoveAt 索引器,如list[i] 等。

【讨论】:

以上是关于支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项的主要内容,如果未能解决你的问题,请参考以下文章

使用sort加个简单的算法,不循环整个数组而删除数组内的某些元素。

为 2 个数组获取相同的随机索引

如何设置 Automator 从文件夹中删除某些文件类型

ElasticSearch Java Api-5.x删除和更新索引数据

ElasticSearch核心概念和文档的CRUD

每天一道java面试题