代码图理解复杂代码

类图

1.抽象动物类Animal

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Demo2
  7. {
  8. public abstract class Animal
  9. {
  10. protected string name;
  11. public string Name
  12. {
  13. get
  14. {
  15. return name;
  16. }
  17. set
  18. {
  19. name = value;
  20. }
  21. }
  22. public Animal()
  23. {
  24. name = "The animal with no name";
  25. }
  26. public Animal(string newName)
  27. {
  28. name = newName;
  29. }
  30. public void Feed()
  31. {
  32. Console.WriteLine("{0} has been fed.",name);
  33. }
  34. }
  35. }

2.牛类Cow

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Demo2
  7. {
  8. public class Cow:Animal
  9. {
  10. public void Milk()
  11. {
  12. Console.WriteLine("{0} has been milked.",name);
  13. }
  14. public Cow(string newName):base(newName) // 继承了父类
  15. {
  16. }
  17. }
  18. }

3.鸡类Chicken

  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. using System.Threading.Tasks;
  6. namespace Demo2
  7. {
  8. public class Chicken:Animal
  9. {
  10. public void LayEgg()
  11. {
  12. Console.WriteLine("{0} has laid an egg.",name);
  13. }
  14. public Chicken(string newName) :base(newName)
  15. {
  16. }
  17. }
  18. }

4.主类Program,用到了数组和集合Array,ArrayList

  1. using System;
  2. using System.Collections; // 集合
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Demo2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. // 数组的形式
  14. Console.WriteLine("Create an array type collection of Animal objects and use it:");
  15. Animal[] animalArray = new Animal[2];
  16. Cow myCow1 = new Cow("Deirdre");
  17. Chicken myChicken1 = new Chicken("Ken");
  18. animalArray[0] = myCow1;
  19. animalArray[1] = myChicken1;
  20. foreach (Animal myAnimal in animalArray)
  21. {
  22. Console.WriteLine("New {0} object added to Array collection,Name = {1}", myAnimal.ToString(),myAnimal.Name);
  23. }
  24. Console.WriteLine("Array collection contains {0} objects.",animalArray.Length);
  25. animalArray[0].Feed();
  26. ((Chicken)animalArray[1]).LayEgg();
  27. // 集合的形式
  28. Console.WriteLine("Create an ArrayList type collection of Animal objects and use it:");
  29. ArrayList animalArrayList = new ArrayList();
  30. Cow myCow2 = new Cow("Hayley");
  31. animalArrayList.Add(myCow2);
  32. animalArrayList.Add(new Chicken("Roy"));
  33. foreach (Animal myAnimal in animalArrayList)
  34. {
  35. Console.WriteLine("New {0} object added to ArrayList collection,Name = {1}", myAnimal.ToString(), myAnimal.Name);
  36. }
  37. Console.WriteLine("Array collection contains {0} objects.", animalArrayList.Count); // 注意这里是Count
  38. ((Animal)animalArrayList[0]).Feed();
  39. ((Chicken)animalArrayList[1]).LayEgg();
  40. Console.ReadKey();
  41. }
  42. }
  43. }

两种效果差不多,细节略有区别!

再看下面,改造

定义Animals类,不需要通过ArrayList了。Animals就是ArrayList。

Animals.cs

  1. using System;
  2. using System.Collections; // 集合
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Demo2
  8. {
  9. public class Animals : CollectionBase
  10. {
  11. public void Add(Animal newAnimal)
  12. {
  13. List.Add(newAnimal);
  14. }
  15. public void Remove(Animal newAnimal)
  16. {
  17. List.Remove(newAnimal);
  18. }
  19. public Animal this[int animalIndex]
  20. {
  21. get
  22. {
  23. return (Animal)List[animalIndex];
  24. }
  25. set
  26. {
  27. List[animalIndex] = value;
  28. }
  29. }
  30. }
  31. }

使用Animals

  1. using System;
  2. using System.Collections; // 集合
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. namespace Demo2
  8. {
  9. class Program
  10. {
  11. static void Main(string[] args)
  12. {
  13. Animals animalCollection = new Animals();
  14. animalCollection.Add(new Cow("Jack"));
  15. animalCollection.Add(new Chicken("Vera"));
  16. foreach(Animal myAnimal in animalCollection)
  17. {
  18. myAnimal.Feed();
  19. }
  20. Console.ReadKey();
  21. }
  22. }
  23. }

Array可以包涵基本类型和对象类型,ArrayList只能包涵对象类型。

Array大小是固定的,ArrayList的大小是动态变化的。

ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等。

对于基本数据类型,集合使用自动装箱来减少编码的工作量。但是当处理固定大小的基本数据类型的时候这种方式相对比较慢。

方法论:

实践加理论!多查查相关的资料,总结一下!

