当前位置: 首页 > 知识库问答 >
问题:

检查两个不同的数组列表是否相等

羊舌庆
2023-03-14

我有一个String类型的数组列表和一个Person类型的数组列表。其中,Person是一个仅包含包含名称的字符串的对象。

ArrayList<Person> people = new ArrayList<Person>();
ArrayList<String> names = new ArrayList<String>();

假设我这样做,

names.add("Josh");
people.add(new Person("Josh");

假设创建一个新的Person对象会将名称设置为“Josh”,并假设Person类具有该名称的get方法。

有没有办法检查名称数组列表中是否包含名为Josh的人。

我唯一能想到的就是这个,

for(int i = 0; i < names.size(); i++){
    if(names.get(i).equals(people.get(i).getName)){
        return true;
    } // end if     
} // end for

现在,如果Person数组列表和names数组列表包含多个元素,如何检查names数组列表中的字符串是否包含其中一个人的名字?我会用这个吗?

 for(int i = 0; i < names.size(); i++){
    for(int j = 0; j < people.size(); j++){
        if(names.get(i).equals(people.get(j).getName)){
            return true;
        } // end if
    }  // end nested for    
 } // end for

或者这甚至不可能,因为数组列表包含不同的对象?

共有3个答案

司寇昱
2023-03-14

可能的解决方案:

解决方案1:最简单的方法

public boolean check(List<Person> people, List<String> names) {
    for(Person person : people) {
        if (names.contains(p.getName()) {
            return true;
        }
    }
}

注意:如果列表“names”中有很多条目,这将产生糟糕的性能,因为这可能是一个NxN比较(在最坏的情况下)


解决方案2:为“名称”使用一个集合(稍微好一点的方式)

public boolean check(List<Person> people, Set<String> names) {
    for(Person person : people) {
        if (names.contains(p.getName()) {
            return true;
        }
    }
}


解决方案3:使用地图

Map<String, Person> personMap = new HashMap<>();

然后用

personMap.containsKey("John");
薛烨
2023-03-14

在Java 8中,可以使用流来实现这一点。anyMatch():

如果在人员中有任何姓名在姓名中的人员,则返回true:

people.stream().anyMatch(person -> names.contains(person.getName());

请注意,如果nameSet,这会快得多

单于亮
2023-03-14

是的,你可以按照你建议的方式实施。为了使其更简洁,您还可以为每个构造并切换循环名称在包含中循环):

for (Person p : people) {
    if (names.contains(p.getName()) {
       return true;
    }
 }
 类似资料:
  • 假设我有一组数组,包括和,我想检查它们是否相等。一般来说,我可以只使用(除了一些我现在忽略的愚蠢的情况)。 但是,这会计算的整个数组,这通常是不需要的。我的数组非常大,而且我有很多数组,两个数组相等的概率很小,所以很可能,在函数返回False之前,我只需要计算的一小部分,所以这对我来说不是一个最佳解决方案。 我尝试使用内置的函数,并结合: 然而,在两个数组相等的情况下,这似乎要慢得多,总的来说,它

  • 我有一个创建Element类型arraylist的主类: 然后我有一个元素clas: 我想在将一个元素添加到列表(它的id和名称)之前进行检查,以检查列表中已经存在的另一个元素是否已经具有这些精确值(id和名称)。我知道我可以使用toString方法来实现这一点,但我不确定如何在将元素添加到列表之前重写它以传递id和名称。他们是这样做的吗?理想情况下,我只想添加一个元素,如果它还不存在的话。

  • 问题内容: 我想检查两个数组是否相等。我的意思是:相同的大小,相同的索引,相同的值。我怎样才能做到这一点? 根据用户的建议,如果数组中的至少一个元素不同,我希望以下内容可以打印 enter ,但实际上没有。 问题答案: $arraysAreEqual = ($a == $b); // TRUE if $a and $b have the same key/value pairs. $arraysA

  • 我有两个arraylist。employee类和user类的ArrayList。employee类将name、age、address作为字段。用户类将名称、年龄、地址作为字段。下面是两个列表 要检查用户是否和员工的地址相同。如果用户没有地址,则从员工处复制。

  • 问题内容: 我知道我可以这样做: 然后只需编写语句中所需的代码。 还有其他方法可以检查它们是否相等? 问题答案: 怎么了 if(!Arrays.equals(array1,array2)) 与相同,即是同一数组。这不是大多数人期望的。 比较数组的内容。

  • 嗨,我正在尝试解决Udemy练习:编写一个名为hasSharedDigit的方法,其中包含int类型的两个参数。 每个数字应在10(含)-99(含)之间。如果其中一个数字不在范围内,则该方法应返回false。 如果两个数字中都有数字,例如12和23中的2,则该方法应返回true;否则,该方法应返回false。 我一直在得到真实,而有共享数字(9,99)我无法发现为什么.. }