将字符串值添加到字符串的ArrayList中
我正在从ArrayList<String>
中删除并添加某个值。删除值不是问题,但是当我尝试再次添加它时,ArrayList
的旧内容成为位置1处的新元素,而在位置0处是新元素,如果我想从其中删除其他元素,则其他元素不可访问。登录添加新的数据后的结果是:
将字符串值添加到字符串的ArrayList中
[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
我写了下面的测试:
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);
}
}
正如你可以看到我所用列表接口为变量,甚至我用ArrayList s。
最好使用变量和方法签名的接口。
测试执行成功与下面的输出:
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]
正如你所看到的,如果你使用List结果不出所料。
我写了一个类似的测试代码,但是使用了ArrayList而不是List,它仍然按照预期工作。他的代码中有其他地方有问题。 –
谢谢,我更新了我的帖子,在方法签名和变量中添加了关于接口的使用的评论,而不是使用该类。 –
我不明白,但使用列表,而不是ArrayList达到了预期的结果...谢谢你们 – Manny265
我的评论是, 你的所作所为是存储ArrayList<String>
list1
的共享偏好的字符串,然后返回list1
存储在一个普通ArrayList
list2
(不<T>
)。然后你从list1
已删除项目和list2
我test1的再生的情况下,TEST2()
import java.util.ArrayList;
public class ArrayListTest {
public static void main(String[] args){
//test1();
test2();
}
private static void test1(){
ArrayList<String> list = new ArrayList<String>() {{
//return the default districts, which is all of them
add("mzuzu");
add("lilongwe");
add("blantyre");
add("zomba");
}};
ArrayList list2 = new ArrayList();
list2.add(list);
list.remove("blantyre");
list2.add(0,"blantyre");
System.out.println(list);
System.out.println(list2);
}
private static void test2(){
ArrayList<String> list = new ArrayList<String>() {{
//return the default districts, which is all of them
add("mzuzu");
add("lilongwe");
add("blantyre");
add("zomba");
}};
System.out.println(list);
list.remove("blantyre");
list.add(0,"blantyre");
System.out.println(list);
}
}
再次添加它()并做出正确的解决方案test1输出:
[mzuzu,lilongwe,zomba]
[太尔,[姆祖祖,圭,松巴]]
TEST2输出:
[姆祖祖,圭,布兰,松巴]
[太尔,姆祖祖,圭,松巴]
你确定原始的ArrayList不包含ArrayList元素吗?请显示更多代码。 – Eran
你能提供一个更长的代码片段吗? – Ashalynd
你确定你的'ArrayList'不是'ArrayList>'吗? –
Blobonat