我在编程时有时会遇到这个问题。
假设我有一个包含两列的数据表。第一列是字符串,第二列是整数。
我希望能够将表格的每一行存储到一个动态数组中。所以数组的每个元素都需要保存一个字符串和一个整数。
以前,我只是将表的每一列拆分为两个单独的 ArrayList,然后当我想添加一行时,我会在每个 ArrayList 上调用一次 add() 方法来完成此操作。要删除,我会在同一索引处的每个 ArrayList 上调用一次 remove(index) 方法。
但是有没有更好的办法呢?我知道有像 HashMap 这样的类,但它们不允许重复键。我正在寻找允许重复条目的东西。
我知道可以这样做:
ArrayList<Object[]> myArray = new ArrayList<Object[]>();
myArray.add(new Object[]{"string", 123});
我真的不想每次从数组中取出一个元素时都强制转换为 String 和 Integer,但也许这是不创建我自己的唯一方法?这看起来更让我困惑,我更愿意使用两个 ArrayList。
那么是否有像 ArrayList 这样的 Java 对象可以像这样工作:
ArrayList<String, Integer> myArray = new ArrayList<String, Integer>();
myArray.add("string", 123);
最佳答案
只需创建简单的 POJO 类来保存行数据。不要忘记 equals
和 hashCode
并且更喜欢不可变的解决方案(没有 setter):
public class Pair {
private String key;
private Integer value;
public Pair(String key, Integer value) {
this.key = key;
this.value = value;
}
public String getKey() {
return key;
}
public Integer getValue() {
return value;
}
// autogenerated
@Override
public boolean equals(Object o) {
if (this == o) return true;
if (!(o instanceof Pair)) return false;
Pair pair = (Pair) o;
if (key != null ? !key.equals(pair.key) : pair.key != null) return false;
if (value != null ? !value.equals(pair.value) : pair.value != null) return false;
return true;
}
@Override
public int hashCode() {
int result = key != null ? key.hashCode() : 0;
result = 31 * result + (value != null ? value.hashCode() : 0);
return result;
}
}
用法:
List<Pair> list = new ArrayList<Pair>();
list.add(new Pair("string", 123));
注意:在其他语言中,有针对它的内置解决方案,例如 Scala 中的案例类和元组。
关于java - 是否有类似于 ArrayList 的 Java 类可以做到这一点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12812172/