用ArrayList来实现一个销售类,要求如下:
1.ArrayList记录的内容有:  
产品编码,产品名称,数量,单价,小计
1001   橡皮擦  2    1.50    3.00
1002   笔记本  2    15.00   30.00
1003   钢笔    1    25.00   25.00
1003   铅笔    3    0.50    3.002.输入单:用ArrayList的添加方法增加新的记录
加一笔
1001   橡皮擦  2    1.50    3.00
1002   笔记本  2    15.00   30.00
1003   钢笔    1    25.00   25.00
1003   铅笔    3    0.50    3.00
1004   贴纸    2    1.00    2.00
3.删除其中一笔记录:用ArrayList的remove方法取消一笔
加一笔
1001   橡皮擦  2    1.50    3.00
1002   笔记本  2    15.00   30.00
1003   铅笔    3    0.50    3.00
1004   贴纸    2    1.00    2.004.然后加两个方法:getList()显示该帐下所有记录
返回所有记录
1001   橡皮擦  2    1.50    3.00
1002   笔记本  2    15.00   30.00
1003   铅笔    3    0.50    3.00
1004   贴纸    2    1.00    2.00
请大家把好的代码贴出来吧!!!

解决方案 »

  1.   

    定义一个产品类,该类的实例保存在ArrayList中
      

  2.   

    可以参考一下以下:
    http://community.csdn.net/Expert/topic/4647/4647029.xml?temp=.5169031
      

  3.   

    如果你是使用 .net 2.0 开发新的代码,应该毅然决然地抛弃arrayList。因为arraylist中操作的是 object 类型的对象,而不是强类型的,这会平均必强类的范型集合类速度慢 300 倍以上,可以google一下相关测试数据。而且,尽量不使用弱类型,也是.net2.0以上所能够支持的更好的设计手段。
      

  4.   

    使用强类型最主要的目的不是提高效率,而是本来根据类型能够判断出的bug在运行时才发现。
      

  5.   

    而是本来根据类型能够判断出的bug  -->  而是避免本来根据类型能够判断出的bug
      

  6.   

    楼上说的很好,如果你是使用 .net 2.0 开发新的代码,建议使用强类型List<T>类,该类与ArrayLis很类似,但<T>是强类型的。如List<String>,说明集合的元素必须是String类型。
    如veryhappy(wx.net) 所说的产品类Product,可以定义为List<Product>
      

  7.   

    谢谢上面的各位,但是,怎么用List呢?
    1001   橡皮擦  2    1.50    3.00
    1002   笔记本  2    15.00   30.00
    1003   铅笔    3    0.50    3.00
    1004   贴纸    2    1.00    2.00怎么把上面的数据存到List里?添加或删除某一条记录方便吗?
      

  8.   

    但是,怎么用List呢?
    ————————————————————————————————————————
     shuiboit(水波) ( ) 信誉:100  2006-04-08 22:04:00  得分: 0  
     
     
       楼上说的很好,如果你是使用 .net 2.0 开发新的代码,建议使用强类型List<T>类,该类与ArrayLis很类似,但<T>是强类型的。如List<String>,说明集合的元素必须是String类型。
    如veryhappy(wx.net) 所说的产品类Product,可以定义为List<Product>
     
     
      

  9.   

    如veryhappy(wx.net) 所说的产品类Product,可以定义为List<Product>是不是一个实体类数组?
    能否详细说明,怎么实现
      

  10.   

    要么定义一个结构,要么用DataRow,结果可以放到arraylist中,datarow也可以放进去,但用table可能更方便。
      

  11.   

    public class Product
    {
      public string id
      {
       set{}
       get{}
      }
      ......
      ......
    }
    list<Product> Ps=new list<Product>();
    Product p=new Product();
    ps.add(p);
      

  12.   


    误会啦,不是老师出题!
    public class Product
    {
      public string id
      {
       set{}
       get{}
      }
      ......
      ......
    }
    list<Product> Ps=new list<Product>();
    Product p=new Product();
    ps.add(p);
    C#里有  list<Product> Ps=new list<Product>();  这样的语法吗?
    不会出错吗?
    谢谢
      

  13.   

    ArrayList 比 List<T> "平均" 慢 300 倍以上 ?又是哪个 blog 上给出的数据啊.我试过几次 UnitTest, 普通集合的插入, 搜索定位比 Generic Type 慢一点而已.平均慢 300 倍的是什么 BT 集合, 什么 BT 操作 ?
      

  14.   

    在.net 1.1里面可以使用自定义实体集合。using System;
    using System.Collections;namespace SUYUAN.PBJCXT.Collection
    {
    /// <summary>
    /// A_ALERTINFO 的摘要说明。
    /// </summary>
    public class A_ALERTINFO:CollectionBase 
    {
    public A_ALERTINFO()
    {
    //
    // TODO: 在此处添加构造函数逻辑
    //
    }
    public SUYUAN.PBJCXT.Entity.A_ALERTINFO this[int index] 
    {
    get {return (SUYUAN.PBJCXT.Entity.A_ALERTINFO)List[index];}
    set {List[index] = value;}
    }
    public int Add(SUYUAN.PBJCXT.Entity.A_ALERTINFO value) 
    {
    return (List.Add(value));
    }
    public int IndexOf(SUYUAN.PBJCXT.Entity.A_ALERTINFO value) 
    {
    return (List.IndexOf(value));
    }
    public void Insert(int index, SUYUAN.PBJCXT.Entity.A_ALERTINFO value) 
    {
    List.Insert(index, value);
    }
    public void Remove(SUYUAN.PBJCXT.Entity.A_ALERTINFO value) 
    {
    List.Remove(value);
    }
    public bool Contains(SUYUAN.PBJCXT.Entity.A_ALERTINFO value) 
    {
    return (List.Contains(value));
    }
    }
    }
      

  15.   

    用Hasthtable吧,可以快速查询和删除
      

  16.   

    是不是List的数组,存储的数据全部用string?哪数值或boolean或日期怎么办?
      

  17.   

    汗,慢300倍,看来有必要有空研究一下一直都是用ArrayList的。
      

  18.   

    namhyuk(namhyuk) ( ) 信誉:100  2006-4-6 12:25:43  得分: 5  
    VS2005我在CSDN上找了上面这个朋友的代码,大家认为这个例子怎么样?
    public class MyClass
    {
      private string name;
      private int id;
      private int age;
      public string Name
      {
        get { return name; }
        set { name = value; }
      }
      public int ID
      {
        get { return id; }
        set { id = value; }
      }
      public int Age
      {
        get { return age; }
        set { age = value; }
      }
    }MyClass cls;
    List<MyClass> al = new List<MyClass>();for (int i = 0; i < 10; i++)
    {
        cls = new MyClass();
        cls.Name = "a" + i;
        cls.ID = i;
        cls.Age = 20 + i;
        al.Add(cls);
    }BindingSource bs = new BindingSource();
    bs.DataSource = al;dataGridView1.DataSource = al;
      

  19.   

    To:sp1234汗,慢三百倍我刚才试了一下,一些简单的结构只慢3倍。平均300倍是不是太夸张了。不知道这个300倍是从何而来的结果当然,慢确实是慢,以后,我基本上只用List<T>了
      

  20.   

    刚才,又试了一下。如果初始化的时候,构造函数传入最终大小那么,平均而言,List<T>要比ArrayList快10到20倍
      

  21.   

    使用错误的数据结构,再强类型也没用。泛型只不过节省了装箱/拆箱的消耗,但是不能节省查询的消耗啊。
    楼主的产品编码若唯一,就可以用这个编码作为查询ID。其中SortedList(或SortedList<TKey, TValue>)能够保持ID排序,于是就可以用平均O(Log(N))的复杂度进行ID的查询,同时保持排序又便于遍历。这个容器很可能是某种树型数据结构。
    如果不要求排序,仅仅要求按照关键字查询快速,那么Hashtable(或Dictionary<TKey, TValue>)这种散列结构就更快。
    若楼主满足于这种,那么可以用int作为产品编码,然后用一个小结构或类储存其余字段。
    若楼主需要按照所有字段查询,那么需要用非常复杂的数据结构,比如k-d树。当然,对性能要求不高的话,DataTable也是很好的选择。
    只是ArrayList或List<T>,没看出有什么优势
      

  22.   

    测List<T>的性能也要注意,不要只测int,也不要光测Add方法。那样结论太局限了
      

  23.   

    TO :楼上测太多,很麻烦了,难道不是吗?简单测测大概比较一下。如果真的比较索引速度,比较初始化速度,比较add速度,比较remove速度,比较clear速度。如果要测试,浮点,整型,字符,自定义类型这些都测要写多少代码啊?所以简单测测知道大概就行了。还有,当然是比较ArrayList和List<T>了,Hashtable之类,根本不是一回事,怎么能比较?hashtable关键字索引速度是最快的,但是,空间消耗确是最大的,初始化速度也最慢。每次分裂的时候,都需要重新复制一份,当然慢了。没有哪个数据结构是完善的,ArrayList List<T>优点在于节省空间,在于下标索引最快。
      

  24.   

    List<T>的Add, Remove,Item在String, Integer, Double和自定义对象上的性能已经有高手分析过了。结果恐怕不是大家都能轻易想象得到的,你嫌麻烦并不等于结果没有意义。什么快300倍至类无比极端的情形,根本反映不出引入泛型之后真实的性能变化。Hashtable发生再散列的时候总是扩大成相当于2倍,因此平摊到每次插入,时间还是常数的。
    我有说哪个数据结构是完善的了?我有说要比较Hashtable和List<T>了?
    当然测一测也是有好处的,这里结论仍然不是普通人随便想象就能猜出的。
      

  25.   

    TO:Ninputer你说了那么多等于什么都没用说。“这里结论仍然不是普通人随便想象就能猜出的。”那么结论是什么?那么你使用的时候凭什么原则?难道你使用的时候,先说一遍“这里结论仍然不是普通人随便想象就能猜出的。”,然后投一枚硬币,决定使用ArrayList还是List。对于hashtable我说的不是插入的时间,我说的是永久化数据以后,重新恢复hashtable时候,需要的时间,这个时间还是非常惊人的。最后请不要泛泛而谈,我只看数据,要么是你自己测的,要么给个链接,我去学习。我可不想临到用时,来投硬币决定。
      

  26.   

    结论我自己当然是清楚的,List任何操作都比ArrayList快。但是有许多人不知道Add, Remove, Item, RemoveAt这些快慢差距,也不知道Integer, Decimal, String或Object泛型版还能够快多少,而是想象“快300倍”
    我说的“这里结论仍然不是普通人随便想象就能猜出的。”就表示你应该实验,而且要遵循科学精神,别把特例当结论。
    数据是我测的,但是我凭什么要在你这种口气的要求下共享给你?PS. 我知道你说的Hashtable是什么时候慢,而且我刚才恰好解释的就是那个问题。
      

  27.   

    测试程序是我拜托rzpc(淡蓝色)写的
      

  28.   

    还有,hashtable就不要再讨论了,除法你能够解决hashtable的缺点。其他一些特性,讨论也没有多大价值,大家基本都知道。计算机上的算法是平衡的,要么时间换空间,要么空间换时间。hash就是利用空间换取时间最佳泛例。
      

  29.   

    为什么不呢,我最近刚好还测过Dictionary<TKey, TValue>的性能,确实非常不错。
    从4一路自增长到700000(七十万)和设置初始大小为700000相比,只慢了300ms左右,觉得可以接受。
    一直就很佩服.NET Fx这些容器的设计,原来自己写过快速排序,按照现代观点作了很多优化,却仍然只有Array.Sort一半。
      

  30.   

    我略微对Dictionary测过100万的数据预设值和没有预设值,差的不太多。
      

  31.   

    为什么不呢,我最近刚好还测过Dictionary<TKey, TValue>的性能,确实非常不错。
    从4一路自增长到700000(七十万)和设置初始大小为700000相比,只慢了300ms左右,觉得可以接受。
    一直就很佩服.NET Fx这些容器的设计,原来自己写过快速排序,按照现代观点作了很多优化,却仍然只有Array.Sort一半。==================================================.NET应该是用Native代码来执行的,速度当然……
      

  32.   

    还是 Ninputer 有钻研精神啊。