• java关于数组的复制,反转、查找


    一、数组的赋值:

    arr2=arr1;对于该赋值而言,地址值一样,所以arr1会随着arr2的变化而变化。这不能称作数组的复制,因为只是把地址赋过去了。地址一样,指向的是堆空间中唯一的数组实体(数值)。

    二、数组的复制:

      arr2=new int[arr1.length];
    	for(int i=0;i<arr2.length;i++){
    		arr2[i]=arr1[i];
    	}
    

    数组的复制,需要new一个新的数组,开辟一个新的空间。其大小和被复制的大小相同。然后需依次将arr1的元素赋给arr2,这样的话,arr1和arr2的大小和元素就都一样了。更改

    其中arr2的值,也不会影响到arr1.

    三、数组的反转:

      	法一:for(int i=0,j=arr.length-1;i<j;i++,j--){//方法一是用两个指针,一个从左到右,一个从右往左。将i和j指向的元素交换一下,就能实现反转了。那么,循
      环的结束条件便是i<j.当i=j的时候,指向本身,不需要交换。
    	String temp=arr[i];
    	arr[i]=arr[j];
    	arr[j]= temp;
    }
    	法二:for(int i=0;i<arr.length/2;i++){//方法二是用一个指针i,i走完数组的长度的一半。也就是让前面一半的数分别与后面一半的数交换。
    		String temp=arr[i];
    		arr[i]=arr[arr.length-i-1];
    		arr[arr.length-i-1]=temp;
    	}
    

    四、数组的查找(线性查找和二分查找)

        boolean isFlag=true;//线性查找,通俗地讲就是一个一个挨着找,遍历整个数组。找到了,就停止,并将找到标志isFlag置false.那么如果标志isFlag为True也就是找不到了。
    	String dest="aa";
    	dest="kk";
    	for(int i=0;i<arr.length;i++){
    		if(dest.equals(arr[i])){
    			isFlag=false;
    			System.out.println("找到了指定的数,"+"数组的下标是"+i);
    			break;
    		}
    	}
    	if(isFlag){
    		System.out.println("很遗憾,没有找到");
    	}
      //二分法查找
    

    二分法查找,是从中间元素开始找。但是这只针对于排好序的数组哦!二分法查找的思想也是老生常谈了。给一个head初索引,再给一个end末索引.最后令mid=(head+end)/2.

    当然,isFlag不能少。循环的结束条件是head<=end,此时说明已经查找了一遍了。开始先判断mid是不是要找的数。如果是,那么找到,跳出循环!如果不是,判断是mid和要找的数

    哪个大?如果要找的数比mid指向的数大,那么,直接在后半段查找。head=mid+1;否则,在前半段查找,end=mid-1;

    	int[] arr3=new int[]{-98,-43,-12,0,23,45,76,100};//
    	int dest1=-12;
    	dest1=8;
    	//初始值索引
    	int head=0;
    	//末索引
    	int end=arr3.length-1;
    	boolean isFlag1=true;
    	while(head<=end){
    		int middle=(head+end)/2;
    		if(dest1==arr3[middle]){
    			System.out.println("找到了指定的元素"+middle);
    			isFlag1=false;
    			break;
    		}else if(dest1<arr3[middle]){
    			end=middle-1;
    		}else {
    			head=middle+1;
    		}
    			
    					
    		
    	}
    	if(isFlag1){
    		System.out.println("没有找到呢");
    	}
    学习让我快乐,工作让我快乐。学习和工作都是为了更好的生活!
  • 相关阅读:
    内存之RAM、SRAM、DRAM、ROM、FLASH、SDRAM、DDR*
    音频接口之AUX、TRS、RCA、SLR、AES/EBU、S/PDIF
    视频接口之AV、S端子、VGA、DVI、HDMI、DP
    选购硬盘HDD、SSD、SSHD、IDE、SATA、SCSI、SAS、PCIe、M.2、USB
    浅析C#中的“==”和Equals
    编写更好的C#代码
    C# 文件下载四方法
    Linq之Lambda表达式初步认识
    .NET逻辑分层架构总结
    理解 .NET 2015
  • 原文地址:https://www.cnblogs.com/xyuanzi/p/13855214.html
Copyright © 2020-2023  润新知