zoukankan      html  css  js  c++  java
  • 集合

    看如下问题,想下输出的结果:

    为什么输出的结果不是28,"abc",'c',23呢?

    每次移除某个元素后,集合的元素个数会变,下标也会变。

    改成下面的代码呢?

     1 ArrayList lis = new ArrayList()
     2             {
     3                 1,2,4,28,"abc",'c',23
     4             };
     5 
     6             //lis.RemoveAt(0);
     7             //lis.RemoveAt(1);
     8             //lis.RemoveAt(2);
     9 
    10             //for (int i = 0; i < lis.Count; i++)
    11             //{
    12             //    Console.WriteLine(lis[i]);
    13             //}
    14 
    15             for (int i = 0; i < lis.Count; i++)
    16             {
    17                 lis.RemoveAt(i);
    18             }
    19 
    20             for (int i = 0; i < lis.Count; i++)
    21             {
    22                 Console.WriteLine(lis[i]);
    23             }
    24             Console.ReadKey();
    View Code

    输出2,28,c。

     //第一次循环:lis.count=7;移除掉第一个:1;i=0  集合中的元素剩下:2,4,28,"abc",'c',23
                    //第二次循环:lis.count=6;i=1;移除4;集合中的元素剩下:2,28,"abc",'c',23
                    //第三次循环:lis.count=5;i=2;集合中的元素剩下:2,28,'c',23
                    //第四次循环:lis.count=4;i=3;集合中的元素剩下:2,28,'c'
                    //第五次循环:lis.count=3;i=4;不符合循环条件,跳出循环

    既然根据索引删除,会有问题,那根据值来删除呢?

     1   ArrayList list = new ArrayList() {1,2,3,4,5,6,"aaa",false,99.9,new Person() { Name="张三"} };
     2 
     3             list.Remove(1);
     4             list.Remove(2);
     5             list.Remove(3);
     6             string s = new string(new char[] { 'a','a','a'});
     7             Person p = new Person() { Name="张三"};
     8 
     9             list.Remove(s);
    10             list.Remove(p);//为什么删不掉?
    11 
    12             for (int i = 0; i < list.Count; i++)
    13             {
    14                 Console.WriteLine(list[i]);
    15             }
    16 
    17             Console.ReadKey();
    View Code

    结果:4
    5
    6
    False
    99.9
    ArrayList集合.Person。  为何p没删掉?

    根据值来删除的时候,只有两个元素的值相同才能被删除。判断两个元素是否相同是调用元素的equals()方法来判断的,而equals判断的是元素的值。因为person没有重写object的equals方法,所以无法删除 。如果想删除p,让person类重新equals方法即可,这个前面的博客已经讲过,不再赘述。

    集合的contains方法也是通过equals来判断的。

  • 相关阅读:
    January 25th, 2018 Week 04th Thursday
    January 24th, 2018 Week 04th Wednesday
    January 23rd, 2018 Week 04th Tuesday
    January 22nd, 2018 Week 04th Monday
    January 21st, 2018 Week 3rd Sunday
    January 20th, 2018 Week 3rd Saturday
    January 19th, 2018 Week 3rd Friday
    January 18th, 2018 Week 03rd Thursday
    January 17th, 2018 Week 03rd Wednesday
    January 16th, 2018 Week 03rd Tuesday
  • 原文地址:https://www.cnblogs.com/wesley168/p/6511275.html
Copyright © 2011-2022 走看看