how to compare two string arrays without java utils

后端 未结 3 1490
梦如初夏
梦如初夏 2021-01-06 20:11

Check to see if the array arr1 contain the same elements as arr2 in the same order in java.

for example:

    isTheSame({\"1\", \"2\", \"3\"}, {\"1\",         


        
相关标签:
3条回答
  • 2021-01-06 20:37

    You are iterating until you find a match. You should instead be looking for a String which doesn't match and you should be using equals not ==

    // same as Arrays.equals()
    public boolean isTheSame(String[] arr1, String[] arr2) {
        if (arr1.length != arr2.length) return false;
        for (int i = 0; i < arr1.length; i++)
            if (!arr1[i].equals(arr2[i]))
                return false;
        return true;
    }
    

    FYI This is what Arrays.equals does as it handle null values as well.

    public static boolean equals(Object[] a, Object[] a2) {
        if (a==a2)
            return true;
        if (a==null || a2==null)
            return false;
    
        int length = a.length;
        if (a2.length != length)
            return false;
    
        for (int i=0; i<length; i++) {
            Object o1 = a[i];
            Object o2 = a2[i];
            if (!(o1==null ? o2==null : o1.equals(o2)))
                return false;
        }
    
        return true;
    }
    
    0 讨论(0)
  • 2021-01-06 20:46

    Yes, it will only compare the first element. Look what it is doing:

    public boolean isTheSame(String[] arr1, String[] arr2)
    {
        if (arr1.length == arr2.length)
        {
             for (int i = 0; i < arr1.length; i++)
              {
                 // if the elements are equal ..
                 // (NOTE: this will only be true for INTERNED strings!!)
                 if (arr1[i] == arr2[i]) // fixed typo
                  {
                    // .. then STOP LOOKING and RETURN TRUE
                    // wait- WHY?
                    return true;
                  }
              }
              // searched everything- but still RETURN FALSE??
        }
        return false;  
     }
    

    While the usage of == is not the problem with the provided example data due to string interning, it will bite you someday for real data. Don't use == for objects unless identity equality is desired.

    0 讨论(0)
  • 2021-01-06 20:56
    public boolean isTheSame(String[] arr1, String[] arr2)
    {
        if (arr1.length == arr2.length)
        {
             for (int i = 0; i < arr1.length; i++)
              {
                 if ((arr1[i] != null && arr2[i] != null && !arr1[i].equals(arr2[i]))
                     || (arr1[i] != null && arr2[i] == null) || 
                     (arr2[i] != null && arr1[i] == null))
                  {
                    return false;
                  }
              }
        } else {
             return false;  
        }
        return true;  
     }
    

    But it is very unoptimal.

    0 讨论(0)
提交回复
热议问题