java基础之数组

来源:互联网 发布:武汉烽火网络 编辑:程序博客网 时间:2024/06/11 02:02

(一)数组声明

数组是引用类型。数组必须先声明,再使用。

dataType[]arrayRefVar;// 首选的方法

dataTypearrayRefVar[];// 效果相同,但不是首选方法

分析好数据的内存分配,数组是引用类型,堆内存的分配。

注意:

针对数组提供了length属性来获取数组的长度

针对字符串提供了length()方法来获取字符串的长度

针对泛型集合类提供了size()方法来获取元素的个数



(二)数组初始化

1、动态初始化

数组定义与为数组元素分配空间和赋值的操作分开进行。

例如:int[ ]  a;      a = new  int[3];     a[0] = 1;  a[1] = 2;  a[2] = 3;

2、静态初始化

在定义数组的同时就为数组元素分配空间并赋值。

int  a[ ]  =  {1 ,  2,  3};


(三)二维数组

二维数组的本质就是多个一维数组的组合。多维的与之类似。

下面哪个语句正确地声明一个整型的二维数组? 多选

A int a[][] = new int[][]; 

B int a[10][10] = new int[][]; 

C int a[][] = new int[10][10]; 

D int [][]a = new int[10][10]; 

E int []a[] = new int[10][10];



答案是CDE 

a[]是一维数组,又定义 int[] 一维数组,所以合起来就是二维数组int[] a[] 与int[][] a 等效
1、动态初始化

  1.  String s[][] ;   
  2.         s = new String[3][] ;   
  3.         s[0] = new String[2] ;   
  4.         s[1] = new String[3] ;   
  5.         s[2] = new String[2] ;  
2、静态初始化

 int a[][] = {{1,2},{3,4,5,6},{7,8,9}} ;   


(四)数组与算法

需要结合算法,对数据进行排序和搜索。

同时根据内存的分析,如何提高效率。

选择排序:把第一个数与他后面的数进行比较,如果顺序则继续与后面比较,如果逆序则两数交换位置,继续将第一个数与交换位置后的数进行比较,这样就完成了第一轮排序。同理将第二位与其后的数比较,直到数组有序为止。

public static void selectSort(int arr[]){
            for (int i = 0; i < arr.length-1; i++) {
                for (int j = i+1; j < arr.length; j++) {
                    if(arr[j]<arr[i]){
                        int temp=arr[i];
                        arr[i]=arr[j];
                        arr[j]=temp;
                    }
                }
            }
        }

冒泡排序:将第一个数与相邻的数进行比较,如果顺序则继续第二个数与后面相邻的书进行比较;如果逆序则交换位置,继续和后面相邻的数进行比较,完成第一趟冒泡排序。同理,直到数组有序。

private static void 冒泡排序(int[] arr) {
        for (int j = 0; j < arr.length-1; j++) {
            for(int i=0;i<arr.length-1-j;i++){
            if(arr[i]>arr[i+1]){
                int temp=arr[i];
                arr[i]=arr[i+1];
                arr[i+1]=temp;
                }
            }
        }      
    }

(五)操作数组(Arrays类)(默认是升序)

java.util.Arrays 类能方便地操作数组,它提供的所有方法都是静态的。

  • 给数组赋值:通过 fill 方法。
  • 对数组排序:通过 sort 方法,默认是升序。
  • 比较数组:通过 equals 方法比较数组中元素值是否相等。
  • 查找数组元素:通过 binarySearch 方法能对排序好的数组进行二分查找法操作。:binarySearch(数组,要搜索的数据);
注意:Arrays类中的sort()使用的是“经过调优的快速排序法”;

调用binarySearch()方法进行搜索时,需要先对数据进行排序,调用sort()方法排序。


搜索方法的简介:

binarySearch(int[] a, int fromIndex, int toIndex, int key) 
          使用二分搜索法来搜索指定的 int 型数组的范围,以获得指定的值。

binarySearch(int[] a, int key) 
          使用二分搜索法来搜索指定的 int 型数组,以获得指定的值。


排序方法的简介:

sort(int[] a) 
          对指定的 int 型数组按数字升序进行排序。

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

sort(T[] a, Comparator<? super T> c) 
          根据指定比较器产生的顺序对指定对象数组进行排序。

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

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

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

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


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

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

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

结合Arrays详解

一、Comparable接口

 Comparable是排序接口。若一个类实现了Comparable接口,就意味着该类支持排序。实现了Comparable接口的类的对象的列表或数组可以通过Collections.sort或Arrays.sort进行自动排序。

public class Person implements Comparable<Person>{    String name;    int age;    public Person(String name, int age)    {        super();        this.name = name;        this.age = age;    }    public String getName()    {        return name;    }    public int getAge()    {        return age;    }    @Override    public int compareTo(Person p)    {        return this.age-p.getAge();    }    public static void main(String[] args)    {        Person[] people=new Person[]{new Person("xujian", 20),new Person("xiewei", 10)};        System.out.println("排序前");        for (Person person : people)        {            System.out.print(person.getName()+":"+person.getAge());        }        Arrays.sort(people);        System.out.println("\n排序后");        for (Person person : people)        {            System.out.print(person.getName()+":"+person.getAge());        }    }}

二、Comparator简介

public class PersonCompartor implements Comparator<Person>{    @Override    public int compare(Person o1, Person o2)    {        return o1.getAge()-o2.getAge();    }}

调用方法:


 Arrays.sort(people,new PersonCompartor());