相关疑难解决方法(0)

可变对象与不可变对象

我试图让我的头围绕可变对象和不可变对象.使用可变对象会导致很多不良操作(例如,从方法中返回一个字符串数组),但我无法理解其中的负面影响.使用可变对象的最佳做法是什么?你应该尽可能地避开它们吗?

oop mutable immutability

166
推荐指数
6
解决办法
8万
查看次数

包含集合的java类的哈希码实现

我有一个包含集合的类.如果集合的内容相等,则类的两个实例是相等的.在构建数据结构时,我将类存储在HashSet中,并且集合的内容也会发生变化.这些更改会导致哈希码值发生更改.这似乎会导致我的数据在Set中丢失的副作用.从哈希码计算中删除集合可以解决问题,但违反了规则,其中equals中的所有字段都应该在哈希码中使用.

在这种情况下,您将如何实现哈希码?

public class LeveZeroHolder
{
private final Set<LevelOneHolder> orgGroups = new HashSet<LevelOneHolder>();
private final String name;

public LeveZeroHolder(String name, LevelOneHolder og)
{
    this.name = name;
    orgGroups.add(og);
    og.setFA(this);
}

@Override
public boolean equals(Object obj)
{
    if (this == obj)
        return true;
    if (obj == null || obj.getClass () != getClass ())
        return false;

    LeveZeroHolder hobj = (LeveZeroHolder)obj;
    return getOrgGroups().equals(hobj.getOrgGroups()) && getName().equals(hobj.getName());
}

@Override
public int hashCode()
{
    int rs = 17;
    rs = rs * 37 + ((getName() == null) …
Run Code Online (Sandbox Code Playgroud)

java hashcode

3
推荐指数
1
解决办法
293
查看次数

为什么HashSet不能保持唯一性?

考虑员工类 -

public class Employer implements Serializable{

  private Long id;
  private String name;

  @Override
  public boolean equals(Object obj) {

    if (obj == null)
        return false;
    if (obj instanceof Employer) {
        Employer employer = (Employer) obj;
        if (this.id == employer.id) {
            return true;
        } 
    }
    return false;
  }

  //Idea from effective Java : Item 9
  @Override
  public int hashCode() {
    int result = 17;
    result = 31 * result + id.hashCode();
    //result = 31 * result + name.hashCode();
    return result;
  } …
Run Code Online (Sandbox Code Playgroud)

java hashset

-3
推荐指数
2
解决办法
277
查看次数

标签 统计

java ×2

hashcode ×1

hashset ×1

immutability ×1

mutable ×1

oop ×1