在我的课程中,我有一对课程:
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;
但它们似乎不起作用。
答案 0 :(得分:1)
首先,您需要“获取”Pair实例,例如:
Pair pair = LeftMotor.get(i);
然后你可以改变它的字段:
pair.ind = j;
这也可以在一行中完成:
LeftMotor.get(i).ind = j;
提示1:这是不更改列表中实例的索引(位置),LeftMotor.get(i)
仍会返回相同的元素。 i
和ind
是两个完全不相关的值。
提示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