我们在生产环境中遇到了奇怪的错误,我们无法调试或注入日志代码.我试图解决这个问题但是跟踪堆栈跟踪让我感到困惑.
System.IndexOutOfRangeException: Index was outside the bounds of the array.
at System.Collections.ArrayList.Add(Object value)
at ...
Run Code Online (Sandbox Code Playgroud)
根据MSDN Add方法应该只抛出NotSupportedException.
我不知道这里发生了什么.你呢?
我有一个ArrayList中的项集合.我将它们添加到客户适配器,如下所示:
this.m_adapter = new MyAdapter(this, R.layout.myitem,
itemCart.m_items);
Run Code Online (Sandbox Code Playgroud)
我的列表中的每个项目都有一个删除按钮,但我不知道如何将删除按钮onClick()与ArrayList中的原始项目连接.有人可以解释如何做到这一点或指向我的教程,我可以阅读这个?非讽刺/非居高临下的回应非常感谢.
我有一个ArrayList将被缓存并无限期地跨多个线程共享.操作包括频繁的添加和删除,以及偶尔迭代它.
在ArrayList其管理访问它的包装类的生活:
public class MyListWrapper<T> implements Iterable<T> {
private List<T> innerList = new ArrayList<T>();
public Iterator<T> iterator() {
return innerList.listIterator();
}
public void add(T element) {
innerList.add(element);
//app-specific logic
}
//remove(T), etc in the same pattern...
}
Run Code Online (Sandbox Code Playgroud)
我正在为线程安全做准备.起初,CopyOnWriteArrayList似乎是最好的答案,但它的性能令我担忧,因为修改将比其他任何事情更频繁.
手动更改为包装类是否会更好?
public Iterator<T> iterator() {
return new ArrayList<T>(innerList).listIterator();
}
//plus concurrency tweaks for any non-atomic modifications to innerList
Run Code Online (Sandbox Code Playgroud)
请帮我找到最好的方法.
我有一个像这样的数组列表:
private ArrayList<Locations> Artist_Result = new ArrayList<Location>();
Run Code Online (Sandbox Code Playgroud)
此Location类有两个属性:id和location.
我需要将我绑定ArrayList到一个微调器.我这样试过:
Spinner s = (Spinner) findViewById(R.id.SpinnerSpcial);
ArrayAdapter adapter = new ArrayAdapter(this,android.R.layout.simple_spinner_item, Artist_Result);
s.setAdapter(adapter);
Run Code Online (Sandbox Code Playgroud)
但是,它显示对象的十六进制值.所以我想我必须设置显示该微调控制器的文本和值.
我有一个Arraylist.如果用户其次输入相同的号码,我想向用户显示.为此,我需要找到Arraylist或不.
我希望我清楚自己.
我有2 ArrayList秒A和B相同的数据结构C(hashCode()和equals()重写).C代表学生的记录.这两个列表大小相同,分别代表新的学生记录和旧学生记录(学生在两个列表中都是相同的,排序可能不同).我希望只保留A中那些已被更改的记录.因此,我这样做:
A.removeAll(B)
Run Code Online (Sandbox Code Playgroud)
根据javadoc,这将获取A的每个记录并与B的每个记录进行比较,如果它们两者都相等,它将从A中删除记录.如果未发现A的记录等于任何记录. B,因为A中的所有学生也在B中,这意味着A的记录已经改变.问题是它容易产生n平方的复杂性.
另一种方法可以是:
Map<C> map = new HashMap<C>();
for (C record : B){
map.add(record.getStudentId(),record);
}
List<C> changedRecords = new ArrayList<C>();
for (C record : A){
if (record.equals(map.get(record.getStudentId())){
changedRecords.add(record);
}
}
Run Code Online (Sandbox Code Playgroud)
我认为这可能比上述解决方案的复杂性低.那是对的吗 ?
我有以下方法:
public List<String> getAllValue(){
List<String> list = new ArrayList<String>();
if(pref.getString(KEY_NUMBER1 , "").length()>2)
list.add(pref.getString(KEY_NUMBER1 , ""));
if(pref.getString(KEY_NUMBER2 , "").length()>2)
list.add(pref.getString(KEY_NUMBER2 , ""));
if(pref.getString(KEY_NUMBER3 , "").length()>2)
list.add(pref.getString(KEY_NUMBER3 , ""));
if(pref.getString(KEY_NUMBER4 , "").length()>2)
list.add(pref.getString(KEY_NUMBER4 , ""));
if(pref.getString(KEY_NUMBER5 , "").length()>2)
list.add(pref.getString(KEY_NUMBER5 , ""));
return list;
}
Run Code Online (Sandbox Code Playgroud)
我现在需要做的是将这些数字(如KEY_NUMBER1)分配给以下内容editTexts:
EditText phoneNumber1, phoneNumber2, phoneNumber3, phoneNumber4, phoneNumber5;
Run Code Online (Sandbox Code Playgroud)
作为使用Lists的新手,我很难找到一种循环方式并为这些editTexts赋值,比如
phoneNumber1.setText(KEY_NUMBER1);
phoneNumber2.setText(KEY_NUMBER2);
phoneNumber3.setText(KEY_NUMBER3);
Run Code Online (Sandbox Code Playgroud) 我需要一个对象A的'List'或'Map',...这个列表将从另一个ArrayList中添加.当idA的参数等于时,对象A被认为等于另一个.
我的问题是我只想添加一个我的列表中不存在的对象.我想知道两种替代方案之间的实施.使用ArrayList或HashMap
1. ArrayList:
for (A a: source) {if (! (a in ArrayList)) addToArrayList();}
2. HashMap <id, A>
for (A a: source) {hasmap.put (a.id, a)}
Run Code Online (Sandbox Code Playgroud)
哪个会提供更好的速度来添加大量(超过1000个对象,或更大数量的对象)是否有一个更好的模式我的问题???
ArrayListequals从其父类继承实现,AbstractList这不是很有效.
它可以首先检查两个ArrayLists的大小,然后false如果这些大小不同则立即返回.为什么不这样ArrayList做?
arraylist ×10
java ×7
android ×3
hashmap ×2
performance ×2
.net ×1
collections ×1
concurrency ×1
data-binding ×1
hashtable ×1
list ×1
listview ×1
removeall ×1
spinner ×1