我有ArrayList的问题.我正在使用像这样的ArrayList:
private ArrayList<Playlist> mPlaylists;
Run Code Online (Sandbox Code Playgroud)
其中播放列表是从另一个ArrayList继承的类.我做以下事情:
p = new Playlist(...some parameters...);
mPlaylists.add(p);
Run Code Online (Sandbox Code Playgroud)
后来,当我使用'p'来获取列表中的索引时:
int index = mPlaylists.indexOf(p);
Run Code Online (Sandbox Code Playgroud)
即使检查列表清楚地显示它的索引为'4',也会返回索引'1'.
有人知道为什么会失败吗?谢谢.
BR Morten
编辑: 没有indexOf()的相同问题,使用equals():
private int GetIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i).equals(playlist)) {
return i;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
新编辑: 这个工作!:
private int getIndex(Playlist playlist) {
for (int i = 0; i < mPlaylists.size(); i++) {
if (mPlaylists.get(i) == playlist) {
return i;
}
}
return -1;
}
Run Code Online (Sandbox Code Playgroud)
解决方案: 正如建议的那样,我将Playlist类更改为不从ArrayList启用,而是将私有实例保留.事实证明,我只需要实现4个ArrayList方法.
这样做的伎俩; 现在indexOf()返回正确的对象! …
如果我为myList设置了一个迭代器:
Iterator iter = myList.iterator();
while(iter.hasNext())
{
MyObj myObj = (MyObj)iter.next();
doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)
我称之为第二次:
while(iter.hasNext())
{
MyObj myObj = (MyObj)iter.next();
doPrint(myObj.toString());
}
Run Code Online (Sandbox Code Playgroud)
我第二次打电话给它时会回到收藏的开头吗?
我如何提取字符串[]或arraylist中的所有元素,并将所有单词与它们之间的适当格式(具有单个空格)组合并存储在数组中.
String[] a = {"Java", "is", "cool"};
Run Code Online (Sandbox Code Playgroud)
输出:Java很酷.
很多人都说ArrayList.removeAll大尺寸阵列真的很慢.
该文章提供了两种优化的解决方案到ArrayList.removeAll速度,但需要在类中实现它们,并且不能在外部使用的修复.
有没有办法应用这种修复,而不是复制ArrayList源代码并使用我自己的版本?
编辑:我想我应该添加我对此的需求,因为如果没有ArrayList.removeAll,可能有办法做我想要的.
我有两个70,000 longs每个列表.它们几乎完全相同,但是一个列表中有第二个列表没有的更多数字,我想找到它们.我知道找到它们的唯一方法就是first.removeAll(second)找到差异.还有另外一种方法吗?
我有一个数组,String我必须将其转换为ArrayList.是否有可能在VB.Net中做到这一点?
我刚刚读了一些关于和的信息.从我所能理解的是与过时相比已经过时了.但是同步而不是.VectorArrayListVectorArrayListVectorArrayList
但是,这是什么意思?当我们说a Vector是同步的时候意味着什么?什么时候有用?
可能重复:
如何以正确的方式打印对象内容?
我需要能够在我的数组列表中打印出Student对象(所有变量).这可能吗?当我尝试打印时输出这种东西,例如student.Student@82701e.我认为这是hexadecimal什么的
这是我的代码:
package student;
public class Student {
private String studentName;
private String studentNo;
private String email;
private int year;
public Student() {
this.studentName = null;
this.studentNo = null;
this.email = null;
this.year = -1;
}
public Student(String nName, String nNum, String nEmail, int nYr) {
this.studentName = nName;
this.studentNo = nNum;
this.email = nEmail;
this.year = nYr;
}
public void setStudentName(String newStudentName) {
this.studentName = newStudentName;
}
public void setStudentNo(String newStudentNo) {
this.studentNo …Run Code Online (Sandbox Code Playgroud) 我需要从整数arraylist中删除整数.我对字符串和其他对象没有任何问题.但是当我删除时,整数被视为索引而不是对象.
List<Integer> list = new ArrayList<Integer>();
list.add(1);
list.add(2);
list.add(300);
list.remove(300);
Run Code Online (Sandbox Code Playgroud)
当我试图删除300我得到:
06-11 06:05:48.576: E/AndroidRuntime(856): java.lang.IndexOutOfBoundsException: Invalid index 300, size is 3
我想取出并从列表中删除第一个元素.我可以看到,我有两个选择:
第一种方法:
LinkedList<String> servers = new LinkedList<String>();
....
String firstServerName = servers.removeFirst();
Run Code Online (Sandbox Code Playgroud)
第二种方法
ArrayList<String> servers = new ArrayList<String>();
....
String firstServerName = servers.remove(0);
Run Code Online (Sandbox Code Playgroud)
我的列表中有很多元素.
什么是最有效的方法.
如果值为null,是否有任何简单的方法可以替换List或Collection中的值?
我们总是可以做list.stream().filter(Objects::nonNull);,也许可以将0添加回列表.
但我正在寻找的是像API一样的API list.replaceIf(Predicate<>).