zoukankan      html  css  js  c++  java
  • 面试题5:C#链表(下)

    四、 ReferenceEquals, == , Equals 的关系

      首先看链表中添加链表元素的代码:

            public void Add(LKNode item)
            {
                //1
                if (item == null)
                    return;
                //2
                if (Contains(item))
                    return;
                else
                {//3
                    item._next = HeadNode._next;
                    HeadNode._next = item;
                    _count++;
                }
                 //4   
            }

      代码中除了检验item是否为空外,还调用了Contains(item)函数,保证要插入的元素,在链表中不存在,因为插入的元素要重新指向它的_next,如果要插入的元素已经在队列中,那么就意味着修改它的原来的_next,导致链表信息丢失。比较两个对象是否一致,我一般是使用Equa,网上查找资料后发现,还有ReferenceEqual和==两种方式(http://www.cnblogs.com/zagelover/articles/2741409.html)。

      1.ReferenceEquals是Object的静态方法,用于比较两个引用类型的对象是否是对于同一个对象的引用。对于值类型它总是返回false

      2. ==是一个可以重载的二元操作符,可以用于比较两个对象是否相等。 对于内置值类型(例如double和Double),==判断的是两个对象的代数值是否相等;对于用户定义的值类型(struct),如果没有重载==操作符,==将是不能够使用的对于引用类型,== 默认的行为与ReferenceEquals的行为相同。但是但是.NET Framework中的类很多对==进行了重载,例如String类的==与Equals的行为相同,判断两个字符串的内容是否相等

      3 Equals 作为Object内置方法,Equals支持对于任意两个CTS对象的比较。 Equals方法对于值类型和引用类型的定义不同,对于值类型,类型相同,并且数值相同(对于struct的每个成员都必须相同),则Equals返回 true,否则返回false。而对于引用类型,默认的行为与ReferenceEquals的行为相同,仅有两个对象指向同一个Reference的时 候才返回true。可以根据需要对Equals进行重载,例如String类的Equals用于判断两个字符串的内容是否相等。注意默认的,String对于声明的相同的字符串在堆上只保留一个Copy,所以s1="a a a";s2="a a a",s1和s2有相同的Reference

    五、关于白盒测试测试,

      链表实现接口之后就需要测试,尝试白盒测试白盒测试,代码中//1234567表示条件为true或false时的可能路径。

            public void Insert(int index, LKNode item)
            {
                //1,2,3,4
                if (index<0||index >= _count||item==null)
                    return;
                //5
                if (Contains(item))
                    return;
                LKNode p = HeadNode;
                int i = 0;
                //6
                while (i < index) 
                {
                    //7
                    p = p._next;
                    i++;
                }
                item._next=p._next;
                p._next = item;
                _count++;
            }
    Insert多条件路径
    1 1,2 1,2,3 1,2,3,4 1,2,3,4,5 8
                6 6,7  
                8  
    Insert多条件路径编号
    路径编号 路径
    1 1,8
    2 1,2,8
    3 1,2,3,8
    4 1,2,3,4,8
    5 1,2,3,4,5,8
    6 6,8
    7 6,7,8

    上面是insert函数的路径和按照白盒测试的覆盖测试法的条件组合法覆盖的路径(http://baike.baidu.com/view/51297.htm),对于1,2,3,4的或判断,有些条件组合没有意义,所以没有组合。

      对于测试的函数本来是想写一个委托事件,用来检测测试结果的,但是时间所限没有实现。大家可以参考微软的示例:http://code.msdn.microsoft.com/Events-Sample-9390aa6e 

                                                          菜包子

                                                    2013年4月10日20:33:44 于宿舍

  • 相关阅读:
    猿辅导-去除数组中数量大于k的数
    OSI体系结构各层协议
    京东-学生合唱队分组
    146-LRUCache
    76-最长上升子序列
    无序数组中三个数字乘积最大值
    38-字符串的排列
    35-复杂链表的复制
    208-Implement Trie(Prefix Tree)
    69-求一个整数的平方根
  • 原文地址:https://www.cnblogs.com/CaiBaoZi/p/3013077.html
Copyright © 2011-2022 走看看