1.数组

  概念:同一种类型数据的集合。其实就是数组就是一个容器。

  好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。

  格式:

  ①. 元素类型[] 数组名 = new 元素类型[元素个数或数组长度];  例:int[] arr = new int[5];

  ②.元素类型[] 数组名 = new 元素类型[]{元素,元素,....};  例:int[] arr = new int[]{3,5,1,7}; 或者 int[] arr = {3,5,1,7};

  常见异常:

  ①.ArrayIndexOutOfBoundsException:  //当访问到数组中不存在的索引时,就会发生该异常。

  ②.NullPointerException:  //当引用型变量没有任何实体指向指向时,还在用其操作实体。就会发生该异常。

  ③.[I@c17164  //哈希数地址,@左边部分是实体的类型,这里代表整型数组;@右边是实体的哈希值。

2.数组常见操作

  ①.获取最值(最大值,最小值)

//方法一:值比较
public static int getMax(int[] arr)
{
//定义变量记录较大的值。
int maxElement = arr[0];//初始化为数组中的任意一个元素。
for(int x=1; x<arr.length; x++)
{
if(arr[x]>maxElement)
maxElement = arr[x];
}
return maxElement;
} //方法二:索引比较
public static int getMax_2(int[] arr)
{
//定义变量记录较大的值。
int maxIndex = 0;//初始化为数组中任意一个角标。
for(int x=1; x<arr.length; x++)
{
if(arr[x]>arr[maxIndex])
maxIndex = x;
}
return arr[maxIndex];
}

  ②.排序(选择排序,冒泡排序) Java中排序可用字典排序sort(byte[]) 进行排序

//交换数据
public static void swap(int[] arr,int a,int b)
{
int temp = arr[a];
arr[a] = arr[b];
arr[b] = temp;
} /*
选择排序。0-1,0-2,0-3
*/
public static void selectSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=x+1; y<arr.length; y++)
{
if(arr[x]>arr[y])
{
swap(arr,x,y);
}
}
}
}
/*
选择排序。索引法
*/
public static void selectSort_2(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
int num = arr[x];
int index = x;
for(int y=x+1; y<arr.length; y++)
{
if(num>arr[y])
{
num = arr[y];
index = y;
}
}
if(index!=x)
swap(arr,x,index);
}
}
/*
冒泡排序。0-1,1-2,2-3
*/
//方法①.
public static void bubbleSort(int[] arr)
{
for(int x=0; x<arr.length-1; x++)
{
for(int y=0; y<arr.length-1-x; y++) //此处-1为了避免索引越界。-x为了让外循环增加一次,内循环参数与比较的元素个数递减。
{
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}
}
}
}
//方法②
public static void bubbleSort_2(int[] arr)
{
for(int x=arr.length-1;x>0;x--)
{
for(int y=0;y<x;y++)
{              
if(arr[y]>arr[y+1])
{
swap(arr,y,y+1);
}         
}
}
}

③.查找(基本查找、二分查找)

/*
数组常见功能:基本查找法。
*/
public static int getIndex(int[] arr,int key)
{
for(int x=0; x<arr.length; x++)
{
if(arr[x]==key)
return x;
}
return -1;
}
/*
二分查找法(折半查找法)
*/
public static int halfSearch(int[] arr,int key) //查找的数组须有顺序的!
{
int max,min,mid;
min = 0;
max = arr.length-1;
mid = (max+min)/2; while(arr[mid]!=key)
{
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
if(max<min)
return -1;
mid = (max+min)/2;
}
return mid;
}
public static int halfSearch_2(int[] arr,int key)    //方法二,采用最大值最小大小比较
{
int max,min,mid;
min = 0;
max = arr.length-1;
while(min<=max)
{
mid = (max+min)>>1;
if(key>arr[mid])
min = mid + 1;
else if(key<arr[mid])
max = mid - 1;
else
return mid;
}
return -min-1;
}

注意:折半查找需要是有序序列,如果原本数据不是有序的,不能采用排序再查找,这样会破坏原来表索引。方法类似java中提供的binarySearch(arr,num),其中arr为数组,num为要查找的数,如果查找不到即返回-插入点-1。

