我有一个整数类型的数组列表,比如1,2,3,4,5,6,7,8,9.i需要用动态索引值重新排序列表,假如我传递了索引值作为4,阵列应重新排序为5,6,7,8,9,1,2,3,4 .....
答案 0 :(得分:0)
我不认识Java,但这就是我如何处理它:
public void foo(int index, array arr) {
int len = arr.length;
int pos = 0;
string hs = "";
for(int i = index+1;i != index;i++) {
if(i = len-1) {
i=0
}
hs = arr[pos];
arr[pos] = arr[i];
arr[i] = arr[pos];
pos++;
}
}
我希望这可以帮助你或者至少激励你!
答案 1 :(得分:0)
我不会循环使用此功能。使用Collections.subList()
代替
fun reorder(list: ArrayList<Int>, breakIndex: Int): ArrayList<Int> {
return (list.subList(breakIndex, list.size) + list.subList(0, breakIndex)) as ArrayList<Int>
}
这是在科特林,但我想你明白了。别的我知道了。
编辑:我可以为您添加Java版本。虽然我还没有使用Java很长一段时间,所以这可能比必要的更糟糕但是......
public static ArrayList<Integer> reorder(ArrayList<Integer> list, Integer breakIndex) {
ArrayList<Integer> reorderedList = new ArrayList<>();
reorderedList.addAll(list.subList(breakIndex, list.size()));
reorderedList.addAll(list.subList(0, breakIndex));
return reorderedList;
}
答案 2 :(得分:0)
有很多方法可以解决这个问题。这只是其中之一。
private int[] reorder(int[] src, int index) {
if (index < 0 || index >= src.length) {
// TODO: Return original array or throw an IllegalArgurmentException if you want.
// For simply I just return original array.
return src;
}
int[] dest = new int[src.length];
int length = src.length - index;
System.arraycopy(src, index, dest, 0, length);
System.arraycopy(src, 0, dest, length, index);
return dest;
}
答案 3 :(得分:0)
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ArrayList<Integer> originalList;
int index;
// init value sample
originalList = new ArrayList<>(Arrays.asList(1,2,3,4,5,6,7,8,9));
// init value index
index = 4;
// reorder array list
ArrayList<Integer> resultList = reorderListArray(originalList, index);
Log.v("resultList", "index after reorder: " + resultList.toString());
}
public ArrayList<Integer> reorderListArray(ArrayList<Integer> listArr, int indexValue) {
ArrayList<Integer> resultList = new ArrayList<Integer>();
int indexOrder = 0;
// case 1
if (indexValue == listArr.get(0)) return listArr;
// case 2
if (indexValue == listArr.get(listArr.size() - 1)) {
Collections.reverse(listArr);
return listArr;
}
// case 3
for(int i=0; i < listArr.size(); i++) {
if(listArr.get(i) == indexValue) {
indexOrder = i;
break;
}
}
for(int i=indexOrder; i < listArr.size(); i++) {
resultList.add(listArr.get(i));
}
for(int i=0; i < indexOrder; i++) {
resultList.add(listArr.get(i));
}
return resultList;
}
你需要检查params输入的条件:[array list]和[dynamic index values]。