#java
#java
Вопрос:
Я пытаюсь протестировать код, который, если я добавлю новый элемент в список, он обнаружит аналогичный элемент и удалит один из дубликатов, но переместит другой в начало списка.
public class MemberList {
List<String> members;
public MemberList() {
this.members = new ArrayList<String>();
}
//This is the part I'm trying to fix!!!
public void addMember(String FirstName, String LastName) {
members.add(0, FirstName " " LastName);
}
}
Комментарии:
1. Вы можете заставить вас использовать методы ArrayList contains() и remove() и add(), чтобы сделать это. В целях эффективности было бы лучше использовать Set .
2. Как бы вы это сделали?
3. Я опубликовал ответ для решения с использованием списка. Тем не менее, я действительно призываю вас понять разницу в наборах и списках и варианты использования.
4. Также рекомендую вам быть немного более конкретным в отношении того, что происходит не так, что вы сделали, чтобы попытаться устранить проблему, какие сообщения об ошибках вы получаете и т. Д
Ответ №1:
Вместо ArrayList, я думаю, вам следует использовать LinkedHashSet, поскольку в вашей коллекции не допускается дублирование элементов. И LinkedHashSet зарезервирует порядок вставки, поэтому при обнаружении дубликата вы можете удалить старый и вставить новый для установки.
public class MemberList {
Set<String> members;
public MemberList() {
this.members = new LinkedHashSet<String>();
}
public void addMember(String FirstName, String LastName) {
String key = FirstName " " LastName;
if (members.contains(key)) {
members.remove(key);
}
members.add(key); // Always add to tail
}
}
Помните, что LinkedHashSet всегда будет добавлять новые элементы в хвост, поэтому вам нужно получить последний элемент для вашего начального случая.
Комментарии:
1.
new LinkedHashSet<>();
— здесь нет необходимости упоминать тип данных. И вы не собираетесь ничего упоминать о соглашении об именовании Java?2. Я просто копирую его код и делаю некоторые обновления. Разозлите его, если хотите.
Ответ №2:
Перечислите способ выполнения задачи (не предпочтительный из-за эффективности):
public void addMember(String FirstName, String LastName) {
String name = FirstName " " LastName;
if(members.contains(name)) { // checks if the list contains name value
members.remove(name); // removes the first occurrence of the name from the list
members.add(0,name); // adds the name to 0th position of the list
} else {
members.add(name); // if name not found in list, appends the value to the list
}
}
Комментарии:
1. Это крайне неэффективно. Набор — гораздо лучший вариант.
2. Я прокомментировал то же самое. Но пользователь явно запросил способ списка.