java基础知识-(数组)

Java数组

一.  概述

  1.     定义:数组是一种数据结构,用来存储同一类型值的集合。

  2.     数组是存在下标索引的,通过下标可以获取指定位置的元素,数组小标是从0开始的,也就是说下标0对应的就是数组中第1个元素,可以很方便的对数组中的元素进行存取操作。

  3.     数组存在一维数组和多维数组。

二.  一维数组 

  1.     声明方式一

    A.     数据类型   数组名   =   new 数据类型[个数]     

           String s[] = new String[10];

    定义了一个长度为10的String类型的一维数组。

    B.     数据类型[]   数组名  =   new 数据类型[个数]

           String[] s = new String[10];

    定义了一个长度为10的String类型的一维数组。

    数组属于引用数据类型,它指向的是内存中的一个对象的地址。只要使用new对象产生一个对象或数组都会在堆内存中创建一块内存空间,然后将这块空间的内存地址赋给引用变量,

    以上只是声明创建一个大小为10的数组,但是没有给每一个元素赋值,所以体现出来的都是这个数据类型的默认值,即String类型的默认值为null。 

  2.     声明格式二

   A.     数据类型  数组名[]  = {元素1,元素2,元素3,……数值n};

int  a[] = {1,3,6,0,2,8,10};
   声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

     B.     数据类型[]  数组名  =  {元素1,元素2,元素3,……数值n};
        int[] a = {1,3,6,0,2,8,10};

   声明一个为数组长度为7的int类型数组,并静态的为数组每一个小标对应的元素赋值。

  3.     创建一个匿名数组

      new int[]{1,3,6,0,2,8,10};

  4.     数组与数组之间的赋值关系

      String s[] = new String[10];

     String t[] = s;

   

  5.     一维数组长度:数组名.length

  6.     一维数组的有效最大角标:数组名.length-1

三.  二维数组

  1.     定义:

    二维数组实际上是指数组元素为一维数组的一维数组,简单说也就是数组中的数组。

  2.     声明格式一  

    数据类型  数组名[][] =  new  数据类型[个数][个数];

    数据类型[][]   数组名= new    数据类型[个数][个数];

    int arry[] [] = new int[5][6];

  上述语句声明了一个二维数组,其中[5]表示该数组有(0~4)5行,每行有(0~5)6个元素,因此该数组有30个元素,其中[5]也可说是有5个一维数组,

  [6]可以说是每一个一维数组中有6个int型号的元素。

  数组new出来后,就在堆内存中开辟的内存空间,并将所在内存空间地址返回给arry数组变量,因为以上语句只是声明了一个数组并未没一个元素赋值,

  所以都是类型默认值,为0。

  array[0][0]=3;即给第一个一维数组中的第一个元素赋值.

  

  依此方式还可以和其他元素赋值。

  3.     声明格式二   

    int[][] arr = new int[3][];

    此二维数组中含有3个一维数组,每个一维数组的默认初始化值都为null,每个一维数组中的元素值都为0;可对每个一维数组赋值,如:
      arr[0] = new int[3];

     arr[1] = new int[2];

     arr[2] = new int[1];

    对每个一维数组中某个元素赋值:如:

arr[0][2]=90;

arr[1][1]=89;

arr[2][2]=78;

  

  4.     声明格式三  

    显式初始化二维数组:int[][] arr = {{1,5,7},{4,8},{3,9,20,12}}

      A.     以上数组定义了一个长度为3的数组,arr.length=3

      B.     数组中第一维数组的长度:arr[0].length=3