④.进制转换

public static void trans(int num,int base,int offset)
{
if(num==0)
{
System.out.println("0");
return ;
}
//定义一个对应关系表。
char[] chs = {'0','1','2','3',
'4','5','6','7',
'8','9','A','B',
'C','D','E','F'};
/*
一会查表会查到比较的数据。
数据一多,就先存储起来,在进行操作。
所以定义一个数组。 临时容器。
*/
char[] arr = new char[32];
int pos = arr.length;
while(num!=0)
{
int temp = num & base;
arr[--pos] = chs[temp];
num = num >>> offset;
}
for(int x=pos ;x<arr.length; x++)
{
System.out.print(arr[x]);
}
System.out.println();
} //十进制-->十六进制。 Integer.toHexString
public static void toHex(int num)
{
trans(num,15,4);
}
//十进制-->二进制。 Integer.toBinaryString
public static void toBinary(int num)
{
trans(num,1,1);
}
//十进制-->八进制。 Integer.toOctalString
public static void toOctal(int num)
{
trans(num,7,3);
}

注:查表法:如果数据出现了对应关系,而且对应关系为一方是有序的数字编号,并作为索引使用,这时应想到采用数组的使用,将这些数据存储到数组中,根据运算结果作为索引之间去查数组中对应的元素即可。

3.二维数组

二维数组图解:

二维数组的操作:

//		int[] arr = new int[3];
// System.out.println(arr);//[I@1fb8ee3 @左边是实体的类型。 @右边是实体的哈希值。 // int[][] arr = new int[3][2];//创建一个二维数组,该数组中有3个一维数组,每一个一维数组中有2个元素。
// System.out.println(arr);//直接打印二维数组。 [[I@c17164
// System.out.println(arr[0]);//直接打印二维数组中的角标0的一维数组。 [I@1fb8ee3
// System.out.println(arr[0][0]);//直接打印二维数组中的角标0的一维数组中角标为0的元素。 0 // int[][] arr = new int[3][];
// System.out.println(arr);//直接打印二维数组。 [[I@c17164
// System.out.println(arr[0]);//直接打印二维数组中的角标0的一维数组。null
// System.out.println(arr[0][0]);//直接打印二维数组中的角标0的一维数组中角标为0的元素。 NullPointerException // int[][] arr = new int[3][2];
// System.out.println(arr.length);//打印二维数组的长度。其实就是一维数组的个数。
// System.out.println(arr[1].length);//打印二维数组中角标为1一维数组的长度。 int sum = 0;
int[][] arr = {{3,1,7},{5,8,2,9},{4,1}}; for(int x=0; x<arr.length; x++)
{
for(int y=0; y<arr[x].length; y++)
{
// System.out.print(arr[x][y]+",");
sum += arr[x][y]; }
}
System.out.println("sum="+sum);

附一:

  内存的划分:

  1.寄存器。

  2.本地方法区。(跟系统有关系)

  3.方法区。

  4.栈内存。

    存储的都是局部变量,而且变量所属的作用域一旦结束,该变量就自动释放。

  5.堆内存。

    存储是数组和对象(其实数组就是对象) 凡是new建立在堆中。

    特点:

    1,每一个实体都有首地址值。

    2,堆内存中的每一个变量都有默认初始化值,根据类型的不同而不同。整数是0,小数是0.0或者0.0f,boolean false,char '\u0000'。

    3,垃圾回收机制。

