相关疑难解决方法(0)

如果Key的哈希码相同但是equals方法返回false,HashMap如何检索不同的值

我无法理解HashMap的工作模式.请帮助理解它.

假设我们有两个对象Obj1Obj2具有与1212相同的Hashcode .现在当我们运行"=="并且等于它时返回false.

现在我使用ValueObj1Valueobj2作为HashMap中的值,分别使用Keys Obj1Obj2.我相信两个值都将保存在与List相同的桶中.

我的问题是HashMap如何为Obj2选择Valueobj2而为Obj1选择 ValueObj1.假设有n ..这样的对象和值.这个键 - >值关联如何在内部工作,即使哈希码相同但值不同.

假设两个条件等于未被覆盖和覆盖.

java collections hashmap

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

HashSet.remove 不起作用

我试图从 HashSet 中删除一个元素,但它不会。

调用 时.contains(obj),它返回 true,因此.contains知道对象在 中HashSet。但是当我调用 时.remove(obj),对象不会从 中删除HashSet,它返回false。

hashset 对象删除问题

对象代码 - https://gist.github.com/rincew1nd/f97f11d21ba41d2f4197f9a9da02fea1

java hashset

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

Object.hashCode()返回重复

我有一个类生成一个String对象:

key = "K:" + this.hashCode();
Run Code Online (Sandbox Code Playgroud)

此类不从任何其他类继承,并且它不会覆盖hashCode().我有一个情况,我得到重复的键,所以一个对象的两个不同的实例返回完全相同的hashCode().

怎么会发生这种情况以及可以采取哪些措施来避免它呢?这个类是我正在使用的API的一部分,所以我无法控制它,但是如果有一些方法我可以在创建这个对象的实例时等待或者什么,那么类似的东西可以工作.

java

2
推荐指数
1
解决办法
1688
查看次数

我可以在课堂上使用班级成员的哈希码吗?

我有一个带有最终String的类作为唯一ID.当然我想重写equals所以比较只基于ID.那么只返回ID的哈希码是正确的做法,如下所示?

class ItemSpec{
    final String name;

    ...

    @Override
    public boolean equals(Object o){
        if(o != null && o instanceof ItemSpec){
            return name.equalsIgnoreCase(((ItemSpec)o).name);
        } else{
            return false;
        }
    }

    @Override
    public int hashCode(){
         if(name == null){
             return 0;
         } else{
             return name.hashCode();
         }
    }
}
Run Code Online (Sandbox Code Playgroud)

java hashcode class-members

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

如何从我的ArrayList中删除也在Java中的其他ArrayList中的对象?

在我的java代码中,我有一个结构Person:

public class Person {
  String name;
  String distance;
  String address;
  String field1;
  String field2;
}
Run Code Online (Sandbox Code Playgroud)

现在,我有一个ArrayList<Person> people包含几个对象的东西.我还有另一个ArrayList<Person> otherPeople包含其他对象的东西.

我想生成一个第三个列表,其中包含people尚未包含的所有对象otherPeople.

但我只需要通过自己的比较对象name,distance并且address,我不在乎值的field1field2.

我想过创建2 for循环:

for (Person newPerson: people) {
   for (Person oldPerson: otherPeople) {
       if(newPerson.getName().equals(oldPerson.getName()) &&
         newPerson.getDistance().equals(oldPerson.getDistance()) &&
         newPerson.getAddress().equals(oldPerson.getAddress()) {
Run Code Online (Sandbox Code Playgroud)

但我不知道如何继续,特别是因为我不能从我正在迭代的列表中删除元素......你能帮助我吗?

java arraylist

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

压倒平等:告诉IDE可以有不同的价值观吗?

假设,我有一个班级,称之为学生.student类有一个元素,一个名为Id的int.我想覆盖equals,因此如果将Student与Integer进行比较,则该方法返回true.喜欢:

public class OverrideTest {
    public static void main(String[] args) {

        Student a = new Student();
        a.setId(5);
        System.out.println(a.equals(5));
    }

    public static class Student {

        private int id;

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        @Override
        public boolean equals(Object o) {
            if (o instanceof Student) {
                Student a = (Student) o;
                if (a.getId() == this.getId())
                    return true;
            }
            if (o == this)
                return true;
            if (o instanceof Integer) {
                int id = …
Run Code Online (Sandbox Code Playgroud)

java jvm

0
推荐指数
1
解决办法
59
查看次数

如何确保hashcode()在Java中不能解析为相同的值?

我有一个类的哈希码实现,哈希码实现与eclipse生成的一致,也是这里讨论的最常被接受的实践

这是我的哈希码实现(此方法中使用的所有ID都构成了对象的键):

public int hashCode() {
    final int prime = 31;
    int hashCode = 1;
    if(uId != null){
        hashCode = prime * hashCode + uId.hashCode();
    }
    if(rId != null){
        hashCode = prime * hashCode + rId.hashCode();
    }
    if(bId != null){
        hashCode = prime * hashCode + bId.hashCode();
    }
    if(reId != null){
        hashCode = prime * hashCode + reId.hashCode();
    }
    if(cId != null){
        hashCode = prime * hashCode + cId.hashCode();
    }
    return hashCode;
}
Run Code Online (Sandbox Code Playgroud)

我遇到了一个使用非常大的数据集进行测试的场景,而且我的集合没有这个类的预期数量的对象.仔细观察下面两个数据集导致相同的哈希码:50268236873,因此一条记录被添加到集合中的最后一个替换,因为它们的哈希码是相同的.

  Existing record :
  Record@2c0781cd[uId=54046,rId=10967,bId=177,reId=1728,cId=50194] …
Run Code Online (Sandbox Code Playgroud)

java hash-code-uniqueness hashcode java-ee java-ee-7

0
推荐指数
1
解决办法
535
查看次数

要唯一的对象列表

我有一个名为Stock的简单类,下面列出了代码,我的要求是创建一个Stock集合,其中字段StockId,Code和name的组合应该是唯一的,我通过实现自己的列表类来实现这一点.我想知道是否有更好的方法来做到这一点

public class Stock {

    private Integer stockId;
    private String stockCode;
    private String stockName;

    public Stock() {
    }

    public Stock(Integer stockId,String stockCode, String stockName) {
        this.stockCode = stockCode;
        this.stockName = stockName;
    }



    public Integer getStockId() {
        return this.stockId;
    }

    public void setStockId(Integer stockId) {
        this.stockId = stockId;
    }

    public String getStockCode() {
        return this.stockCode;
    }

    public void setStockCode(String stockCode) {
        this.stockCode = stockCode;
    }

    public String getStockName() {
        return this.stockName;
    }

    public void setStockName(String stockName) {
        this.stockName = stockName;
    } …
Run Code Online (Sandbox Code Playgroud)

java

0
推荐指数
1
解决办法
1837
查看次数

如何使用字符串降序对arrayList进行排序

我正在获取json数据:

[
  {
    "name": "A",
    "count": "2"
  },
  {
    "name": "B",
    "count": "1"
  },
  {
    "name": "A",
    "count": "3"
  },
  {
    "name": "C",
    "count": "10"
  },
  {
    "name": "B",
    "count": "2"
  }
]
Run Code Online (Sandbox Code Playgroud)

所以我使用for循环,正常的东西迭代数据.但我想最终得到arraylist这样的结论:

Ç - > 7

A - > 5

乙 - > 3

请注意,list从最高到最低排序.到目前为止我尝试的是:

//create my arraylists
    //has both name and count
     ArrayList<String>namesWithCountList = new ArrayList<>();
     //has only names 
     ArrayList<String>namesList = new ArrayList<>();

    //get json array..
    //iterate using for …
Run Code Online (Sandbox Code Playgroud)

java sorting arraylist

0
推荐指数
1
解决办法
415
查看次数