四.  数组的应用代码

  1. 获取一个数组中的最大值和最小值  

 1 public class ArrayMaxMinValue  {
 2     public static void main(String[] args)  {
 3         int[] array = {7,9,6,3,9,8,0,10,2,1};
 4         System.out.println("最大值: "+getMaxValue(array));
 5         System.out.println("最小值: "+getMinValue(array));
 6     }
 7     public static int getMaxValue(int 8         int max = a[0];//一开始假设最大值为a[0]
 9         for(int i = 1 ; i < a.length ;i++)  {
10               if(a[i] > max)  {
11                      max = a[i];//每一次比较将大值赋值给max变量存储
12                }
13          }
14        return max;
15     }
16      public static int getMinValue(int a[]) {
17            int min = 0;//一开始假设最小值为角标为0的元素
18            for(int i = 1 ; i < a.length ;i++)  {
19                 if(a[i] < a[min])  {
20                     min = i;//每一次比较将最小值的角标赋值给min变量存储
21                  }
22             }
23            return a[min];
24      }
25 }   

  2.对数组进行排序

 1 public class ArraySortTool  {
 2        public static void main(String[] args)  {
 3             int[] array = {7,9,6,3,9,8,0,10,2,1};
 4             System.out.println("排序前:");
 5             printArray(array);
 6             bubblSort(array);
 7             System.out.println("排序后:");
 8             printArray(array);
 9       }
10        //选择排序
11         public static void SelectSort(int[] a)  {
12            //外层循环写成i < a.length-1,是因为选择排序,
13           //当到最后一个元素的时候,就不需要进行选择排序的,因为数序已     经确定了
14           for(int i = 0 ; i < a.length-1 ; i++)  {
15              //内层循环写成i < a.length,是因为每一个选择用来比较的元素都要比较到最后//一个元素,
16             //int j = i+1是因为没一个元素都不需要和自身比较
17                for(int j = i+1 ; j < a.length ; j++)  {
18                      if(a[i] > a[j])  {
19                             //交换两个值
20                         int temp = a[j];
21                          a[j] = a[i];
22                         a[i] = temp;
23                      }
24                }
25           }
26      }
27       //冒泡排序
28       public static void bubblSort(int a[])  {
29          //a.length-1冒泡排序是每一次相邻两个元素进行比较,总共要比较a.length-1次
30            //int i=0 是因为比较是从角标0开始的
31           for(int i = 0 ; i < a.length-1; i++)  {
32            //a.length-1-i,第一轮全部计较,每轮比较都产生一个最值,
33               //下一轮这个最值就不用参与比较了
34             //int j = i+1因为是相邻比较,所以要改成int j = i+1
35                 for(int j = 0 ; j < a.length-1-i ; j++)  {
36                    //因为是两两比较所以要写成a[j] > a[j+1]
37                       if(a[j] > a[j+1])  {
38                                int temp = a[j+1];
39                               a[j+1] = a[j];
40                               a[j] = temp;
41                         }
42                   }
43             }
44         }
45         //用来打印数组
46         public static void printArray(int a[] )  {
47               System.out.print("[");
48              for(int i = 0 ; i < a.length ; i++)  {
49                   if(i == a.length-1)  {
50                        System.out.println(a[i]+"]");
51                   }
52                   else  {
53                        System.out.print(a[i]+",");
54                    }
55              }
56         }
57 }  

  3.查找数组中指定值的索引位置

  

 1 public class ArraySearchTool  {
 2          public static void main(String[] args)  {
 3               int[] array = {1,5,9,11,20,21,25,30};
 4               System.out.println(halfSearch2(array , 25));
 5               // System.out.println(oneByoneSearch(array , 10));
 6          }
 7           //遍历判断查找
 8           public static int oneByoneSearch(int[] a , int value)  {
 9                     for(int i = 0 ; i < a.length ; i++)  {
10                           if(a[i] == value)  {
11                                     return i;
12                           }
13                      }
14                      return -1;
15            }
16           //二分查找1
17            public static int halfSearch(int[] a , int value)  {
18                   int left = 0;
19                   int right = a.length-1;
20                   int mid = (left+right) >> 1;
21                   while( a[mid] != value)  {
22                           if(a[mid] > value)  {
23                                   right = mid-1;
24                            }
25                          else  {
26                                 left = mid+1;
27                           }
28                          if(left > right)  {
29                                return -1;
30                           }
31                           mid = (left+right)>>1;
32                   }
33                  return mid;
34           }
35            //二分查找2
36           public static int halfSearch2(int[] a, int value)  {
37                   int left = 0;
38                   int right = a.length-1;
39                   int mid;
40                   while( left <= right)  {
41                           mid = (left+right) >> 1;
42                          if(a[mid] == value)  {
43                                 return mid;
44                           }
45                         else if(a[mid] > value)  {
46                                 right = mid -1;
47                         }  else  {
48                                left = mid+1;
49                         }
50                   }
51                return -1;
52          }
53 }      

五:  编写一个类,类中提供方法可以将任何int类型的数值做八进制、二进制、十六进制转换

  

 1 public class toBintoHextoOctalDemo  {
 2
 3       public static void main(String[] args)  {
 4
 5             System.out.println(toBintoHextoOcta( 500 , 15 , 4 ));
 6
 7        }
 8
 9         public static String toBintoHextoOcta( int n , int a , int m ) {
10              char[] c = { ‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘ };
11              char[] ch = new char[32];
12             StringBuilder sb = new StringBuilder();
13             int pos = ch.length;
14             while( n != 0)  {
15                   ch[--pos] = c[ n & a ];
16                   n = n >>> m ;
17             }
18             for(int i = pos ; i < ch.length ; i++)  {
19                    sb.append(ch[i]);
20              }
21              return sb.toString();
22         }
23 }      

六    扩展应用

  int[] x ,y[];  àx一维数组,y二维数组。

  拆解步骤:

    int[] x;

    int[] y[];

    A.     x[0] = y;错误

    B.     y[0] = x;正确

    C.     y[0][0]=X;错误

    D.    x[0][0] =y;错误

    E.     y[0][0] =x[0]正确

时间: 2024-10-12 20:43:36

java基础知识-(数组)的相关文章

整理Java基础知识--数组1

