2010-11-23 77 views
2

我打算设计一个数据结构,包括元素,因为这,问题上的数据结构设计

{1, 13, 15, 113, 117, 145} 
{2, 23, 27} 
{5, 53, 55, 511, 519} 
{9, 11} 

我有两个想法至今。

1st。建立一个词典(键,值);

When Key = 1, Value = ArrayList(13, 15, 113, 117, 145) 
When Key = 2, Value = ArrayList(23, 27) 
When Key = 5, Value = ArrayList(53, 55, 511, 519) 
When Key = 9, Value = ArrayList(11) 

2nd。建立一个ArrayList(SubArrayLists)

subArrayList1 {1, 13, 15, 113, 117, 145} 
subArrayList2 {2, 23, 27} 
subArrayList3 {5, 53, 55, 511, 519} 
subArrayList4 {9, 11} 

我打算在运行时访问元素。哪种解决方案更好?

感谢您的意见。

[更新]
1. int号码上面列出可以代表一些对象。如字典对象等
2.启动应用程序后,所有数据将被加载到内存中。然后阅读只允许。不需要写/添加/删除等。

+2

`ArrayList`已经过时,即使在.NET 2.0中(我认为这是C#2.0编译器的目标?)。这里的重要问题是:如何查询这个数据结构,以及在初始化后如何进行变异? – Ani 2010-11-23 06:32:31

+1

你不想使用`List `而不是`ArrayList`的任何原因? – 2010-11-23 06:32:58

回答

2

这取决于哪些对您更重要,读取速度更快还是写速度更快?一个字典可以非常快速地访问存储的值,但同时向字典添加值需要更长的时间。

如果你有很多需要被访问过无数次的值,那么字典是要走的路,如果你发现自己通过价值内的另一个for循环示例列表循环:

foreach(var item in ListA) 
{ 
    foreach(var item in ListB) 
    { 
    // Match against all values in list B   

    } 
} 

在上面的例子中,如果ListB是一个字典而不是一个列表,那么最好是因为您在ListA的每次迭代中遍历列表。随着ListB中元素的数量增加,上述代码的执行时间会增加,但是如果它是一个字典,它不会有太大的区别。

2

如果你打算做随机访问,那么Dictionary将是一个不错的选择。但请记住,您需要具有唯一的键(因为每个列表的第一个元素是每个列表的第一个元素,因此每个列表的键的第一个元素应该是唯一的)

如果您要按顺序访问数据结构的元素ArrayList更好