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来判断的。

  • 相关阅读:
    导包Scanner类---Java
    标准类组成---Java
    Educational Codeforces Round 54 (Rated for Div. 2) A. Minimizing the String
    [专题总结] 二分搜索专题
    [最大权森林] [POJ] 3723 Conscription
    [模板] 快读快写
    [模板] 常用数论 -> gcd、exgcd、乘法逆元、快速幂、快速乘、筛素数、快速求逆元、组合数
    [模板] 堆 heap
    牛客小白月赛8 F-数列操作 (有序表)
    [模板] 字符串处理函数
  • 原文地址:https://www.cnblogs.com/wesley168/p/6511275.html
Copyright © 2011-2022 走看看