Java 数组数组是用来存储固定大小的同类型的元素声明数组必须先声明 才能使用datatype[] arrayRefVar;//首选 []放在最后是为了C/C++的快速理解Javachar[] ch ;或者 char ch[];char ch = new char[arraySize];1.创建一个char数组 含有 arraySize元素2.把新建 char数组的引用 赋值给变量ch数组的使用 public class TestArr{ public static void main(Stri

java基础知识—数组

1.数组:是一个变量,存储相同数据类型的一组数据. 2.数据的优点:减少代码量.易查找. 3.数组的使用步骤: 1)声明数组:int scores []: 2)开辟空间:scores = new int [5]; 3)赋值:scores [0] = 100: 4)使用:scores [0] = scores [0] + 20; 4.数组的声明的三种方式: 1)int num[]=new int[5]{1,2,3,4,5}; 2)int num[]=new int[数组的长度]: 3)int nu

Java基础知识-数组与字符串

数组 声明 类型[] 数组名//建议使用 类型 数组名[] 数组声明后不会分配内存,必须new 数组名 = new 类型[大小] e.g. int [] arr = new int[8]; 使用 数组下标从0开始 赋值 数组名[下标]=数据 e.g. arr[5]=8; 访问 数组名[下标] e.g. System.out.println(arr[5]); 初始化 动态初始化 先声明,再赋值 静态初始化 声明的同时赋值:类型[] 数组名 = {数据1, 数据2, 数据3,-} e.g. int[

java基础知识回顾之javaIO类--内存操作流ByteArrayInputStream和ByteArrayOutputSteam(操作字节数组)

直接看代码: package cn.itcast.io.p6.bytestream; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; public class ByteArrayStreamDemo { /** * @param args * @throws IOException * 特点 * 1.内存操作流 * 2.不操作底层资源,不调

java基础知识回顾之---java String final类普通方法

辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      *      * 1,获取:     * 1.1 获取字符串中字符的个数(长度).     *         int length();     * 1.2 取字符串中的某一个字符,其中的参数index指的是字符串中序数.字符串的序数从0开始到length()-1 .     *       

6-12 JAVA基础知识1

声明:学习时是参考<JAVA开发实战经典>,李兴华编,清华大学出版社 (1)public class 类名称必须与文件名一致: (2)类名称每个单词首字母必须大写: (3)输出中使用"+"进行连接: (4)文档注释:/**--*/ (具体作用还未知,待后续补充编辑): (5)数据类型分为基本数据类型和引用数据类型.其中引用数据类型主要用于地址操作,包括类,接口,数组: (6)避免数据溢出的两种方法.1.如变量前加(long)强制转换:2.表达式的常量后加L变为long型:

学习Spring必学的Java基础知识(1)----反射

引述要学习Spring框架的技术内幕,必须事先掌握一些基本的Java知识,正所谓“登高必自卑,涉远必自迩”.以下几项Java知识和Spring框架息息相关,不可不学(我将通过一个系列分别介绍这些Java基础知识,希望对大家有所帮助.): [1] Java反射知识-->Spring IoC :http://www.iteye.com/topic/1123081 [2] Java动态代理-->Spring AOP :http://www.iteye.com/topic/1123293 [3] 属性

java基础知识回顾之---java String final类普通方法的应用之“按照字节截取字符串”

/*需求:在java中,字符串“abcd”与字符串“ab你好”的长度是一样,都是四个字符.但对应的字节数不同,一个汉字占两个字节.定义一个方法,按照最大的字节数来取子串.如:对于“ab你好”,如果取三个字节,那么子串就是ab与“你”字的半个,那么半个就要舍弃.如果去四个字节就是“ab你”,取五个字节还是“ab你”.*/ 代码:其实是一个解码和编码的问题,要明白UTF-8码表和GBK码表的区别,UTF-8中用三个字节代表一个汉字,GBK使用2个字节代表一个汉字. 且在码表中都是用数字存放这些汉字.

java基础知识回顾之javaIO类--RandomAccessFile类

java.io 类 RandomAccessFile java.lang.Object java.io.RandomAccessFile1.该类不是IO流中的子类.2.该类既能读又能写.3.该对象内部分装了一个字节数组,通过指针可以操作数组中的元素.4.其实该对象就是将字节输入流和输出流进行了封装.5.该对象只能对文件操作,目的和源只能是文件对象.通过看构造方法可以看得出来.RandomAccessFile(File file, String mode) RandomAccessFile(Str

java基础知识回顾之---java String final类 容易混淆的java String常量池内存分析

/** *   栈(Stack) :存放基本类型的变量数据和对象的引用,但对象本身不存放在栈中,而是存放在堆(new 出来的对象)或者常量池中(字符串常量对象存放  在常量池中). 堆(heap):存放所有new出来的对象. *   静态存储:存放静态成员(static定义的). 常量池(constant pool):在堆中分配出来的一块存储区域,存放储显式的String常量和基本类型常量(float.int等).另外,可以存储不经常改变的东西 *                       p