我有一个可变数量的二维数组。 第一个维度是可变的,第二个维度是不变的。 即:
Object[][] array0 = {
{"tim", "sanchez", 34, 175.5, "bla", "blub", "tim@tim.com"},
{"alice", "smith", 42, 160.0, "la", "bub", "alice@sdf.com"},
...
};
Object[][] array1 = {
{"john", "sdfs", 34, 15.5, "a", "bl", "john@tim.com"},
{"joe", "smith", 42, 16.0, "a", "bub", "joe@sdddf.com"},
...
};
...
Object[][] arrayi = ...
我正在使用for循环生成这些数组:
for (int i = 0; i < filter.length; i++) {
MyClass c = new MyClass(filter[i]);
//data = c.getData();
}
其中“filter”是另一个数组,其中填充了告诉“MyClass”如何填充数组的信息。 “getData()”返回i个数组中的一个。
现在我只需要将一切都放在一个大的二维数组中。 即:
Object[][] arrayComplete = {
{"tim", "sanchez", 34, 175.5, "bla", "blub", "tim@tim.com"},
{"alice", "smith", 42, 160.0, "la", "bub", "alice@sdf.com"},
...
{"john", "sdfs", 34, 15.5, "a", "bl", "john@tim.com"},
{"joe", "smith", 42, 16.0, "a", "bub", "joe@sdddf.com"},
...
...
};
最后,我需要一个2D数组来提供我的Swing TableModel。
有关如何实现这一目标的任何想法?现在这让我大吃一惊。
答案 0 :(得分:7)
如果您开始考虑对象和集合而不是数组,那么您的头部流量会大大减少。说真的,使用像这样的数组变得非常复杂!这就是为什么发明OO编程的原因。
从最简单的对象开始:用户。看起来用户包含姓名,年龄,其他内容和电子邮件地址。
现在你是否拥有一组用户?管理琐碎!
然后,您必须将该组用户映射到swing表模型。一个简单的toArray()方法可以返回你想要的一维数组。从那些创建一个二维数组应该很容易,等等(虽然我不确定二维数组是否可行)
另外,创建一个Person构造函数,它接受Object [],这样就不必改变对象的创建方式 - 按照你的方式创建它们实际上非常有效。
如果在此之后它仍然令人困惑,我们应该弄清楚为什么要用数组喂养你的表模型 - 这真的有必要吗?通常,对象集合将更容易管理。
(对于多次修改感到抱歉。不知怎的,我在点击保存后总会注意到更多......)
答案 1 :(得分:2)
我知道Swing表使用数组,但这并不意味着你也应该使用数组!
执行Bill描述并将数据分解为对象类,然后一次一行地将其提供给表。这将使您的数据表示保持良好。
Swing仅用于“显示”和“输入”。它不应该是您存储数据的位置,也不应该是您表示数据的方式。
答案 2 :(得分:1)
你应该倾听别人给出的建议,但如果你坚持做你原本打算做的事,那就是这样的:
public static Object[][] concat(Object[][]... arrays) {
int length = 0;
for (Object[][] comp : arrays) {
length += comp.length;
}
Object[][] ret = new Object[length][];
int offset = 0;
for (Object[][] comp : arrays) {
System.arraycopy(comp, 0, ret, offset, comp.length);
offset += comp.length;
}
return ret;
}
现在,例如,您可以执行以下操作:
Object[][] arr1 = {
{ "A" },
{ "B" },
};
Object[][] arr2 = {
{ "1" },
{ "2" },
};
Object[][] arr3 = {
{ "x", "x" },
{ "y", "y" },
};
Object[][] all = concat(arr1, arr2, arr3);
System.out.println(Arrays.deepToString(all));
// prints "[[A], [B], [1], [2], [x, x], [y, y]]"
你也可以这样使用它:
Object[][] all = new Object[0][];
all = concat(all, arr1);
all = concat(all, arr2);
all = concat(all, arr3);
// :
// maybe more... like in a loop
System.out.println(Arrays.deepToString(all));
// prints "[[A], [B], [1], [2], [x, x], [y, y]]"