标签: arraylist

ArrayList indexOf()返回错误的索引?

我有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()返回正确的对象! …

java android arraylist

9
推荐指数
1
解决办法
2万
查看次数

如果在同一个集合上调用两次相同的迭代器会发生什么?

如果我为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)

我第二次打电话给它时会回到收藏的开头吗?

java collections iterator arraylist

9
推荐指数
2
解决办法
9236
查看次数

如何在VB.Net中将Array转换为ArrayList

我有一个数组,String我必须将其转换为ArrayList.是否有可能在VB.Net中做到这一点?

vb.net arrays arraylist

9
推荐指数
1
解决办法
2万
查看次数

打印出数组列表中的所有对象

可能重复:
如何以正确的方式打印对象内容?

我需要能够在我的数组列表中打印出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)

java printing arrays arraylist

9
推荐指数
2
解决办法
14万
查看次数

Java并发修改异常错误

我正在玩我的大学课程的一些代码,并改变了方法

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)

但是新方法不断给出并发修改错误.我怎样才能解决这个问题,为什么会这样呢?

java arraylist

9
推荐指数
1
解决办法
1万
查看次数

如何从列表中删除整数?

我需要从整数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 arraylist

9
推荐指数
3
解决办法
7323
查看次数

循环列表,更好的方法

当我在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)

java loops arraylist

9
推荐指数
1
解决办法
1030
查看次数

从列表中获取/删除第一个元素的有效方法?

我想取出并从列表中删除第一个元素.我可以看到,我有两个选择:

第一种方法:

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)

我的列表中有很多元素.

  • 我们应该使用哪种偏好?
  • 以上两者有什么区别?它们在性能方面在技术上是一样的吗?如果我们有很多元素,这里涉及的复杂性是多少?

什么是最有效的方法.

java collections linked-list list arraylist

9
推荐指数
6
解决办法
2万
查看次数

有效地从ArrayList获取子列表

我的问题


我有一个固定大小的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 algorithm arraylist time-complexity

9
推荐指数
1
解决办法
3219
查看次数

检查自定义对象列表是否在Java 8中具有相同的属性值

我是Java 8的新手.我有一个类型为A的自定义对象列表,其中A如下所示:

 class A {
      int id;
      String name;
 }
Run Code Online (Sandbox Code Playgroud)

我想确定该列表中的所有对象是否具有相同的名称.我可以通过迭代列表并捕获名称的先前和当前值来实现.在那个上下文中,我找到了如何计算列表中自定义对象的数量,这些对象的一个​​属性具有相同的值.但是有没有更好的方法在使用流的java 8中做同样的事情?

java arraylist java-8 java-stream

9
推荐指数
3
解决办法
8157
查看次数