Я бы переписал это как:
public class MyFriends
{
// I just changed the name for testing purtposes
public static void main(final String[] argv)
{
final Set<String> names = new TreeSet<String>();
final String[] name1 = {"Amy", "Jose", "Jeremy", "Alice", "Patrick"};
final String[] name2 = { "Alan", "Amy", "Jeremy", "Helen", "Alexi"};
add(name1, names);
display(names);
// you wanted to display each array separately right, not the total of all names in both
// arrays
names.clear();
add(name2, names);
display(names);
}
private static void add(final String[] namesToAdd,
final Set<String> names)
{
for(final String name : namesToAdd)
{
names.add(name);
}
}
private static void display(final Set<String> names)
{
for(final String name : names)
{
System.out.print(" " + name);
}
System.out.println();
}
}
Это позволяет избежать проблемы, когда вы передаете неправильную переменную (как указывает Джон в своем ответе), потому что передача неправильной вещи вызовет ошибку времени компиляции,
Также неплохо создать методы для повторения кода - код любит иметь имена, и вы присваиваете кусок кода имени, помещая его в метод.
РЕДАКТИРОВАТЬ: Вне отставая от ответа от Джона :-) вот способ, которым я действительно сделал бы это, с двумя наборами:
public class Main
{
// I just changed the name for testing purtposes
public static void main(final String[] argv)
{
final Set<String> namesSet1;
final Set<String> namesSet2;
final String[] nameArray1 =
{
"Amy",
"Jose",
"Jeremy",
"Alice",
"Patrick"
};
final String[] nameArray2 =
{
"Alan",
"Amy",
"Jeremy",
"Helen",
"Alexi"
};
namesSet1 = makeSet(nameArray1);
display(namesSet1);
namesSet2 = makeSet(nameArray2);
display(namesSet2);
}
private static Set<String> makeSet(final String[] namesToAdd)
{
final Set<String> names;
names = new TreeSet<String>();
for(final String name : namesToAdd)
{
names.add(name);
}
return (names);
}
private static void display(final Set<String> names)
{
for(final String name : names)
{
System.out.print(" " + name);
}
System.out.println();
}
}