从 ArrayList 中获取一个随机元素,添加到另一个 ArrayList 并从第一个 ArrayList Android 中删除该元素
Get a random element from ArrayList, add to another ArrayList and delete the element from first ArrayList Android
我想知道如何从数组列表中删除随机选择的项目并将该选定项目添加到另一个空数组列表。
附加信息(可选):我还想知道如何将 ArrayList 中的元素与另一个 ArrayList 进行比较。这是我的 patuski 的痛苦。
要将一个元素从一个 ArrayList 移动到另一个 ArrayList,您可以做这样的事情:
ArrayList< SomeClass > firstList;
ArrayList< SomeClass > secondList;
int randomlySelectedIndex; //initialize this to be random
SomeClass element = firstList.get( randomlySelectedIndex );
firstList.remove( randomlySelectedIndex );
secondList.add( randomlySelectedIndex );
至于比较 2 个列表中的元素,您可以使用如下比较方法:
int compare( SomeClass first, SomeClass second ) {
//return 0, 1 or -1 depending on your criteria of how first relates to second
}
然后在遍历两个列表时使用比较方法
int result;
for( int x = 0; x < firstList.size(); x++ ) {
for( int y = 0; y < secondList.size(); y++ ) {
result = compare( firstList.get( x ), secondList.get( y ) );
if( result == 0 ) {
//do stuff
}
else if( result < 0 ) {
//do stuff
}
else {
//do stuff
}
}
}
请注意,您不应该在 2 个 for 循环中的任一数组列表中添加或删除元素,除非您知道这样做的后果。
像这样应该可以解决问题
List<T> list;
List<T> emptyList;
...
Random rand = new Random();
int randomIndex = rand.getInt() % list.size();
T item = list.remove(randomIndex);
emptyList.add(item);
就比较两个列表而言,您应该明确要比较的内容。此外,由于这两个问题相当不同,您可能想在单独的 post.
中提问
您可以通过调用 remove(int index)
从 ArrayList
中删除对象,其中 returns 已删除的对象。然后将该对象添加到另一个 ArrayList
中 add()
:
SomeObject removedObject = firstList.remove(randomNum);
secondList.add(removedObject);
注意:确保随机数是从 0 到 ArrayList
的大小。
您可以通过在 class 中实现 Comparable
接口来比较相同 class 的对象。查看更多:https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html
我想知道如何从数组列表中删除随机选择的项目并将该选定项目添加到另一个空数组列表。
附加信息(可选):我还想知道如何将 ArrayList 中的元素与另一个 ArrayList 进行比较。这是我的 patuski 的痛苦。
要将一个元素从一个 ArrayList 移动到另一个 ArrayList,您可以做这样的事情:
ArrayList< SomeClass > firstList;
ArrayList< SomeClass > secondList;
int randomlySelectedIndex; //initialize this to be random
SomeClass element = firstList.get( randomlySelectedIndex );
firstList.remove( randomlySelectedIndex );
secondList.add( randomlySelectedIndex );
至于比较 2 个列表中的元素,您可以使用如下比较方法:
int compare( SomeClass first, SomeClass second ) {
//return 0, 1 or -1 depending on your criteria of how first relates to second
}
然后在遍历两个列表时使用比较方法
int result;
for( int x = 0; x < firstList.size(); x++ ) {
for( int y = 0; y < secondList.size(); y++ ) {
result = compare( firstList.get( x ), secondList.get( y ) );
if( result == 0 ) {
//do stuff
}
else if( result < 0 ) {
//do stuff
}
else {
//do stuff
}
}
}
请注意,您不应该在 2 个 for 循环中的任一数组列表中添加或删除元素,除非您知道这样做的后果。
像这样应该可以解决问题
List<T> list;
List<T> emptyList;
...
Random rand = new Random();
int randomIndex = rand.getInt() % list.size();
T item = list.remove(randomIndex);
emptyList.add(item);
就比较两个列表而言,您应该明确要比较的内容。此外,由于这两个问题相当不同,您可能想在单独的 post.
中提问您可以通过调用 remove(int index)
从 ArrayList
中删除对象,其中 returns 已删除的对象。然后将该对象添加到另一个 ArrayList
中 add()
:
SomeObject removedObject = firstList.remove(randomNum);
secondList.add(removedObject);
注意:确保随机数是从 0 到 ArrayList
的大小。
您可以通过在 class 中实现 Comparable
接口来比较相同 class 的对象。查看更多:https://docs.oracle.com/javase/tutorial/collections/interfaces/order.html