Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/380.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用java比较arraylist中的名称_Java - Fatal编程技术网

如何使用java比较arraylist中的名称

如何使用java比较arraylist中的名称,java,Java,我的大脑有点酸痛,我一点也不知道为什么这不起作用 我有两个arraylist private ArrayList<String> name = new ArrayList<String>(); private ArrayList<String> name2 = new ArrayList<String>(); 名称2包含 a,b,c,c,d,e,e,f,g,g name(索引i)检查它是否包含name2(索引x)值,如果它包含该值,则不递增外键

我的大脑有点酸痛,我一点也不知道为什么这不起作用

我有两个arraylist

private ArrayList<String> name = new ArrayList<String>();
private ArrayList<String> name2 = new ArrayList<String>();
名称2包含

a,b,c,c,d,e,e,f,g,g

name(索引i)检查它是否包含name2(索引x)值,如果它包含该值,则不递增外键整数,如果它不包含该值,则递增外键整数。

我不确定为什么这不起作用(在
name
name2
中有什么内容?)。不过,更好的方法是使用哈希集存储唯一的名称,然后将它们提取到ArrayList中。

您是否正在尝试查找两个集合中相同的名称

private final Set<String> names = new LinkedHashSet<String>();
private final Set<String> names2 = new LinkedHashSet<String>();

public Set<String> namesInBoth() {
    Set<String> ret = new LinkedHashSet<String>(names);
    ret.retainAll(names2);
    return ret;
}
private final Set name=new LinkedHashSet();
私有最终集名称2=新LinkedHashSet();
公共集名称both(){
Set ret=新的LinkedHashSet(名称);
ret.Retainal(名称2);
返回ret;
}

可能的错误-您可以使用.contains来比较字符串。您应该改用.equals或.equalsIgnoreCase

编辑:

private ArrayList getForeignKey(){
ArrayList foreignKey=新ArrayList();
对于(int i=0;i

}

嗯?你到底需要检查什么?您有两个列表,您需要如何比较它们?在您的示例中,输入是什么?您只显示输出和预期输出。因此,如果列表“name”中的字符串存在于列表“name2”中,则不执行任何操作。如果列表“name”中的字符串不存在于列表“name2”中,请将其索引存储在列表“foreignKey”中。我理解你的逻辑了吗?我正在讨论使用equalsignorecase而不是contains,这是有一定原因的,但已经考虑到了。从描述中可以看出:“我需要检查'name'中的值是否与'name2'中的值相同…”contains和equals执行不同的操作。例如:“123456”.contains(“123”)将返回true,而.equals将返回false。我将对其进行更改,很抱歉造成混淆。刚刚编辑了您的代码。我可能跳过了}或smth,但你应该明白了。
a,b,c,c,d,e,e,f,g,g
private final Set<String> names = new LinkedHashSet<String>();
private final Set<String> names2 = new LinkedHashSet<String>();

public Set<String> namesInBoth() {
    Set<String> ret = new LinkedHashSet<String>(names);
    ret.retainAll(names2);
    return ret;
}
private ArrayList<Integer> getForeignKey() {
    ArrayList<Integer> foreignKey = new ArrayList<Integer>();

for (int i = 0; i < name.size(); i++) {
    boolean found = false;
    for (int x = 0; x < name2.size(); x++){
        if (name.get(i).equals(name2.get(x))){
            found = true;
            break;
        }
    }
    if(!found){
        foreignKey.add(i);
    }

}
return foreignKey;