四种拷贝都是浅拷贝:
(1)for循环;
(2)clone;
(3)System.arraycopy(src,srcPos,dest,destPos,length)不产生新对象 底层调用native
src:源数组 srcPos:源数组要复制的起始位置 dest:目的数组
destPos:目的数组放置的起始位置 length:复制的长度
(4)Arrays.copyOf(luckyNumbers,luckyNumbers.length),产生新对象 返回值T[] 底层调用System.arraycopy;
1.将奇数放在偶数前面,大小顺序不要求
sort(数组名) 或 sort(数组名,起始索引,结束索引,键值)
public static void SortNums(int[] nums,int low,int high) {
while(low<high) {
while(low<high && nums[low]%2 == 1 ) {
low += 1;
}
while(low<high && nums[high]%2 == 0) {
high -= 1;
}
int temp = nums[low];
nums[low] = nums[high];
nums[high] = temp;
}
}
public static void main(String[] args) {
int[] nums = {1,2,3,4,5,6,7,8,9,0};
SortNums(nums,0,9);
for (int i = 0; i < nums.length; i++) {
System.out.print(nums[i]+" ");
}
System.out.println();
}
}
2.一个数组是有序的,给定一个key,有两个数字加起来等于key,找到这两个数字下标
3一个int数组,除两个数字出现一次,其他都是两次,找出这个数字
4.如何排序数组并插入某个元素
排序数组用选择排序或者冒泡排序
public static void main(String[] args){
int i,k;
int [] A = new int []{1,2,3,4,5,6,7,8,0};//0是预留位置,不属于有序数组内容
System.out.println("原始有序数组:");
for (i = 0;i<A.length-1;i ++)
System.out.printf("%6d",A [i]);
System.out.println();
Scanner scan = new Scanner(System.in);
System.out.print("请输入要插入到数组的整数:");
String s = scan.nextLine();
int x = Interger.parseInt(s);//将数字字符串化为等效的整数
int N = A.length-1;//数组A的有效长度
for (k = 0;k<N;k++);{
if (x<A[k])
break;//找到数据插入的位置k
}//从最后一个元素往后平移,为新数据腾出位置
for (i = N;i>k;i--){
A[k] = x;
System.out.println("插入数据后的数组: ");
for (int item :A)
System.out.printin("%6d",iem);
}
}
5.如何搜索组中最小值和最大元素
public static void main(String[] args) {
int[] a={1,2,3,4,5,6,7,8};
getMaxAndMin0(a);
}
public static void getMaxAndMin0(int[] a){
int min=a[0];
int max=a[0];
for (int i = 0; i +1< a.length; i+=2) {
if(a[i]<a[i+1]){
if(a[i]<min){
min=a[i];
}
if(a[i+1]>max){
max=a[i+1];
}
}else{
if(a[i+1]<min){
min=a[i+1];
}
if(a[i]>max){
max=a[i];
}
}
}
System.out.println("max: "+max);
System.out.println("min: "+min);
}
public static void getMaxAndMin(int[] a){
int max=a[0];
int min=a[0];
for (int i = 0; i < a.length; i++) {
if(a[i]>max){
max=a[i];
}else if(a[i]<min){
min=a[i];
}
}
System.out.println("max: "+max);
System.out.println("min: "+min);
}
}
6.如何合并两个数组
String[] aa = {"11","22","33"};
String[] bb = {"44","55","66"};
// 合并两个数组
String[] cc= new String[aa.length + bb.length];
System.arraycopy(aa, 0, cc, 0, cc.length);
7.如何填充数组
fill(数组名,值) 或 fill(数组名,起始索引,结束索引,键值,值)//填充指定索引范围
public static void main(String[] args) {
int[] a = new int[5];
Arrays.fill(a, 1);
System.out.println(Arrays.toString(a));
}
8.如何删除数组指定元素
我建立一个新的数组,将删除后的其他元素放入
int[] arr = new int[] { 1, 2, 3, 4, 5 };
System.out.println(Arrays.toString(arr));
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除第几个元素:");
int n = sc.nextInt(); //用来保存要删除数组的位置
// 定义一个新的数组用来存放删除后的数组,长度为原来数组-1
int[] arrNew = new int[arr.length - 1];
// 循环遍历删除第n个元素,并将剩余元素放入新数组
for (int i = 0, j = 0; i < arr.length; i++) {
if (i != (n - 1)) { //删除元素的索引为n-1
arrNew[j] = arr[i];
j++;
}
}
System.out.println(Arrays.toString(arrNew));
}
9.如何从数组中查找常见元素
{
public static void main(String[] args)
{
int[] arr = new int[]{3,5,62,6,21,344,53};
int index = getIndex(arr,3);
System.out.println("index="+index);
int[] arra = new int[]{2,5,6,8,9,12,14,15,16,19};
int index2 = binarySearch_2(arra,16);
System.out.println("index2="+index2);
}
public static int getIndex(int[] arr,int key)
{
for(int x=0;x<arr.length;x++)
{
if(arr[x]==key)
{
return x;
}
}
return -1;
}