为了账号安全,请及时绑定邮箱和手机立即绑定

在 Java 中索引类的问题

在 Java 中索引类的问题

狐的传说 2021-08-25 16:27:43
我碰巧在定义一个数组时遇到问题,其中索引应该是类的元素,如下所示:MWE:package thisModel;import java.io.BufferedReader;import java.io.File;import java.io.FileNotFoundException;import java.io.FileReader;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class ThisCode {    public static void main(String[] args) {        class Arc {            private int i; //starting node            private int j; // ending node            public Arc(int i, int j) {                this.i = i;                this.j = j;            }            @Override            public String toString() {                return Integer.toString(i) + " " + Integer.toString(j);            }        }         List<Arc> arcs = new ArrayList<Arc>();            int N = 7;            int [] b = new int [N];    }}所以,在这里,如果我按如下方式定义数组:int [] y = new int [arcs.size()];然后,错误在以下循环中弹出:for (int i = 0; i < N; i++) {                for (int j = 0; j < N; j++) {                    //my issue lies here:                     //y[Arc(i,j)] - y[Arc(j,i)] = b[i];                }            }我认为这是因为y[arcs.size()]具有列表大小的维度,而不是它的元素。我的问题是是否有任何方法可以将ylike定义为一个Arc不arcs.size()这样的数组:int[] y = new int [Arc(i,j)];
查看完整描述

1 回答

?
神不在的星期二

TA贡献1963条经验 获得超6个赞

如果你输入y一个二维数组


int[][] y = new int[N][N];

然后您可以使用Arc的组件i和j作为索引y来检索值:


int value = y[i][j];

您也可以将其输入为Map(如果我按字面意思阅读您的第一句话):


Map<Arc, Integer> y = new HashMap<>();

这允许您y通过使用特定Arc实例请求它们来获取值:


Arc myArc = ...;

int value = y.get(myArc);

在这种情况下,您应该在类中定义正确的hashCode和equals方法Arc:


@Override

public boolean equals(Object x) {

  if (!(x instanceof Arc)) return false;

  Arc that = (Arc) x;

  return this.i == that.i && this.j == that.j;

}


@Override

public int hashCode() {

  return this.i + 31*this.j;

}

否则,HashMap如果您尝试通过将Arc具有相同组件的新实例传递给它来获取它们,则将找不到任何值。


查看完整回答
反对 回复 2021-08-25
  • 1 回答
  • 0 关注
  • 144 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信