Java 基础入门随笔(6) JavaSE版——数组操作的更多相关文章

  1. Java 基础入门随笔(1) JavaSE版——java语言三种技术架构

    1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...

  2. Java 基础入门随笔(8) JavaSE版——静态static

    面向对象(2) this:代表对象.代表哪个对象呢?当前对象. 当成员变量和局部变量重名,可以用关键字this来区分. this就是所在函数所属对象的引用.(简单说:哪个对象调用了this所在的函数, ...

  3. Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换

    1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...

  4. Java 基础入门随笔(11) JavaSE版——继承、覆盖、抽象类

    1.面向对象的特征二:继承 定义: 指一个对象直接使用另一对象的属性和方法. 继承好处: 1.提供代码的复用性. 2.让类与类直接产生了关系,给第三个特征多态提供了前提. java中支持单继承.不直接 ...

  5. Java 基础入门随笔(9) JavaSE版——文档注释

    上节中写了一些static变量以及静态的方法的定义使用以及与非静态的差别,这节补充下: 如果在一个类中所有方法都为静态的,且无成员变量,这时候需要对对应的类进行限制该类无法创建对象,具体操作如下: p ...

  6. Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数

    面向对象 面向过程:对于面向过程思想,强调的是过程(动作). 面向对象:对于面向对象思想,强调的是对象(实体). 特点: 1,面向对象就是一种常见的思想.符合人们的思考习惯.2,面向对象的出现,将复杂 ...

  7. Java 基础入门随笔(10) JavaSE版——单例设计模式

    设计模式:对问题行之有效的解决方式.其实它是一种思想. 1.单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性.(单个实例) 使用单例设计模式需求:必须对于多个程序使用同一个配置信息对 ...

  8. Java 基础入门随笔(5) JavaSE版——函数重载

    1.函数 函数就是定义在类中具有特定功能的一段独立小程序,也称为方法. 定义函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...)         {      ...

  9. Java 基础入门随笔(4) JavaSE版——程序流程控制

    上一节对于运算符有了大致的了解,这一节针对程序流程控制进行复习!程序流程控制包括顺序结构.判断结构(if).选择结构(switch).循环结构. 1.判断结构 ①if语句的第一种格式:        ...

随机推荐

  1. [Debug] Inspect and Style an Element in DevTools that Normally Disappears when Inactive

    It’s handy to inspect an element in your browser’s DevTools when you need to experiment or tweak it’ ...

  2. [Debug] Node-sass

    Meet some problem when trying to install node-sass on windwos. Company has proxy settings, need to r ...

  3. System.AccessViolationException”类型的未经处理的异常在 System.Data.dll 中发生。其它信息:尝试读取或写入受保护的内存。这通常指示其它内存已损坏。

    错误背景: 操作系统:编程环境:VS2013.  语言:VB.net:  数据库:SQLserver2008 做数据库连接时.发生的错误: 错误提示为: 说明:用VB.net连接SQLServer数据 ...

  4. TextView设置成仅仅读

    TextView设置成仅仅读 方法一:代理 - (BOOL)textViewShouldBeginEditing:(UITextView *)textView { return NO; } 方法二:设 ...

  5. 【版本号公布】Jeecg-P3 1.0 公布,J2EE微服务框架(插件开发)

    JEECG-P3 1.0 公布了! JEECG-P3 1.0是一个J2EE微服务框架(插件开发). 特点:业务组件以JAR方式提供,插件模式.松耦合.可插拔.支持独立部署,也能够无缝集成Jeecg平台 ...

  6. lambda和委托那点事

    Lambda 简介 Lambda 表达式是一种可用于创建委托或表达式目录树类型的一种匿名函数(匿名方法+Lambda).通过使用 lambda 表达式,可以写入可作为参数传递或作为函数 调用值返回的本 ...

  7. 对“使用MyEclipse,写的jsp代码因有汉字而无法保存”问题的解决

    使用MyEclipse编辑jsp时.有时会出现"使用MyEclipse,写的jsp代码因有汉字而无法保存"的现象,怎样解决呢? Window-->Preferences--& ...

  8. JPA測试实例

    依赖架包 实体 import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.G ...

  9. 6个变态的C语言Hello World程序 之 雷人的程序语言

    以下的六个程序片段主要完毕这些事情: 输出Hello, World 混乱C语言的源码 以下的全部程序都能够在GCC下编译通过,仅仅有最后一个须要动用C++的编译器g++才干编程通过. hello1.c ...

  10. Zend Studio配置Xdebug

    按照网上的教程一直没有配置好,上官网看到一句话, If you don't know which one you need, please refer to the custom installati ...