我从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
答案 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]
如您所见,如果您使用列表,则结果与预期一致。