首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能根据索引来识别对象?

有没有可能根据索引来识别对象?
EN

Stack Overflow用户
提问于 2019-10-24 06:45:52
回答 2查看 24关注 0票数 0

假设我有一个类总线,我有两个总线实例。

Bus bus1 = new Bus(); Bus bus2 = new Bus();

现在,如果我提示用户对索引感兴趣,假设他输入了2。我如何验证bus2是否存在?

EN

回答 2

Stack Overflow用户

发布于 2019-10-24 06:56:56

我要说的是,总线应该通过ID来标识,而不仅仅是因为它是第二个要创建的总线。所以假设你添加了一个属性

代码语言:javascript
复制
private int ID

到Bus类并覆盖,在Bus类中,

代码语言:javascript
复制
  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + ID;
    return result;
  }

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

您可以区分列表中包含的两个总线

代码语言:javascript
复制
listOfBuses.contains(new Bus(userInput))
票数 0
EN

Stack Overflow用户

发布于 2019-10-24 07:57:26

首先,我们自动给公交车编号。

代码语言:javascript
复制
class Bus {
    private static int lastId = 0;
    int id;

    Bus() {
       id = ++lastId; // assign unique bus id
    }

    int getId() {
        return id;
    }
}

我们在某个地方跟踪我们的总线,因为它们是被创建的。由于我们希望通过整数id编号进行跟踪,因此从id到bus的映射很有用。(我们也可以使用一个数组,因为总线编号是密集分配的,但是如果总线既被销毁又被创建,那么映射就有一些优势,因为总线编号不一定是密集的)。

代码语言:javascript
复制
Map<Integer, Bus> busMap = new HashMap<>();

bus = new Bus(); // 1
busMap.put(bus.getId(), bus);

bus = new Bus(); // 2
busMap.put(bus.getId(), bus);

现在检索/验证总线(假设用户输入为int b):

代码语言:javascript
复制
   bus = busMap.get(b);
   if (bus == null) 
      … then b is not a valid bus id …

   … otherwise we have the bus we wanted …
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58531870

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档