Array与ArrayList的更多相关文章

  1. C#中数组Array、ArrayList、泛型List<T>的比较

    在C#中数组Array,ArrayList,泛型List都能够存储一组对象,但是在开发中根本不知道用哪个性能最高,下面我们慢慢分析分析. 一.数组Array 数组是一个存储相同类型元素的固定大小的顺序 ...

  2. Array和ArrayList互相转换

    class Order{ public string orderId; public string orderName; public decimal orderPrice; } public cla ...

  3. Array和ArrayList的异同点【转】

    相信数组是大家在编程最常使用的,不论任何语言都存在数组这样的数据结构,由于C#语言是完全面向对象的,所以在C#中的数组也是对象,实际上就是Array类的实例,Array类的使用可以说是使用最频繁的,只 ...

  4. Array和ArrayList的区别与联系

    博主今天去了一个java的实习面试,发现有好多java最基础的数据结构对于博主来说反而感到陌生,在面试官问一些常见的例如HashMap这样的数据结构,博主能回答的头头是道,但是在问到Array和Arr ...

  5. Array和ArrayList的异同点

    Array和ArrayList的异同点 1.不同点: (1)Array只能存储同构的对象, ArrayList可以存储异构的对象 (2)在CLR托管对中的存放方式中,Array是始终是连续存放的, A ...

  6. C# array与arraylist区别及获取sql字段名

    array与arraylist的区别: 1.  Array 的容量是固定的,而 ArrayList 的容量是根据需要自动扩展的.如果更改了 ArrayList.Capacity 属性的值,则自动进行内 ...

  7. Array和ArrayList有什么区别?

    Array和ArrayList的区别: 1.Array可以包含基本数据类型和对象类型,而ArrayList只能包含对象类型 2.Array有固定的大小,而ArrayList是动态变化的. 3.Arra ...

  8. C#数组之 []、List、Array、ArrayList应用

    using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.We ...

  9. C#中[] 、List、Array、ArrayList等数据结构的差异简述

    [] 是针对特定类型.固定长度的. List 是针对特定类型.任意长度的. Array 是针对任意类型.固定长度的. ArrayList 是针对任意类型.任意长度的. Array 和 ArrayLis ...

  10. Java面试题之Array和ArrayList的区别

    Array和ArrayList的区别: 1.Array类型的变量在声明的同时必须进行实例化(至少得初花数组的大小),而ArrayList可以只是先声明: 2.Array始终是连续存放的:而ArrayL ...

随机推荐

  1. MySql-Error: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES)

    MySql-Error: ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 标签( ...

  2. BZOJ 1391 网络流

    vis[0]没有清零查一年- //By SiriusRen #include <cstdio> #include <cstring> #include <algorith ...

  3. 监控rman备份

    1.服务会话关联通道设置 set COMMAND ID 命令 2.查询V$PROCESS和V$SESSION 决定会话对应的RMAN的通道 3.查询V$session_LONGGOPS监控备份集和复制 ...

  4. GoldenGate 性能优化方法

    从根本上讲,OGG复制性能和要复制的表是否存在主键和唯一索引有很大关系,所以从应用系统开发商对表结构的规范更为有效.OGG调优通常采用拆分进行的方式,拆分方法如下所述. Extract拆分方法 1)  ...

  5. BZOJ 3637: Query on a tree VI LCT_维护子树信息_点权转边权_好题

    非常喜欢这道题. 点权转边权,这样每次在切断一个点的所有儿子的时候只断掉一条边即可. Code: #include <cstring> #include <cstdio> #i ...

  6. vue的鼠标移入和移出

    vue的鼠标移入和移出 需求(鼠标到预约二维码显示,预约添加背景色) 实现 <!--html部分--> <ul class="person_list"> / ...

  7. iOS——扬声器与听筒的切换

    1.扬声器模式:  NSError *error; [[AVAudioSession sharedInstance] overrideOutputAudioPort:AVAudioSessionPor ...

  8. ES6学习5 字符串的扩展

    1.ES6 为字符串添加了遍历器接口,使得字符串可以被for...of循环遍历. for (let codePoint of 'foo') { console.log(codePoint) } // ...

  9. [POI2008]POD-Subdivision of Kingdom(搜索+状压)

    题意 给定一个n个点的无向图,要求将点集分成大小相等的两个子集,使两个子集之间的边数最少 (n<=26) 题解 一开始想了半天DP发现不会,去看题解全是搜索. 所以发现C(1326)可以过我就写 ...

  10. vue滚动行为

    有人问道如何记录vue页面的滚动条位置,再次载入组件的时候页面滚动到记录的位置? 思路: 记录滚动条位置我们好记 我们要在组件销毁之前也就是页面跳转的时候 需要用到生命周期beforeDistory将 ...