• 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());

    运行结果:

  • 相关阅读:
    严选B端产品设计原则
    从严选供应链采购看业务系统架构
    网易严选数据任务治理实践
    hibernate主键生成策略
    the user operation is waiting
    hibernate入门案例
    jsp重定向和转发
    jsp编码过程
    在eclipse中部署jsp项目
    oracle误删表解决方案
  • 原文地址:https://www.cnblogs.com/luguoshuai/p/10293387.html
Copyright © 2020-2023  润新知