Java 如果字符串数组尚未存在,请将其添加到字符串数组中

Java 如果字符串数组尚未存在,请将其添加到字符串数组中,java,Java,我试图将字符串与字符串数组进行比较,如果字符串不在数组中,则将其添加到数组中 我试过了 String [] array =new String [100]; for (int i=0; i<counter; i++){ if(!str.equals(arry[i])){ array[i]=str; counter++; } } 它似乎不起作用。 如果数组=迈克,约翰,汤姆,鲍勃; 新字符串是tony,它应该将tony与数组进行比较,并将其添

我试图将字符串与字符串数组进行比较,如果字符串不在数组中,则将其添加到数组中

我试过了

String [] array =new String [100];
for (int i=0; i<counter; i++){
    if(!str.equals(arry[i])){
        array[i]=str;
        counter++;
    }
}
它似乎不起作用。 如果数组=迈克,约翰,汤姆,鲍勃;
新字符串是tony,它应该将tony与数组进行比较,并将其添加到数组中。但是如果下一个字符串是mike,不要将其添加到数组中,因为它已经在列表中。

在Java中数组的大小不能更改。您应该使用,或者,如果顺序不重要,则应使用:


数组具有固定的大小,因此向数组中添加元素并不容易。您想要的行为正是java.util.Set的行为。了解如何使用标准集合:它们比数组强大得多。如果要保留元素的顺序,请使用LinkedHashSet。看

现在,为什么你的代码会失败

在数组中进行迭代,一旦发现一个元素不等于字符串,就用字符串替换它。您也可以在不考虑数组长度的情况下进行迭代。以下是您可能需要的代码:

boolean found = false;
for (String element : array) {
    if (str.equals(element)) {
        found = true;
        break;
    }
}
if (!found) {
    // add str to array, but where? Use a Set instead.
}

尽可能避免使用数组,Java的麻烦要小得多:

如JB Nizet在评论中所述,如果使用顺序很重要,请将所有名称保持在一个使用顺序中,只需添加您遇到的下一个名称-集合语义将保持所有元素的唯一性,甚至可以根据需要进行扩展,无需创建新数组并复制您周围的内容

Set<String> names = new HashSet<String>();
names.add("mike");
names.add("john");
names.add("tom");
names.add("bob");
assert names.size() == 4;

names.add("bob");
assert names.size() == 4; // still, because "bob" was already in the set

names.add("tony");
assert names.size() == 5; // "tony" is a new unique value, so the set grows
你应该用a来解决这个问题。集合是一种数据结构,它不能包含重复的元素,并且非常适合您的问题

 Set<String> names = new LinkedHashSet<String>();
 Collections.addAll(names, "Mike", "John", "Tom", "Bob");
 names.add("Tony");
 System.out.println(names); // Tony gets added to the end of the Set
 names.add("Mike");
 System.out.println(names); // Set already contains Mike, don't add another
使用


您不需要控制它是否已经存在。

感谢您的回复。这会起作用,但我会使用ArrayList。如果我的数组是defined@Michael对不起,我没听懂。ArrayList经过高度优化,是执行此任务的正确工具。对不起,我不明白你说的“如果我的数组被定义了”是什么意思。@phihag:如果目标是禁止重复,为什么要使用列表?请改用集合。@phihag:如果顺序很重要,请使用LinkedHashSet:无重复项,并保持顺序。@JBNizet在您的评论后4秒添加了该选项;也许顺序很重要,输入中可能会出现重复,他只是想确保某些元素始终存在。非常感谢。这正是我想要做的。我只是不知道怎么写。我还在学习java,所以我需要做很多研究。谢谢大家
 Set<String> names = new LinkedHashSet<String>();
 Collections.addAll(names, "Mike", "John", "Tom", "Bob");
 names.add("Tony");
 System.out.println(names); // Tony gets added to the end of the Set
 names.add("Mike");
 System.out.println(names); // Set already contains Mike, don't add another
[Mike, John, Tom, Bob, Tony]
[Mike, John, Tom, Bob, Tony]
Set<String> first = new HashSet<String>(Arrays.asList(arry));
first.add(str);