C# : 泛型的继承关系实现的一个可以存放不同数据类型的链表

以下定义的是一个链表结点类型:

 1 internal sealed class Node<T>
 2 {
 3     public T m_data;
 4     public Node<T> m_next;
 5 
 6     public Node(T data)
 7         : this(data, null)
 8     { }
 9 
10     public Node(T data, Node<T> next)
11     {
12         m_data = data;
13         m_next = next;
14     }
15 
16     public override string ToString()
17     {
18         return m_data.ToString() +
19             (null != m_next ? m_next.ToString() : String.Empty);
20     }
21 }

使用方式:

1 Node<Char> head = new Node<Char>('C');
2 head = new Node<Char>('B', head);
3 head = new Node<Char>('A', head);
4 Console.WriteLine(head.ToString());

运行结果:

以上实现的链表只能存放相同的数据类型,当然了,可以将类型实参设为 Object 继而在链表中存放不同的数据类型,但是这样的话会存在装箱和拆箱操作,数据量太大的话会影响性能。

利用泛型的继承关系可以实现在同一个链表中存放不同的数据类型,并且不存在装箱拆箱的操作。实现代码如下:

 1 internal class Node
 2 {
 3     protected Node m_next;
 4 
 5     public Node(Node next)
 6     {
 7         m_next = next;
 8     }
 9 }
10 
11 internal class TypeNode<T> : Node
12 {
13     public T m_data;
14 
15     public TypeNode(T data)
16         : this(data, null)
17     {
18 
19     }
20 
21     public TypeNode(T data, Node next)
22         : base(next)
23     {
24         m_data = data;
25     }
26 
27     public override string ToString()
28     {
29         return m_data.ToString() +
30             (null != m_next ? m_next.ToString() : String.Empty);
31     }
32 }

使用方式:

1 Node head = new TypeNode<char>('.');
2 head = new TypeNode<DateTime>(DateTime.Now, head);
3 head = new TypeNode<String>("Today is ", head);
4 Console.WriteLine(head.ToString());

运行结果:

猜你喜欢

转载自www.cnblogs.com/luguoshuai/p/10293387.html
今日推荐