将String值添加到字符串的ArrayList中

时间:2016-08-21 09:22:24

标签: java arraylist sharedpreferences

我从ArrayList<String>删除并添加了某个值。删除值不是问题,但是当我再次尝试添加它时,ArrayList的旧内容成为位置1的新元素,而位置0是新元素,如果我想从中移除其他元素则无法访问。这是添加新值后的日志结果:

[blantyre, ["mzuzu","lilongwe","zomba"]]

原来看起来像是:

[mzuzu, lilongwe, blantyre, zomba]

我尝试过以下方法:
ArrayList.add(0,new String("blantyre")ArrayList.add("blantyre"),但他们都将旧内容放在第1位。

我使用以下语句从SharedPreferences获取ArrayList:

ArrayList<String> districts = AppController.getInstance().getPrefManager().getDistricts();

getDistricts方法返回ArrayList<String>的位置。
在SharedPreference中,getDistricts方法或多或少看起来像:

return new ArrayList<String>() {{
        //return the default districts, which is all of them
        add(AppConst.KEY_MZUZU);
        add(AppConst.KEY_LILONGWE);
        add(AppConst.KEY_BLANTYRE);
        add(AppConst.KEY_ZOMBA);
    }};

所有AppConst.KEY_x都是String

类型

2 个答案:

答案 0 :(得分:1)

我的评论是, 您所做的是将共享偏好字符串存储在ArrayList<String> list1中,然后返回list1以存储在一般ArrayList list2中(不{{1} }})。然后,您从<T>中删除了该项,并在list1

中重新添加

我在 test1()中重新生成了您的案例,并在 test2()

中制作了正确的解决方案
list2

}

test1输出:

[mzuzu,lilongwe,zomba]

[blantyre,[mzuzu,lilongwe,zomba]]

test2输出:

[mzuzu,lilongwe,blantyre,zomba]

[blantyre,mzuzu,lilongwe,zomba]

答案 1 :(得分:0)

我写了以下测试:

package default;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by mario on 21/08/2016.
 */
public class TestArrays {

    private static final Logger LOG = LogManager.getLogger(TestArrays.class);

    private static class AppConst{
        public static final String KEY_MZUZU = "key_mzuzu";
        public static final String KEY_LILONGWE = "key_lilongwe";
        public static final String KEY_BLANTYRE = "key_blantyre";
        public static final String KEY_ZOMBA = "key_zomba";
    }

    public List<String> getDistricts() {
        return new ArrayList<String>() {{
            //return the default districts, which is all of them
            add(AppConst.KEY_MZUZU);
            add(AppConst.KEY_LILONGWE);
            add(AppConst.KEY_BLANTYRE);
            add(AppConst.KEY_ZOMBA);
        }};
    }

    @Test
    public void testOne() {
        List<String> list = getDistricts();

        LOG.info(list);

        list.add("blantyre");

        LOG.info(list);

        assert(list.size() == 5);
    }
}

如您所见,我使用 List 接口作为变量,即使我使用 ArrayList

最好将接口用于变量和方法签名。

测试使用以下输出成功执行:

11:55:19.822 [Test worker] INFO  org.unopercento.feeder.adapters.TestArrays - key_mzuzu
11:55:19.823 [Test worker] INFO  org.unopercento.feeder.adapters.TestArrays - [key_mzuzu, key_lilongwe, key_blantyre, key_zomba]
11:55:19.823 [Test worker] INFO  org.unopercento.feeder.adapters.TestArrays - [key_mzuzu, key_lilongwe, key_blantyre, key_zomba, blantyre]

如您所见,如果您使用列表,则结果与预期一致。