支持获取、设置和删除某些索引的 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# ArrayList
和 LinkedList
,但它们没有我需要的这些简单选项。 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 <T>
就是其中的一个例子。正如对此答案的评论所说,如果您使用 ArrayList,则必须将放入 ArrayList 的元素装箱(到Object
,因为这是 ArrayList 唯一作为输入的东西)。如果您想在那之后访问它们,则必须明确地将它们拆箱,就像您在问题中所做的那样。 ( --> String s = (String) arrayList.get(1);
)
使用泛型集合(如List <T>
),不再需要装箱,因为编译器知道列表将包含什么数据类型。在这种情况下,字符串。
您还可以使用List<int>
、List<char>
或List<whatever>
,并且可以对它们使用相同的索引功能。
【讨论】:
值得指出的是,不推荐使用ArrayList
,因为它是非通用的并且会导致装箱。
谢谢!首先我认为 LinkedList 比纯 List 更高级,我没有注意到这一点。
OK... 我理解通用数据类型是从 C 继承而来的,相当于 C 和 C++ 中的模板。但是非泛型数据类型的行为类似于对象并且需要类型转换。谢谢!
以下是 C# 和 java 泛型以及 C 模板之间的区别:***.com/a/31929/284240。【参考方案2】:
使用List<T>
...................................
其中有Add
Remove
、RemoveAt
索引器,如list[i]
等。
【讨论】:
以上是关于支持获取、设置和删除某些索引的 java arraylist 的 C# 等效项的主要内容,如果未能解决你的问题,请参考以下文章
使用sort加个简单的算法,不循环整个数组而删除数组内的某些元素。