在特定类的arraylist中设置元素

时间:2017-11-26 06:58:39

标签: java arraylist

在我的课程中,我有一对课程:

class Pair {
  public int ind = 0;
  public String letter = "";
  public Pair(int a, String b) {
    ind = a; //index
    letter = b;
  }
}

如何在Pairs的arraylist中设置元素的索引(ind)?我试过了

RightMotor.ind.set(j, i);

LeftMotor.set(j, i).ind;

但它们似乎不起作用。

4 个答案:

答案 0 :(得分:1)

首先,您需要“获取”Pair实例,例如:

Pair pair = LeftMotor.get(i);

然后你可以改变它的字段:

pair.ind = j;

这也可以在一行中完成:

LeftMotor.get(i).ind = j;

提示1:这是更改列表中实例的索引(位置),LeftMotor.get(i)仍会返回相同的元素。 iind是两个完全不相关的值。

提示2:通常最好有私有字段并使用方法(setter)来更改字段(封装):

class Pair {
  private int ind = 0;
  private String letter = "";
  public Pair(int a, String b) {
    ind = a; //index
    letter = b;
  }
  public void setInd(int newInd) {
    ind = newInd;
  }
}

提示3:只是为了清楚,只是因为它被称为ind列表的索引(位置)。如果要更改列表中元素的顺序,这是一个完全不同的问题。

答案 1 :(得分:1)

您希望将这些实例变量设为私有,然后使用getter / setter来访问/修改它们。这使您可以安全,安全地操作数据,减少泄漏的可能性(这可能会导致程序崩溃或导致意外后果)。

在你班上:

SELECT (TIMESTAMP 'epoch' + 1511680982 * INTERVAL '1 Second ')AS mytimestamp

您计划的其他地方:

class Pair {
  private int ind = 0;
  private String letter = "";

  public Pair(int index, String letter) {
    ind = index; 
    letter = letter;
  }

  public int getIndex() {
      return index;
  }

  public void setIndex(int index) {
      this.index = index;
  }

  public String getLetter() {
      return this.letter;
  }

  public void setLetter(String letter) {
      this.letter = letter;
  }

  public void setIndexAndLetter(int index, String letter) {
      this.index = index;
      this.letter = letter;
  }

}

答案 2 :(得分:0)

您必须先使用Pair构造函数创建Pair个实例,然后再将其添加到ArrayList

RightMotor.add(new Pair(i,j)); // assuming i is an int and j is a String

如果要替换存储在给定索引中的Pair,请使用:

RightMotor.set(index,new Pair(i,j));

如果您想更改Pair中存储的现有ArrayList

RightMotor.get(index).setInd(newValue);

这需要Pair类中的setter方法:

public void setInd (int i) {
    ind = i;
}

答案 3 :(得分:0)

所以我认为你可以通过几种不同的方式来解决这个问题...但是我想我知道你要做什么......我觉得你想要保持ArrayList和Pair索引同步...无论哪种方式,你都需要一个辅助方法来实现这一目标。我同意hendripd你应该使用私有变量并利用getter和setter。然而,这是我的解决方案。

对:

public class Pair implements Comparable<Pair> {

    private int index = 0;
    private String letter = "";

    public Pair(int index, String letter) {
        this.index = index;
        this.letter = letter;
    }

    public Pair(Pair pair) {
        this.index = pair.getIndex();
        this.letter = pair.getLetter();
    }

    @Override
    public int compareTo(Pair pair) {
        if (this.index > pair.index) {
            return 1;
        } else if (this.index < pair.index) {
            return -1;
        } else {
            return 0;
        }
    }

    @Override
    public String toString() {
        return this.index + " " + this.letter;
    }

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

    public String getLetter() {
        return this.letter;
    }

    public void setIndex(int index) {
        this.index = index;
    }

    public void setLetter(String letter) {
        this.letter = letter;
    }
}

主:

import java.util.ArrayList;
import java.util.Collections;

public class Main {
    public static ArrayList<Pair> rightMotor;

    public static void main(String[] args) {
        rightMotor = new ArrayList<Pair>();

        rightMotor.add(new Pair(0, "a"));
        rightMotor.add(new Pair(1, "b"));

        setIndex(rightMotor, 0, 1);
        // If you choose to go with the second option utilizing Comparable<Pair>
        // Collections.sort(rightMotor);

        for (Pair pair : rightMotor) {
            System.out.println(pair.toString());
        }
    }

    public static void setIndex(ArrayList<Pair> motor, int oldIndex, int newIndex) {
        Pair tempPair = new Pair(motor.get(oldIndex));
        if (oldIndex < newIndex) {
            for (int i = oldIndex; i < newIndex; i++) {
                motor.set(i, motor.get(i + 1));
                motor.get(i).setIndex(i);
            }
        } else if (oldIndex > newIndex) {
            for (int i = oldIndex; i > newIndex; i--) {
                motor.set(i, motor.get(i - 1));
                motor.get(i).setIndex(i);
            }
        }
        tempPair.setIndex(newIndex);
        motor.set(newIndex, tempPair);
    }
}

请注意,Pair类实现了可比较的...您可以使用Collections.Sort(rightMotor),然后您只需要修复实例的索引......即。

public static void setIndex(ArrayList<Pair> motor, int oldIndex, int newIndex) {
    motor.get(oldIndex).setIndex(newIndex);
    if (oldIndex < newIndex) {
        for (int i = oldIndex; i < newIndex; i++) {
            motor.get(i + 1).setIndex(i);
        }
    } else if (oldIndex > newIndex) {
        for (int i = oldIndex; i > newIndex; i--) {
            motor.get(i - 1).setIndex(i);
        }
    }
}

或者......你可以使用我发布的原始版本同时处理排序。这样就可以通过索引保持你的Arraylist按数字顺序排列。

测试套管:

    rightMotor.add(new Pair(0, "a"));
    rightMotor.add(new Pair(1, "b"));
    rightMotor.add(new Pair(2, "c"));
    rightMotor.add(new Pair(3, "d"));
    rightMotor.add(new Pair(4, "e"));
    rightMotor.add(new Pair(5, "f"));

    setIndex(rightMotor, 0, 1);
    setIndex(rightMotor, 3, 1);
    setIndex(rightMotor, 4, 3);

输出此结果:

0 b
1 d
2 a
3 e
4 c
5 f