在Java中,有没有一种方法可以给二维数组的行和列命名?

4

我之前在谷歌上搜索过,答案是否定的,但我想知道是否有任何可能的方法。

在Java中,有没有一种给二维数组的行和列命名的方法?


1
请问您能否给我们一个您想要的例子? - mariosangiorgio
2
没有数组名称。您可以使用Map来实现此功能。 - Uwe Plonus
使用常量变量来保存列或行索引。虽然不像其他允许字符串值的语言那样,但它可以使代码更易读。或者像其他人建议的那样使用Map。 - René Link
如果你想要像JavaScript中的myArray["header"]["column1"]这样的东西,答案是否定的。在Java中最接近这种行为的实体将是一个Map或者一个数组,其中包含常量来表示“名称”索引。 - Pablo Lozano
地图比数组慢得多吗?我将使用2D表进行大量计算。 - macaugmxus
如果你需要进行大量的计算,那么请使用数组。只需将列名和行名存储在两个不同的数组中。(计算时不需要名称!) - Tala
4个回答

7
不可以。2D数组只是数组的数组。你需要有另外两个带有列和行名称的数组。 如果需要,可能可以使用其他数据结构(如Map)来解决问题。

5
更多维的数组通常是避免使用类的方法。例如:
String[][] persons;
persons[0][1];

如果你遇到这样的代码,应该首先让它更易读。

public static final int FIRSTNAME = 0;
public static final int LASTNAME = 1;

persons[0][FIRSTNAME];
persons[0][LASTNAME];

更好的封装数据结构的方法是使用类:
```html

一个更好的封装数据结构的方法是使用类:

```
public class Person {
  private String firstname;
  private String lastname;

  public String getFirstname(){
     return firstname;
  }

  public String getLastname(){
     return lastname;
  }
}

Person[] persons;
person[0].getFirstname();

如果您希望更改尽可能少:

public class Person {
  public static final int FIRSTNAME = 0;
  public static final int LASTNAME = 1;

  private String[] personData;

  public String getFirstname(){
     return personData[FIRSTNAME];
  }

  public String getLastname(){
     return personData[LASTNAME];
  }
}

做出你的选择


1

忘掉关联数组吧。现在你在Java中,走向更高级的方式 :)
为此,Java提供了映射。你需要使用maps
这是一个例子

import java.util.*;

public class CollectionsDemo {

   public static void main(String[] args) {
      Map<String ,Integer> m1 = new HashMap<String ,Integer>(); 
      m1.put("name1", 8);
      m1.put("name2", 31);
      m1.put("name3", 12);
      m1.put("name4", 14);
      System.out.println();
      System.out.println(" Map Elements");
      System.out.print("\t" + m1);
   }
}

如果您需要更深入了解,就像您所说的那样:
在Java中是否有一种方法可以为二维数组的行和列命名?
那么需要针对一个键存储数据结构才有可能。您可以针对一个键存储一个Map,然后称之为Multimap,它将如下所示:
Map<X, Map<Y,Z>> map1;

关联数组就是映射。也许你的意思是“忘记整数索引数组”?在大多数情况下,出于性能原因,您需要按整数索引。使用映射会非常慢。只有对于非常小的映射才有好处。 - Nicholas Pipitone

1
似乎您的要求是识别行。为此,您可以使用由唯一键组成的Map,而不是使用数组。
您可以像这样定义:
Map<String,ArrayList<SomeObject>> map = new HashMap<String,ArrayList<SomeObject>>();

通过这种方式,您可以将一个唯一的键作为行标识符,并将整个arrayList作为其值添加。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接