Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 谁能告诉我为什么我的旧列表中有所有的值,而这些值只应该存在于新列表中。? 我在tmp中存储一个列表,然后在列表中添加新值 刷新时,我将旧列表与新列表进行比较_Java_Android_Arraylist_Iterator - Fatal编程技术网

Java 谁能告诉我为什么我的旧列表中有所有的值,而这些值只应该存在于新列表中。? 我在tmp中存储一个列表,然后在列表中添加新值 刷新时,我将旧列表与新列表进行比较

Java 谁能告诉我为什么我的旧列表中有所有的值,而这些值只应该存在于新列表中。? 我在tmp中存储一个列表,然后在列表中添加新值 刷新时,我将旧列表与新列表进行比较,java,android,arraylist,iterator,Java,Android,Arraylist,Iterator,如果新列表有新条目,则生成通知,但每次我在旧列表中找到所有值时 public void populateList(String result) { ArrayList<User> tmp; tmp = list; list.clear(); try { JSONArray jsonArray = new JSONArray(result); for (int i = 0; i < jsonArray.length(

如果新列表有新条目,则生成通知,但每次我在旧列表中找到所有值时

public void populateList(String result) {
    ArrayList<User> tmp;
    tmp = list;
    list.clear();
    try {
        JSONArray jsonArray = new JSONArray(result);
        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject json_data = jsonArray.getJSONObject(i);
            String NAME = json_data.getString(StaticMember.NAME);
            String STATUS = json_data.getString(StaticMember.STATUS);
            list.add(new User(NAME, STATUS));
        }
        ArrayList tmpN = list;
        compare(tmp, tmpN);
        CustomAdapter customAdapter = new CustomAdapter(getApplicationContext(), android.R.layout.simple_list_item_1, list);
        lv.setAdapter((customAdapter));

    } catch (Exception e) {
        e.printStackTrace();
    }
}

public void compare(ArrayList list_old, ArrayList list_new) {
    try {
        Iterator<User> iterator_old = list_old.iterator();
        Iterator<User> iterator_new = list_new.iterator();

        while (iterator_new.hasNext()) {
            User user_new = iterator_new.next();
            boolean NEW = true;

            while (iterator_old.hasNext()) {
                User user_old = iterator_old.next();
                //Log.i(":N:"+user_new.getUsername(), ":O:"+user_old.getUsername());
                if (user_new.getUsername().equals(user_old.getUsername())) {
                    NEW = false;
                    break;
                }
            }
            if (NEW) {
                generateNotification(getApplicationContext(), user_new.getUsername() + " has been added.");
                Log.i("True", "Changed");
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
}
public void populateList(字符串结果){
ArrayList tmp;
tmp=列表;
list.clear();
试一试{
JSONArray JSONArray=新JSONArray(结果);
for(int i=0;i

执行
tmp=list
操作时,不会将
list
的值存储在
tmp
中。相反,您只需使
tmp
引用与
list
引用相同的对象。稍后,当您修改
列表时,您将修改
tmp
引用的内容

最初,
list
引用用户列表:

 list -> [user0, user1, user2]
tmp=list
之后,
list
tmp
引用相同的列表:

 list -> [user0, user1, user2] <- tmp
当您向
列表添加新元素时,您将修改原始列表:

 list -> [] <- tmp
 list -> [newuser0] <- tmp

请注意,两个列表中存储的
User
对象仍然相同,因此,如果您从一个列表中修改一个对象,它将反映在另一个列表中。

您需要在旧列表上使用新的(新的)迭代器。迭代器不能被重用(实际上您不会重用它,您只需在旧列表中重复一次,然后
hasNext()
返回false)。非常感谢。你解释得很好。
List<User> tmp = new ArrayList<>(list);