Java中仅排序一个数组却导致两个数组均被排序的问题咨询
问题原因与解决方法
问题根源
你写的int[] rojas = list;并没有复制数组,只是让rojas和list引用了同一个数组对象。在Java中,数组属于引用类型,赋值操作传递的是对象的引用,而非整个数组的副本。所以调用Arrays.sort(rojas)时,实际是对两个变量共同指向的数组排序,自然打印list时也会显示排序后的结果。
正确的数组复制方式
要生成独立的数组副本,可使用以下几种方法:
方法1:使用Arrays.copyOf()
这是最简洁的方式,直接指定原数组和新数组长度:
int[] rojas = Arrays.copyOf(list, list.length);
方法2:使用System.arraycopy()
底层复制方法,需指定源数组、源起始位置、目标数组、目标起始位置和复制长度:
int[] rojas = new int[list.length]; System.arraycopy(list, 0, rojas, 0, list.length);
方法3:手动循环复制
适合理解底层逻辑,逐个元素赋值:
int[] rojas = new int[list.length]; for (int i = 0; i < list.length; i++) { rojas[i] = list[i]; }
修改后的完整代码
import java.util.Arrays; public class Main { public static void main(String[] args) { int[] list = {611, 700, 777, 901, 4124, 8000, 9014, 6213113, 15, 19, 100, 102, 150, 177, 310, 330, 400, 590, 600}; // 复制数组生成独立副本 int[] rojas = Arrays.copyOf(list, list.length); int size = 20; int value = 100; for (int i=0 ;i< size-1; i++){ if(list[i] == value){ System.out.println("Element found index is :"+ i); break; } else { System.out.println("Element not found"); } } Arrays.sort(rojas); System.out.println("element found by binary search is in index: " + Arrays.binarySearch(rojas,100)); System.out.println(Arrays.toString(rojas)); System.out.println(Arrays.toString(list)); } }
修改后,rojas是独立的数组副本,排序rojas不会影响原list数组。
内容的提问来源于stack exchange,提问作者tiziano budano
相关产品推荐
相关产品推荐

