精华内容
下载资源
问答
  • java数组排序函数

    千次阅读 2020-06-08 16:20:14
    C语言有qsort()函数,C++有sort()函数java语言有Arrays类(不是Array)。用这些排序时,都可以写自己的排序规则。Java API对Arrays类的说明是:此类包含用来操作数组(比如排序和搜索)的各种方法。

    1.对基本数据类型的数组的排序

    (1)Arrays类中的sort()使用的是“经过调优的快速排序法”;

    (2)比如int[],double[],char[]等基数据类型的数组,Arrays类之只是提供了默认的升序排列,没有提供相应的降序排列方法。

    (3)要对基础类型的数组进行降序排序,需要将这些数组转化为对应的封装类数组,如Integer[],Double[],Character[]等,对这些类数组进行排序。(其实还不如先进行升序排序,自己在转为降序)。

    用默认的升序对数组排序

    函数原型

    • static void sort(int[] a) 对指定的 int 型数组按数字升序进行排序。
    • static void sort(int[] a, int fromIndex, int toIndex) 对指定 int 型数组的指定范围按数字升序进行排序。

    代码实例

    import java.util.Arrays;
    public class ArraysSort_11 {
        public static void main(String args[])
        {
            int[] a={1,4,-1,5,0};
            Arrays.sort(a);
            //数组a[]的内容变为{-1,0,1,4,5}
            for(int i=0;i<a.length;i++)
                System.out.print(a[i]+"  ");
        }
    }
    

    2.对复合数据类型的数据的排序

    函数原型:
    (1)public static void sort(T[] a,Comparator c) 根据指定比较器产生的顺序对指定对象数组进行排序。

    (2)public static void sort(T[] a,int fromIndex,int toIndex,Comparator c) 根据指定比较器产生的顺序对指定对象数组的指定范围进行排序。

    说明:这个两个排序算法是“经过调优的合并排序”算法。
    代码实例

    package com.shuzu;
    
    import java.util.Arrays;
    import java.util.Comparator;
    
    public class fuhepaixu {
    	Point[] arr;
    	fuhepaixu(){
    		arr =new Point[4];
    		for(int i=0;i<4;i++) {
    			arr[i]=new Point();
    		}
    	}
    	public static void main(String args[]) {
    		fuhepaixu f =new fuhepaixu();
    		f.arr[0].x=1;
    		f.arr[1].x=2;
    		f.arr[2].x=0;
    		f.arr[3].x=4;
    		f.arr[0].y=2;	
    		f.arr[1].y=3;
    		f.arr[2].y=1;
    		f.arr[3].y=0;
    		Arrays.sort(f.arr,new myComparator());
    		for(int j=0;j<4;j++) {
    			System.out.println("("+f.arr[j].x+","+f.arr[j].y+")");
    		}
    	}
    
    }
    
    class Point{
    	int x;
    	int y;
    }
    
    class myComparator implements Comparator{
    	public int compare(Object arg0,Object arg1) {
    		Point t1 =(Point)arg0;
    		Point t2 =(Point)arg1;
    		if(t1.x!=t2.x) {
    			return t1.x>t2.x?1:-1;
    		}
    		else {
    			return t1.y>t2.y?1:-1;
    		}
    	}
    }
    

    Comparator是一个专用的比较器,当这个对象不支持自比较或者自比较函数不能满足要求时,可写一个比较器来完成两个对象之间大小的比较。Comparator体现了一种策略模式(strategy design pattern),就是不改变对象自身,而用一个策略对象(strategy object)来改变它的行为。

    PS:关于?:公式
    a>b?A:B
    意思是如果a>b则这个式子的值为A;
    否则值为B

    展开全文
  • java数组函数

    2017-03-26 14:29:00
    数组是存储在一个连续的内存块中的元素集合,数组中每个元素必须是相同... ⑵使用new关键字初始化数组,并指定数组大小。  数组声明:数据类型[]变量名;  ⑴注意int类型的数组,如果只是声明了没有赋值,默...

      1·数组是存储在一个连续的内存块中的元素集合,数组中每个元素必须是相同数据类型,并且通过索引区分。

      在java中,创建数组有两个步骤:

                     ⑴声明一个对数组的引用;

                     ⑵使用new关键字初始化数组,并指定数组的大小。

      数组声明:数据类型[]变量名;

            ⑴注意int类型的数组,如果只是声明了没有赋值,默认每个位置是0;

            ⑵String类型默认是null。

      数组赋值:变量名=new  数组类型[长度]

      数组声明与赋值合并书写:数据类型 [] 变量名={  值   };

      2·函数(方法)的基本概念:

                                    ⑴不带参数不带返回值的函数

                     public static void xxxXxx1(){};

                 ⑵带参数不带返回值的函数

                   public static void xxxXxx2(int a, String b){};

                 ⑶带参数带返回值的函数

                  public static int xxxXxx3(int a, String b){

                     return 1;}

            

     

    转载于:https://www.cnblogs.com/zxb555/p/6622708.html

    展开全文
  • 数组:相同类型的数据,在内存中连续存储。 数组的声明: int [] a ; //栈中定义了int类型数组的引用 A [] aa ; //定义了A类型数组的应用 数组的初始化: int [] a = {1,2,3,4,5}; //定义时初始化 A [] a = new A[3]...

    数组:相同类型的数据,在内存中连续存储。
    数组的声明:
    int [] a ; //栈中定义了int类型数组的引用
    A [] aa ; //定义了A类型数组的应用
    数组的初始化:
    int [] a = {1,2,3,4,5}; //定义时初始化
    A [] a = new A[3]; //对象数组定义初始化, 内部初始化全为null
    A []a = { new A(1,2), new A(3,4), new A(5,6)}; //定义时初始化每个对象;
    在C语言中我们知道字符串数组拷贝可以使用简单的方式strcpy(str,dest);
    其他类型的数组拷贝如int 类型一般我们使用memcpy或者循环实现如下:

    #include<stdio.h>
    #include <memory.h>
    int main(void)
    {
    int a[5] ={1,2,3,4,5};
    int b[5] ;
    int i =0 ;
    memcpy(b,a,sizeof(a));
    for (i = 0; i<sizeof(b)/sizeof(b[0]) ; i ++)
    {
    printf("%d ", b[i]);
    }
    printf("\n");
    return 0; 
    }
    result: 
    1 2 3 4 5
    
    #include<stdio.h>
    #include <memory.h>
    int main(void)
    {
     int a[5] ={1,2,3,4,5};
     int b[5] ;
     int i =0 ;
     for (i =0; i<sizeof(b)/sizeof(b[0]) && i <sizeof(a)/sizeof(a[0]) ;  i++)
     {
       b[i] = a[i];
     }
     for (i = 0; i<sizeof(b)/sizeof(b[0]) ; i ++) 
     { 
     printf("%d \n", b[i]); 
     }
     printf("\n");
     return 0; //结果同上;
    

    java中数组拷贝也可以使用循环来实现但是明显代码较繁琐不如使用函数;
    这里就介绍下System.arraycopy函数格式如下:
    public static void arraycopy(Object src,int srcPos,Object dest,int destPos,int length);
    api文档中有详细介绍这里简单介绍下:
    所有类都继承自object所以 src 和dest都是object 类型;
    src 源数组,dest目标数组(需要将数据拷贝到这里),
    srcPos源数组从第几个位置开始拷贝
    destPos拷贝到目标数组从几个位置开始 (这里的位置都是下标)
    length 拷贝几个元素;
    举例如下:

    public class TestString 
    {
     	public static void main(String [] args)
     	{
     		int  []aa = {1,2,3,4,5};
     		int [] aa1 = new int [5];
     		System.arraycopy(aa,0, aa1, 0 , aa.length);
     		aa1[2] = 100;
     		for (int i =0; i < aa.length; i ++){
       			System.out.print(aa[i]);
      		}
      		System.out.println();
      		for (int i =0; i < aa1.length; i ++){
       			System.out.print(aa1[i]); 
      		}
    	}
    }
    结果 
    1  2  3  4  5
    1  2  100  4  5
    

    内存分配情况,先在栈中创建了数组aa 然后拷贝整个数组到aa1中,在栈中给aa1也分配了同样大小的空间直接赋值拷贝
    内存分配情况,先在栈中创建了数组aa 然后拷贝整个数组到aa1中,在栈中给aa1也分配了同样大小的空间直接赋值拷贝

    情况二 引用类型数组:

    public class TestArrayCopy1
    {
     public static void main(String [] args)
     {
      A []a = { new A(1,2), 
          new A(3,4), 
          new A(5,6)};
      A [] b = new A[3];
      A [] bb;
      int []aa ;
      System.arraycopy(a,0,b,0,a.length);
      b[1].i = 0;
      b[1].j = 0;
      for(int i=0; i<a.length; i++)
       	System.out.println(a[i]);    
    }
    class A
    {
     int i;
     int j ;
     public A(int i, int j){
      	this.i = i;
      	this.j = j;
     }
     public String toString(){
      	return i+"  " + j +"  ";
     }
    }
    结果:
    1  2   0  0   5  6
    

    这个时候为什么改变数组中一个元素的值而之前的数组值也发生了变化呢?看内存图;

    浅拷贝
    当调用arraycopy函数时拷贝的只是栈中的数据,而a数组在栈中存放的只是对象a数组的引用实际的属性都是分配在堆空间,因此等于b数组拷贝了一个a数组的引用数组等于,所以绿色的线依然是指向a数组在堆中分配的内存。
    那为什么第一个例子的值没有发生变化呢,原因,第一个例子中数组所有的元素都分配在栈中,没有引用类型,所以这个函数属于浅拷贝。
    顺便提一句:
    浅拷贝即拷贝引用而没有在堆中创建一个对象,等于一个对象有两个引用;
    深拷贝:需要拷贝当前引用在堆中所指向的内容,根据这个内容创建一个新的对象(并为属性分配新的空间)。
    另外在还可以用二维数组来验证:
    因为二维数组存放的也是引用;

    public class TestArrayCopy
    {
     public static void main(String [] args)
     {
      int[][] intArray = {{1,2},{1,2,3},{3,4}};
      int[][] intArrayBak = new int[3][];
      System.arraycopy(intArray,0, intArrayBak, 0 , intArray.length );
      intArrayBak[1][1] = 100;
      for (int i=0; i< intArray.length; i++)
      {
       for (int j=0; j < intArray[i].length; j++)
       {
        System.out.print(intArray[i][j]);
       }
        System.out.println();
      }
      for (int i=0; i< intArrayBak.length; i++)
      {
       	for (int j=0; j < intArrayBak[i].length; j++)
       	{
        		System.out.print(intArrayBak[i][j]);
       	}
       	 System.out.println();
      }
      }
    

    希望对您有所帮助,大家共同进步 !!!嘻嘻哈哈!!!

    展开全文
  • 数组作为函数的参数 数组可以作为参数传递给方法。 public class Demo03 { public static void main(String[] args) { test01(new int[]{1,4,5,8,33}); } /** * @param array 数组作为参数 */ public ...

    数组作为函数的参数

    数组可以作为参数传递给方法。

    public class Demo03 {
        public static void main(String[] args) {
            test01(new int[]{1,4,5,8,33});
    
        }
    
    
        /**
         * @param array 数组作为参数
         */
        public static void test01(int[] array){
            for (int i = 0; i < array.length; i++) {
                System.out.print(array[i]+" ");
    
            }
        }
    
      
    

    多维数组

    多维数组可以看做是数组的数组,比如二维数组就是个特殊的一维数组,其中每个元素是一个一维数组;

    定义二维数组

    int a[][] = new int[2][3];
    

    以上数组可以看做是两行三列的数组;

    遍历二维数组:

    案例:

     public static void main(String[] args) {
            int[][] arr = {{11,22},{33,44},{55,66}};
            System.out.println(arr[0][1]);
    
            for(int i =0;i<arr.length; i++){
                for (int j = 0;j<arr[i].length;j++){
                     System.out.println(arr[i][j]);
                }
    
        }
    
    
        }
    
    展开全文
  • 要想改变默认的排列顺序,不能使用基本类型(int,double, char),而要使用它们对应的类
  • Java 数组

    千次阅读 2018-05-24 14:55:06
    Java 语言中提供的数组是用来存储固定大小的同类型元素。你可以声明一个数组变量,如 numbers[100] 来代替直接声明 100 个独立变量 number0,number1,....,number99。本教程将为大家介绍 Java 数组的声明、创建和...
  • Java数组

    2016-03-01 09:54:53
    数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。 Java语言中提供的数组是用来...本教程将为大家介绍Java数组的声明、创建和初始化,并给出其对应的代码。 声明
  • 连续,数据类型要完全相同,大小固定 数组的初始化分为静态初始化和动态初始化两种 所谓静态初始化就是在数组的初始赋值的时候就给定了数值,后面除非对初始化的值进行修改,其他情况改变不了数组的值,这个类似于...
  • java数组删除数组元素When we create an array in Java, we specify its data type and size. This is used by JVM to allocates the necessary memory for array elements. There are no specific methods to ...
  • 这是由于C/C++的原生数组实质上只是一个指针而已, 不像Java中的数组还带有一个存储大小的字段. 那么, C++中就真的没法优雅的只传入数组吗?答案是否定的, 虽然C++的原生数组不算是对象, 没有将大小也封装到数组中, ...
  • Java数组详解

    千次阅读 多人点赞 2021-04-14 17:40:47
    在我们了解数组这个概念之前,我们先思考下面几个问题。 如果我们需要两个数据,那么直接创建两个变量即可 int a; int b; 如果需要五个数据,那么可以创建五个变量 int a; int b; int c; int d; int f; ...
  • 编写一个程序,初始化一个 3x5的二维 double 型数组,并利用一个基于变长数组函数把该函数赋值到另 一个二维数组,另外再写一个基于变长数组函数来显示两个数组的内容。这两个函数应该能够处理任意的 NxM数组. ...
  • JNI学习笔记:数组作为函数参数

    千次阅读 2018-03-21 17:54:53
    1 前言 2 一维数组作为函数参数传值的Demo 2.1 代码示例 2.2 程序分析 2.3 函数释义 3 数组作为返回值的Demo 3.1 代码示例 3.2 函数释义 ...4 一维数组作为函数参数...Java代码传递数组到C++中,主要通过JNI的函数来...
  • scala数组集合函数大全

    千次阅读 2020-07-22 21:22:36
    合并数组返回一个新数组,若不同类型以左边为准 左边类型 Array(1 ,2) ++ List(7,8,9) res44: Array[Int] = Array(1, 2, 7, 8, 9) union 合并两个序列,同操作符 ++ 左边类型 Array(1,2) union List(...
  • java定义数组的方式: int a[]=new int[2]  int b[]={1,2}  int c[]=new int[]{1,2} js定义数组的方式: var a={1,2} var b=new Array() var c=new Array(3) 2.性质 java数组值存在堆中,毕竟堆的内存...
  • Java 数组综述

    千次阅读 2016-12-05 21:44:59
    本文主要阐述了 Java 中与数组的知识,主要从 数组与容器、数组的创建与初始化、数组与泛型、数组与可变参数列表、Arrays 工具类的实用功能 五个方面来对数组进行详细说明和总结。
  • 封装自己的java数组

    2018-12-13 13:13:51
    最近研究了下Arraylist的底层实现,我在这里基于Arraylist底层的实现思想,这里基于对java数组进行一个简单的封装,实现一个类似Arraylist的自定义的数组类。 1.封装数组类 在我们自定义的数组中要指定一个容量...
  • Java 数组声明数组变量:dataType[] arrayRefVar; double[] myList;创建数组java语言使用new操作符来创建数组,语法如下:arrayRefVar = new datatype[arraySize];上面的语法语句做了两件事情:1.使用dataType...
  • 深入理解 Java 数组

    2019-12-16 15:27:07
    本文已归档到:「javacore」 ???? 本文中的示例代码已归档到:「javacore」 1. 简介 1.1. 数组的特性 数组对于每一门编程语言来说都是重要的数据结构之一,当然不同语言对数组的实现及处理也不尽相同。几乎所有...
  • Java 数组length总结

    千次阅读 2014-04-22 11:42:16
    Java中,数组下标都是从0开始的,数组中的元素ge
  • 大家好,现在遇到了一个实际问题。一般情况下定义一个数组...还有,像List,ArrayList中获取第i元素的get(i)函数中的i都是int型,但都会涉及到长度大于int的最大值问题,大家遇到这个问题是怎么解决的? 先谢谢大家了。
  • Java数组和链表的区别

    千次阅读 2017-03-08 11:29:04
    Java数组和链表的区别从数据结构上说,数组的内存空间是连续的,我们创建数组的时候系统就会为我们开辟固定数目的内存空间,如果内存不足,就会创建失败,例如创建数组的两种方式: int[] a=new int[3]; int[] b=...
  • JAVA数组常用方法

    2014-04-20 11:32:41
    虽然与数组相比,容器能够自动调整自己的尺寸大小,但是其效率远低于数组数组是一种效率最高的存储和随机访问对象引用序列的方式。JAVA的类库java.util.Arrays提供了诸多操作数组的方法,在此对常用的方法做个简单...
  • 关于JAVA数组

    2007-08-04 11:37:00
    我以前对C++比较熟悉,所以就想当然将C++中的数组Java中的数组画上了等号。读过《TIJ》之后我发现并不是这么回事,所以,完全应该重新认识Java中的数组。这篇文章不是对Java数组的全面介绍,只是我的一些心得。...
  • java数组典型例题

    千次阅读 2018-07-15 14:59:15
    折半查找target:8array:0 0 1 2 2 3 5 5 8 12 22 34 折半查找(二分法):对一组有序的数进行查询,具体的查询过程,通过对比目标数与中间数的大小使用二分法之前要把数组进行排序创建一个类binarySearch用于...
  • c++传递数组函数

    2016-03-25 21:49:01
    C++ 不允许向函数传递一个完整的数组作为参数,但是,您可以通过指定不带索引的数组名来传递一个指向数组的指针。 如果您想要在函数中传递一个一维数组作为参数,您必须以下面三种方式来声明函数形式参数,这三种...
  • 如何将二维数组作为函数的参数传递

    万次阅读 多人点赞 2018-12-13 20:36:36
    如何将二维数组作为函数的参数传递    今天写程序的时候要用到二维数组作参数传给一个函数,我发现将二维数组作参数进行传递还不是想象得那么简单里,但是最后我也解决了遇到的问题,所以这篇文章主要介绍如何...
  • java数组简介

    千次阅读 2011-11-04 17:10:18
     数组Java中的能随机存储和访问reference序列的诸多方法中的,最高效的一种。  数组是一个简单的线性序列,所有它可以快速的访问其中的元素。  但是速度是有代价的;当你创建了一个数组之后,它的容量就固定...
  • 如果我们要编写一个函数对这个数组进行处理,我们应该怎样声明函数的形参,又怎样在调用函数时引入二维数组这个参数呢? 首先我们来看对一维数组是怎么做的 void main() { int vec[n]; fun1(vec); } 对...
  • Java 数组的详解

    千次阅读 2016-07-12 12:06:22
    如何解决这个问题,Java语言提供了数组(array)的数据结构,是一个容器可以存储相同数据类型的元素,可以将100个数存储到数组中。这时候数组就有很大的帮助了~ 1.数组的概念  同一种类型数据的集合。其实数组就是...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 195,119
精华内容 78,047
关键字:

java数组大小函数

java 订阅