Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/350.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 向量仅用最后一项填充_Java_Android - Fatal编程技术网

Java 向量仅用最后一项填充

Java 向量仅用最后一项填充,java,android,Java,Android,目标是用哈希表填充哈希表向量 为此,我迭代光标,将光标找到的内容放入哈希表,然后将哈希表添加到向量中,如下所示: Vector<Hashtable<String, String>> v = new Vector<Hashtable<String, String>>(); Hashtable<String,String> h = new Hashtable<String,String>(); while(cursor.mov

目标是用哈希表填充哈希表向量

为此,我迭代光标,将光标找到的内容放入哈希表,然后将哈希表添加到向量中,如下所示:

Vector<Hashtable<String, String>> v = new Vector<Hashtable<String, String>>();
Hashtable<String,String> h = new Hashtable<String,String>();

while(cursor.moveToNext()) {
    h.put("name", cursor.getString(0));
    h.put("region", cursor.getString(1));
    h.put("_id", cursor.getString(2));

    v.addElement(h);
}
Vector v=new Vector();
Hashtable h=新的Hashtable();
while(cursor.moveToNext()){
h、 put(“name”,cursor.getString(0));
h、 put(“region”,cursor.getString(1));
h、 put(“_id”,cursor.getString(2));
v、 增编(h);
}
结果是一个向量,其中填充了游标中的最后一个元素,如果游标在X个元素上迭代,则该向量具有创建的最后一个哈希表的X倍

添加这一行可以解决问题:

Vector<Hashtable<String, String>> v = new Vector<Hashtable<String, String>>();
Hashtable<String,String> h = new Hashtable<String,String>();

    while(cursor.moveToNext()) {
        h = new Hashtable<String,String>();   // <--THIS LINE HERE
        h.put("name", cursor.getString(0));
        h.put("region", cursor.getString(1));
        h.put("_id", cursor.getString(2));

        v.addElement(h);
    }
Vector v=new Vector();
Hashtable h=新的Hashtable();
while(cursor.moveToNext()){

h=new Hashtable();//在第一段代码中,您只是覆盖了同一个对象,因此假设您在while循环上迭代了两次,然后在下一次迭代中,由于没有创建新实例,对象的名称、区域和_id字段将被指定给它们的任何值覆盖。因此,您有两个项,它们的属性值都相同。

在第一个代码块中,您只是覆盖了同一个对象,所以假设您已迭代在while循环中执行两次。如果第一个h实例具有name=“a”、region=“b”和_id=“c”,然后在下一次迭代中,由于没有创建新实例,对象的名称、区域和_id字段将被指定给它们的任何值覆盖。因此,您有两个项,它们的属性值都相同。

在第一个代码示例中,每次迭代都通过
循环填充 与当前光标位置的内容相同的
哈希表
。在第二个代码示例中,调用构造函数(新哈希表()
部分)确保每次迭代都填充不同的
哈希表

请注意,对于集合,可以以不明显的方式修改它们。假设我们有以下程序:

public static void main(String[] args) {
    Set<String> set = new HashSet<>();
    set.add("hello");
    set.add("world");

    Vector<Set<String>> v = new Vector<>();
    v.add(set);

    set.clear();

    System.out.println(v);
}
add()
集合
添加到
向量
时,不会“锁定”其内容。因此对
集合
的进一步更改也会影响
向量

类似地,在程序中,在第一次循环迭代后,
向量
将使用第一个光标位置的内容保存对
哈希表
的单个引用。但是,第二次迭代运行时,将覆盖
哈希表
的内容和
添加()
s再重复一遍。现在您的
向量将包含两个引用(指向相同的
哈希表
),每个引用都包含第二个光标位置的内容


此模式将重复,直到
while
循环终止,此时
向量将有X个引用(指向相同的
哈希表
),每个都包含最后一个光标位置的内容。

在第一个代码示例中,通过
while
循环的每次迭代都使用当前光标位置的内容填充相同的
。在第二个代码示例中,调用构造函数(新Hashtable()
部分)确保每次迭代都填充不同的哈希表

请注意,对于集合,可以以不明显的方式修改它们。假设我们有以下程序:

public static void main(String[] args) {
    Set<String> set = new HashSet<>();
    set.add("hello");
    set.add("world");

    Vector<Set<String>> v = new Vector<>();
    v.add(set);

    set.clear();

    System.out.println(v);
}
add()
集合
添加到
向量
时,不会“锁定”其内容。因此对
集合
的进一步更改也会影响
向量

类似地,在程序中,在第一次循环迭代后,
向量
将使用第一个光标位置的内容保存对
哈希表
的单个引用。但是,第二次迭代运行时,将覆盖
哈希表
的内容和
添加()
s再重复一遍。现在您的
向量将包含两个引用(指向相同的
哈希表
),每个引用都包含第二个光标位置的内容

此模式将重复,直到
while
循环终止,此时
向量将有X个引用(指向相同的
哈希表
),每个引用都包含最后一个光标位置的内容