Java 嵌套列表结构管理

Java 嵌套列表结构管理,java,Java,我一直在试图管理一个列表。我已声明并初始化我的数据结构,如下所示: List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<Vector<ArrayDeque<Vector_t>>>( 6); for (int i = 0; i < 6; ++i) { mData.add(i, new Vector<ArrayDeque<V

我一直在试图管理一个列表。我已声明并初始化我的数据结构,如下所示:

List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<Vector<ArrayDeque<Vector_t>>>(
        6);

for (int i = 0; i < 6; ++i) {
    mData.add(i, new Vector<ArrayDeque<Vector_t>>());
    // mData.get(i).setSize(200);
}

for (int i = 0; i < 6; i++) {
    for (int k = 0; k < 200; k++) {
        mData.get(i).add(new ArrayDeque<Vector_t>());
        mData.get(i).get(k).add(new Vector_t());
    }
}
这个初始化正确吗?当在最后一个位置向数组deque添加值时,它会用最后一个元素替换整个数组deque,我不知道为什么

另外,当我使用代码
mdata.get(1).get(42)
更改值时,
mdata.get(0).get(40)
处的元素也会受到影响。再说一遍,我不知道为什么

例如,我已经给出了硬编码的值。这是我添加的方式

if (mData.get(dir.value).get(slice).size() >= sMaxNum_c)
     {
                 mData.get(dir.value).get(slice).removeFirst();
     }
              mData.get(dir.value).get(slice).addLast(result.acc);
向一个方向添加值时,其他方向值正在更改…:(


请帮我解决这个问题。

我的建议是要么像阿米尔建议的那样引入一些类,要么至少通过引入一些命名良好的临时局部变量使代码更容易理解。 我不知道您想实现什么,但使用一些局部变量重新编写可能会让您发现一个问题:

List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<Vector<ArrayDeque<Vector_t>>>(
        6);

for (int i = 0; i < 6; ++i) {
    mData.add(i, new Vector<ArrayDeque<Vector_t>>());
}

for (Vector nextVector : mData) {

    for (int k = 0; k < 200; k++) {
        ArrayDeque<Vector_t> tempArray = new ArrayDeque<Vector_t>());
        tempArray.add(new Vector_t());
        nextVector add(tempArray);
    }
}
List mData=new ArrayList(
6);
对于(int i=0;i<6;++i){
add(i,newvector());
}
用于(向量下一个向量:mData){
对于(int k=0;k<200;k++){
ArrayDeque tempArray=new ArrayDeque());
添加(新向量_t());
nextVector添加(临时数组);
}
}

> p>我不确定你想要达到什么,但是对于初学者,你应该考虑除了矢量之外使用另一个数据结构,因为它过时了。
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
// Consider using another DataStructure such as Arraylist, as Vector<> is obsolete.
import java.util.Vector;

public class main {

    public static void main(String[] args) {

        // Use diamond inference.
        List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<>(6);

            for (int i = 0; i < 6; i++) {
                Vector<ArrayDeque<Vector_t>> vav = new Vector<>();
                ArrayDeque<Vector_t> av = new ArrayDeque<>();

                for (int k = 0; k < 200; k++) {
                    av.add(new Vector_t(2.0f, 2.0f, 2.0f));
                }

                vav.add(av);
            }
        }
    }
}

为类使用setter和getter,这都是关于使用OOP编程概念的:)

如果你对你要完成的目标有一点具体的话,我相信我们可以提供帮助


-Francisco

对不起,第一行的类名是Vector\t…输入错误…请原谅我。。。!!你知道你可以编辑你的文章,对吗?为什么不引入一些类来封装你正在做的事情而不是这个!?这与您的初始化无关。更改mdata.get(1.get(42)中的值的方式有问题。你到底是如何改变这些值的?如果你能给我一个例子,我怎么能这样做,那将是非常棒的。。。感谢uI,我正在尝试创建一个ID和ID应用程序,它可以从各个方向获取传感器数据。Vector_t类用于每个方向上的x y z值。因此,问题是,正如我所提到的,数组deque中的值没有正确存储,当我在一个方向上获取值时,其他方向的值会影响这个方向的值。Java的Vector从什么时候开始过时?我刚刚检查了Java7,它并没有过时。
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.List;
// Consider using another DataStructure such as Arraylist, as Vector<> is obsolete.
import java.util.Vector;

public class main {

    public static void main(String[] args) {

        // Use diamond inference.
        List<Vector<ArrayDeque<Vector_t>>> mData = new ArrayList<>(6);

            for (int i = 0; i < 6; i++) {
                Vector<ArrayDeque<Vector_t>> vav = new Vector<>();
                ArrayDeque<Vector_t> av = new ArrayDeque<>();

                for (int k = 0; k < 200; k++) {
                    av.add(new Vector_t(2.0f, 2.0f, 2.0f));
                }

                vav.add(av);
            }
        }
    }
public class Vector_t {
private float x;
private float y;
private float z;

public Vector_t() {
    x = 0.0f;
    y = 0.0f;
    z = 0.0f;
}

public Vector_t(float x, float y, float z) {
    this.x = x;
    this.y = y;
    this.z = z;
}

public float GetX() {
    return x;
}

public float GetY() {
    return y;
}

public float GetZ() {
    return z;
}

public void SetX(float x) {
    this.x = x;
}

public void SetY(float y) {
    this.y = y;
}

public void SetZ(float z) {
    this.z = z;
}