我有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)
我第二次打电话给它时会回到收藏的开头吗?
我有一个数组,String我必须将其转换为ArrayList.是否有可能在VB.Net中做到这一点?
可能重复:
如何以正确的方式打印对象内容?
我需要能够在我的数组列表中打印出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) 我正在玩我的大学课程的一些代码,并改变了方法
public boolean removeStudent(String studentName)
{
int index = 0;
for (Student student : students)
{
if (studentName.equalsIgnoreCasee(student.getName()))
{
students.remove(index);
return true;
}
index++;
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
至:
public void removeStudent(String studentName) throws StudentNotFoundException
{
int index = 0;
for (Student student : students)
{
if (studentName.equalsIgnoreCase(student.getName()))
{
students.remove(index);
}
index++;
}
throw new StudentNotFoundException( "No such student " + studentName);
}
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
当我在Java中编写和发现新的处理方式时,我总是对通过列表循环输出数据的更好方法感到困惑.
在下面的例子中,我循环遍历列表并使用计数器,因此很多次我必须在输出中包含一个索引计数器.
我偏爱方法1,但我发现这些方法中的任何一个都有点过时了.我已经看到很多循环列表的例子,而且主要使用方法2.
所以我的问题是什么是更好的方法,如果所有这些方法都一样,那么最标准的是什么?
private ArrayList<String> list = new ArrayList<String>();
public Test() {
list.add("One");
list.add("Two");
list.add("Three");
list.add("Four");
list.add("Five");
method1();
method2();
method3();
}
public void method1() {
System.out.println("Method 1");
int i = 1;
for (String value:list) {
System.out.println((i++) + " = " + value);
}
}
public void method2() {
System.out.println("Method 2");
for (int i = 0; i < list.size(); i++) {
System.out.println((i+1) + " = " + list.get(i));
}
}
public void method3() {
System.out.println("Method 3");
Iterator<String> it = list.iterator(); …Run Code Online (Sandbox Code Playgroud) 我想取出并从列表中删除第一个元素.我可以看到,我有两个选择:
第一种方法:
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)
我的列表中有很多元素.
什么是最有效的方法.
我的问题
我有一个固定大小的ArrayList,其中包含自定义变量.尽管ArrayList具有固定的大小,但有时其中很多实际上都是null.问题是我需要返回没有null变量的ArrayList.需要注意的一件重要事情是: ArrayList首先包含所有非空项,然后是它们下面的所有空值,例如,元素不会混合.示例:[非null,非null,.... null,null,null]
我的解决方法
我创建了一个for循环,它检查(从最后到第一个索引)ArrayList中的每个元素,以确定它是否为null.如果为null,那么我将调用此代码:
for (i = size-1; i >=0 ; i--) {
groupList = new ArrayList<>(groupList.subList(0, i));
}
Run Code Online (Sandbox Code Playgroud)
我的问题
如果ArrayList太大,这种方法可能会特别慢(或不是?).我想知道是否存在更好,更友好的解决方案.AFAIK .subList方法很昂贵.
我是Java 8的新手.我有一个类型为A的自定义对象列表,其中A如下所示:
class A {
int id;
String name;
}
Run Code Online (Sandbox Code Playgroud)
我想确定该列表中的所有对象是否具有相同的名称.我可以通过迭代列表并捕获名称的先前和当前值来实现.在那个上下文中,我找到了如何计算列表中自定义对象的数量,这些对象的一个属性具有相同的值.但是有没有更好的方法在使用流的java 8中做同样的事情?
arraylist ×10
java ×9
arrays ×2
collections ×2
algorithm ×1
android ×1
iterator ×1
java-8 ×1
java-stream ×1
linked-list ×1
list ×1
loops ×1
printing ×1
vb.net ×1