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