在Java中访问存储在ArrayList中的对象的方法

时间:2016-05-08 02:40:10

标签: java

我正在尝试访问ArrayList中对象的方法和值。我有一个有效的系统,但想知道是否有更好的方法。我简化了代码来说明我在做什么。在实际代码中,我将有数百个“Test”对象,并且可以通过将索引传递给list.get()方法来遍历它们。我觉得应该有一种更好的方法来访问方法,而不是创建一个临时的Test对象来获取它们 类似的东西:

  

列出列表中index.theObjectsMethod(传递值)的对象

而不是我做了什么:

import java.util.ArrayList;

public class Test {
static ArrayList<Object> list = new ArrayList<>();
private int index;
private int value;

public Test(int index, int value) {
    this.index = index;
    this.value = value;
}
public int add(int x, int y) {
    value = x + y;
    return value;
}
public int subtract(int x, int y) {
    return x - y;
}

public static void main(String[] args) {
    for (int i = 0; i < 5; i++) {
        Test theTest = new Test(i, i + 1);
        list.add(i, theTest);
    }
/*
 * my way of accessing the methods
*/
    Test tempTest = (Test) list.get(0);
    tempTest.add(12, 1);
    System.out.println(tempTest.value);
    Test tTest = (Test) list.get(1);
    System.out.println(tTest.value);
  }
 }

我使用了一个arrayList,因为我需要循环遍历结构,并访问特定的索引位置。

2 个答案:

答案 0 :(得分:1)

您已创建List Object。因此,任何迭代都只能访问Object类的方法。你可以:

  1. 将列表声明更改为 List<Test> list = new ArrayList<>();
  2. 这种方法允许您访问该值而不必像在您发布的代码中那样对其进行封装。例如:

    for (Test test : list) {
      test.add(1, 2);
    }
    

    或者:

    Test t = list.get(0);  //though watch out for empty list, etc.
    t.subtract(2, 1);
    
    1. 您可以继续进行检索,但这不是最佳方法。
    2. 顺便说一下,当添加到列表时,默认它要追加,所以你可以简单地做一些类似添加到列表的事情。

      for (int i = 0; i < 5; ++i) {
        Test t = new Test(i, i+1);
        list.add(t);
      }
      

答案 1 :(得分:1)

每个Test对象都有其索引,因此我认为您只需通过调用Testlist添加list.add(theTest);个对象。要通过索引在Test中获取list对象,您可以覆盖get list方法。我认为这可以帮到你:

import java.util.ArrayList;

public class Test {

    private final int index;
    private int value;

    public Test(int index, int value) {
        this.index = index;
        this.value = value;
    }

    public int add(int x, int y) {
        value = x + y;
        return value;
    }

    public int subtract(int x, int y) {
        return x - y;
    }

    public int getIndex() {
        return this.index;
    }

    public static void main(String[] args) {
        ArrayList<Test> list = new ArrayList<Test>() {
            @Override
            public Test get(int index) {
                for(Test theTest : this) {
                    if(theTest.getIndex()==index){
                        return theTest;
                    }
                }
                return null;
            }
        };
        for (int i = 0; i < 5; i++) {
            Test theTest = new Test(i, i + 1);
            list.add(theTest);
        }
        /**
        ** my way of accessing the methods
        **/
        Test tempTest = list.get(0);
        tempTest.add(12, 1);
        System.out.println(tempTest.value);
        Test tTest = list.get(1);
        System.out.println(tTest.value);
    }
}