所以我想知道什么是最好的方式
对于这样的用例,列表可能不是最好的数据结构?
答案 0 :(得分:6)
如果要使用uniqe元素,请使用Set insted of list
Set<your_object_type> name = new HashSet<>();
如果要使用相同的值更新,请执行
name.add(val);
如果要使用不同的值进行更新,请使用以下代码
if(name.remove(val1)){
name.add(val2);
}
答案 1 :(得分:1)
我认为ArrayList
是更好的选择,set(E e)
的{{1}}方法提供了 O(1)
更换时间性能。与java.util.ArrayList
一起使用的remove(E e)
更昂贵。
add(E e)
只要您的List<People> peoples = new ArrayList<People>();
peoples.set(getIndexToUpdate(), new People("Ali", "Lahore"));
不可变,就可以使用此方法。
ArrayList
中的add(E e)
不会更新docs中已经存在的元素。
将指定的元素添加到该集中(如果尚不存在) (可选操作)。更正式地说,将指定元素e添加到 如果集合中不包含任何元素e2,则该集合(e == null? e2 == null:e.equals(e2))。如果此集合已经包含该元素, 调用将保留设置不变,并返回false。结合 通过限制构造函数,可以确保 包含重复元素。以上规定并不意味着 集必须接受所有元素;集可能拒绝添加任何特定内容 元素(包括null)并引发异常,如 Collection.add的规范。单独设置的实现 应该清楚地记录对它们可能构成要素的任何限制 包含。
答案 2 :(得分:0)
您可以使用“ HashSet”并使用方法“ contains”来检查元素是否已经存在。如果没有,您可以添加所需的元素。例如:
Set<Integer> setOfIntegers = new HashSet<>();
if(!setOfIntegers.contains(23)){
setOfIntegers.add(23);
}
现在,您可以检查集合中是否包含所需元素,将其删除并添加另一个元素
if(setOfIntegers.contains(23)){
setOfIntegers.remove(23);
setOfIntegers.add(50);
}
现在将设置的更新值“ 23”设置为新值“ 50”
答案 3 :(得分:0)
以下是将Item
类型的自定义对象添加到Set<Item>
或更新现有对象的示例:
Item.java
public class Item {
private String name;
private int position;
public Item(String name, int position) {
super();
this.name = name;
this.position = position;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getPosition() {
return position;
}
public void setPosition(int position) {
this.position = position;
}
}
Main.java
public class Main {
public static void main(String args[]) {
Set<Item> myUniqueStrings = new HashSet<Item>();
Item a = new Item("A", 1);
Item b = new Item("B", 2);
Item c = new Item("D", 3);
Item d = new Item("D", 4);
// add some of the items to the Set
myUniqueStrings.add(a);
myUniqueStrings.add(b);
myUniqueStrings.add(c);
System.out.println("———> Before update:");
myUniqueStrings.forEach(item -> System.out.println(item.getName()
+ " at position " + item.getPosition()));
// update an item that exists in the Set
c.setName("C");
System.out.println("———> After update of an item in the Set:");
myUniqueStrings.forEach(item -> System.out.println(item.getName()
+ " at position " + item.getPosition()));
System.out.println("———> After having added a new item to the Set:");
// add a new item to the Set
myUniqueStrings.add(d);
myUniqueStrings.forEach(item -> System.out.println(item.getName()
+ " at position " + item.getPosition()));
System.out.println("———> After having tried to insert an already existing item to the Set:");
// add an already existing item to the Set
myUniqueStrings.add(a);
myUniqueStrings.forEach(item -> System.out.println(item.getName()
+ " at position " + item.getPosition()));
}
}
请注意,如果第二次将Item
添加到Set
,则完全没有变化。