这更像是一个设计问题,我很好奇为什么HashSet不支持使用add添加类似操作。
如果我想将具有相同hashCode的对象更新为现有对象,我必须这样做:
END { print line }
我认为
hashSet.remove(o);
hasSet.add(o);
应该已经足够了,因为无论如何它都会使用HashMap。
答案 0 :(得分:5)
没有必要用等于它的元素替换HashSet
元素。在HashMap
中,有一点可以替换现有密钥的条目,因为值可能不同。
我认为
hashSet.add(o);
应该已经足够了,因为它无论如何都会使用HashMap
。
其实没有。你是HashSet
由HashMap
支持是正确的,其中Set
的每个元素都是一个键,值是一个虚拟对象。但是,如果map.put(key,value)
中的Map
中存在相等的密钥(它只替换了值),则HashSet
不会替换密钥,如果元素已存在,则Set
无法替换该元素。 private void Generate_button1_Click(object sender, EventArgs e)
if (comboBox1.SelectedIndex == 0)
{
comboBox2.Items.Clear();
from = int.Parse(textBox2.Text);
to = int.Parse(textBox3.Text);
result = to - from;
for (int i = 0; i <= result; i++)
{
string item = Convert.ToString(from + i); // Given"A" to seperate from each other
comboBox2.Items.Add(item);
vals.Add(new KeyValuePair<int, string>(0, item)); // CatA has 0 key value
}
MessageBox.Show("Serial Book Generated Success", "Success");
}
if (comboBox1.SelectedIndex == 1)
{
comboBox2.Items.Clear();
from = int.Parse(textBox2.Text); //50
to = int.Parse(textBox3.Text); // 60
result = to - from; // 10
for (int i = 0; i <= result; i++)
{
string item = Convert.ToString(from + i); // Given"A" to seperate from each other
comboBox2.Items.Add(item);
vals.Add(new KeyValuePair<int, string>(1, item)); // CatA has 0 key value
}
MessageBox.Show("Serial Book Generated Success", "Success");
}
}
没有先删除它。
答案 1 :(得分:3)
Set
的目的是跟踪添加到其中的唯一元素。但&#34;独特&#34;这意味着&#34;不等于你的.equals()
方法所定义的集合中的任何其他内容。
如果你有一个案例,你需要添加两个相同的东西,它表明你根本不想要Set
,或者你的.equals()
方法不是&# 39;非常正确。 .equals()
的要点是,如果你做对了,那么如果他们真的关心a
和b
中的哪一个,他们就会非常关心。{1}}&#39}等于。
答案 2 :(得分:0)
Set Javadoc清楚地指明了这种行为。
如果指定的元素尚不存在(可选操作)(...)
,则将该元素添加到该集合中