在Java中,如何测试数组是否包含相同的值?

在Java中,如何测试数组是否包含相同的值?,java,arrays,Java,Arrays,我正在寻找一种方法来检测数组(列表)中的所有对象是否相同。 Eg: 感谢您的帮助如果您的列表为空,请返回true。 如果不是,则循环遍历它并检查所有元素是否都等于索引0处的元素。 如果是,则返回true,否则返回false。公共静态布尔值AreAllSame(字符串[]数组) public static boolean AreAllSame(String[] array) { boolean isFirstElementNull = array[0] == null; for(i

我正在寻找一种方法来检测数组(列表)中的所有对象是否相同。 Eg:


感谢您的帮助

如果您的列表为空,请返回true。 如果不是,则循环遍历它并检查所有元素是否都等于索引0处的元素。 如果是,则返回true,否则返回false。

公共静态布尔值AreAllSame(字符串[]数组)
public static boolean AreAllSame(String[] array)
{
    boolean isFirstElementNull = array[0] == null;
    for(int i = 1; i < array.length; i++)
    {
        if(isFirstElementNull)
            if(array[i] != null) return false;
        else 
            if(!array[0].equals(array[i])) return false;
    }

    return true;
}
{ 布尔值isFirstElementNull=数组[0]==null; for(int i=1;i
请随时更正任何语法错误。我担心我的Java fu今天可能缺少。

public boolean containsSameValues(int[]数组){
 public boolean containsSameValues(int[] array) {
     if(array.length == 0) {
         throw new IllegalArgumentException("Array is empty");
     }
     int first = array[0];
     for(int i=0;i<array.length;i++) {
         if(array[i] != first) {
             return false;
         }
      }
      return true;
 }
如果(array.length==0){ 抛出新的IllegalArgumentException(“数组为空”); } int first=数组[0]; 对于(int i=0;i
if)(新HashSet(Arrays.asList(yourray)).size()=1){
//所有元素都是相同的
}
Java 8解决方案:

boolean match = Arrays.stream(arr).allMatch(s -> s.equals(arr[0]));
列表的逻辑相同:

boolean match = list.stream().allMatch(s -> s.equals(list.get(0)));

如果数组中只有或有任何
null
值(导致
NullPointerException
),则情况会非常复杂。因此可能的解决方法有:

  • 使用,它使用类中的静态方法,并在对第一个参数调用equals之前为您执行null检查

    boolean match=Arrays.stream(arr).allMatch(Predicate.isEqual(arr[0]);

    boolean match=Arrays.stream(arr).allMatch(s->Objects.equals(arr[0],s));

  • 使用
    distinct()
    count()

    boolean match=Arrays.stream(arr).distinct().count()==1;

    这可以改进为
    Arrays.stream(arr).distinct().limit(2).count()==1;
    ,因为如果已经找到2个不同的元素,则无需检查所有管道的内容

布尔值=false;
布尔t=false;
int-isto=0;

对于(int k=0;k您可以对数组进行排序,然后使用array equals方法:

public boolean equalArrays(int []f ,int [] g){
        Arrays.sort(f);
        Arrays.sort(g);
        if (Arrays.equals(f, g))
             return true;
        return false;
}
要测试它,请执行以下操作:

         int [] h={1,1,0,1};
         int [] t={1,1,1,0};
         System.out.println(cc.equalArrays(h,t));

对于Java 8,Alexis C的解决方案可能是最好的。但是,如果您坚持使用最简单的解决方案:

public static boolean checkTheSame(int[] numbers)  {
   for (int i = 0; i < numbers.length - 1; i++)  {
       if (numbers[i] != numbers[i + 1])  {
           return false;
       }
   }

   return true;
}
public静态布尔检查相同(int[]数字){
对于(int i=0;i
顺序是否相关?否。它也可以{“0”、“0”、“1”、“0”}@Stefan他希望所有元素都相同。因此{1,1,1}与{1,1,1}相同(注意顺序上的差异)您的代码正在将列表设置为布尔值。您的
=
中是否有一个应该是
=
?您是在尝试确定列表中的所有值是否都是相同的值?还是在尝试比较两个列表以确定这两个列表是否包含相同的值,如果是,顺序是否重要?@shoover,我认为
 =true
=false
应该是注释,指示将该数组传递给他请求的方法的输出…似乎从来都不关心空数组。好吧,我假设OP已经知道如何查看数组是否为空。我猜他可以将
=
更改为
我认为这会导致两次迭代集合上的ons,其中最佳解决方案可以在一次迭代中完成(一次迭代用于
asList
,另一次迭代用于
HashSet
构造函数)@JustinNiessner-此解决方案不会进行两次迭代。
asList
不进行迭代,只进行包装。@DavidWallace-我相信你的话。我对Java内部结构了解不够。出于好奇,如果数组长度为0,会发生什么?对于空数组返回true。@jlr它返回
true
。你可以添加一个小数组检查之前的
null
和空arrays@ZouZou-你能在数组中有空值的情况下更新它吗?这样我们就可以看到正确处理这种情况需要多复杂?不,我不是说“如果只有空值”-我的意思是“如果有空值”。你的意思是在条件中有
!=
?我认为
如果(!array[I].equals(first))
会更有意义。当然,那么你也需要一个空检查。不是真的,我的方法有
int
数组作为参数(这是错误的,因为OP有字符串数组,但可能有人会发现它有用)@DavidWallace-我有点想知道我能想出一个多么复杂的解决方案。好吧,是的,当所有的比较逻辑都已经存在于
HashSet
构造函数中时,它似乎在重新发明一个轮子。@DavidWallace-如果我对HashSet有进一步的使用,我会同意的。但是创建一个新的集合实例仅为这一点而启用似乎是浪费空间。空间可以立即用于垃圾收集,因此没有浪费。@hawk-除了它没有捕获所有边缘情况(因为我不打算为OP编写所有内容)之外,它有什么问题?这是针对列表而不是数组的
public boolean equalArrays(int []f ,int [] g){
        Arrays.sort(f);
        Arrays.sort(g);
        if (Arrays.equals(f, g))
             return true;
        return false;
}
         int [] h={1,1,0,1};
         int [] t={1,1,1,0};
         System.out.println(cc.equalArrays(h,t));
boolean result = Collections.frequency(yourList, "1") == yourList.size();
public static boolean checkTheSame(int[] numbers)  {
   for (int i = 0; i < numbers.length - 1; i++)  {
       if (numbers[i] != numbers[i + 1])  {
           return false;
       }
   }

   return true;
}