【java】在给set add操作的时候,怎么获得之前添加的值?

我是怎么个需求现在,我使用了一个HashSet来进行去重操作,需求是要当add的时候失败,就是集合里面已经有这个值了,我需要把现在这个add失败的值放进去,把之前add的那个删掉。

举个栗子:
有数据a,b,c,a三个值

Set s = new HashSet();
s.add(a);  // 后加入的要顶替调我,我需要被删除
s.add(b);
s.add(c);
s.add(a);  // 这个添加会失败,但是我需要将这个加入到集合中,顶替之前的

这里的abc其实是一个对象,我这里用abc表示了,请问怎么实现这个?
因为目前我没法从set中找到具体某个值并删除他(没用遍历是觉得会慢,因为是通过重写equals来判断的)

if s.contains(a) == True{
s.remove(a)
s.add(a)
}
else{
add(a)
}
在添加操作执行前先判断其值是否在hashset中存在,存在就移除再添加;不存在就直接添加
(不知道你做此类操作是要做什么······是要获取先后顺序?)

获取值得时候遍历
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}

首先调用contains(Object o) ,如果返回true,则执行remove(Object o) 方法;
最后在调用add方法

获取值得时候遍历
Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}

 Iterator iterator=set.iterator();
while(iterator.hasNext()){
System.out.println(iterator.next());
}

HashSet底层是通过HashMap实现的,后添加的会如果已经在Set里有了就不会再添加了。

boolean java.util.HashSet.add(E e)

这个方法本身就是返回boolean值,如果add之前Set中已经有e了就返回false,没有就返回true。不管返回值是什么集合里都会有一个e。

而且你的描述

我需要把现在这个add失败的值放进去,把之前add的那个删掉。

你对Set这个数据结构是不是了解不太准确?这两个值应该是一样的,为啥还要先删除,再添加?

HashSet本身提供了去重功能,你这个需求不使用它本身的去重的话,使用HashMap比较方便处理

1、定义一个set对象
Set h=new HashSet();
2、往set中添加数据
h.add("1st");//往里添加一个字符串
Set是最简单的一种集合。集合中的对象不按特定的方式排序,并且没有重复对象。

  Set接口主要实现了两个实现类:

  HashSet : HashSet类按照哈希算法来存取集合中的对象,存取速度比较快

  TreeSet : TreeSet类实现了SortedSet接口,能够对集合中的对象进行排序。