Java 基础入门随笔(6) JavaSE版——数组操作
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版——数组操作的更多相关文章
- Java 基础入门随笔(1) JavaSE版——java语言三种技术架构
1.java语言的三种技术架构: J2SE(java 2 Platform Standard Edition):标准版,是为开发普通桌面和商务应用程序提供的解决方案.该技术体系是其他两者的基础,可以完 ...
- Java 基础入门随笔(8) JavaSE版——静态static
面向对象(2) this:代表对象.代表哪个对象呢?当前对象. 当成员变量和局部变量重名,可以用关键字this来区分. this就是所在函数所属对象的引用.(简单说:哪个对象调用了this所在的函数, ...
- Java 基础入门随笔(2) JavaSE版——关键字、进制转换、类型转换
1.Java语言-关键字 关键字:被java语言赋予了特殊含义的词,特点是所有的字母都为小写. java涉及到的关键字整理: 用于定义数据类型的关键字 class interface byte sho ...
- Java 基础入门随笔(11) JavaSE版——继承、覆盖、抽象类
1.面向对象的特征二:继承 定义: 指一个对象直接使用另一对象的属性和方法. 继承好处: 1.提供代码的复用性. 2.让类与类直接产生了关系,给第三个特征多态提供了前提. java中支持单继承.不直接 ...
- Java 基础入门随笔(9) JavaSE版——文档注释
上节中写了一些static变量以及静态的方法的定义使用以及与非静态的差别,这节补充下: 如果在一个类中所有方法都为静态的,且无成员变量,这时候需要对对应的类进行限制该类无法创建对象,具体操作如下: p ...
- Java 基础入门随笔(7) JavaSE版——面向对象定义、特征:封装、构造函数
面向对象 面向过程:对于面向过程思想,强调的是过程(动作). 面向对象:对于面向对象思想,强调的是对象(实体). 特点: 1,面向对象就是一种常见的思想.符合人们的思考习惯.2,面向对象的出现,将复杂 ...
- Java 基础入门随笔(10) JavaSE版——单例设计模式
设计模式:对问题行之有效的解决方式.其实它是一种思想. 1.单例设计模式. 解决的问题:就是可以保证一个类在内存中的对象唯一性.(单个实例) 使用单例设计模式需求:必须对于多个程序使用同一个配置信息对 ...
- Java 基础入门随笔(5) JavaSE版——函数重载
1.函数 函数就是定义在类中具有特定功能的一段独立小程序,也称为方法. 定义函数的格式: 修饰符 返回值类型 函数名(参数类型 形式参数1,参数类型 形式参数2,...) { ...
- Java 基础入门随笔(4) JavaSE版——程序流程控制
上一节对于运算符有了大致的了解,这一节针对程序流程控制进行复习!程序流程控制包括顺序结构.判断结构(if).选择结构(switch).循环结构. 1.判断结构 ①if语句的第一种格式: ...
随机推荐
- Skype for Business七大新功能
Lync Server 2013的下一版本号.Skype for Business将于2015年4月正式公布,下面是七大新功能. "呼叫监听"(Call Monitor)--假设你 ...
- xib或者storyboard设置颜色偏问题(与代码设置颜色不一致)
选中xib中的label,在右边栏的第三个标签页中第三项是User Defined Runtime Attributes 添加一个keyPath,keyPath值为layer.borderWidth, ...
- Codeforces 455B A Lot of Games 字典树上博弈
题目链接:点击打开链接 题意: 给定n个字符串,k局游戏 对于每局游戏,2个玩家轮流给一个空串加入一个小写字母使得加完后的字符串不是n个字符串的前缀. 输家下一轮先手 问是先手必胜还是后手必胜 思路: ...
- linux 经常使用网络命令
1. ifconfig ifconfig主要是能手动启动.观察和改动网络接口的相关參数.能改动的參数许多,包含IP參数及MTU等都能改动,他的语法例如以下: [root@linux ~]# ifco ...
- python 时区
Python中的时区处理 http://tech.glowing.com/cn/dealing-with-timezone-in-python/ Python时区设置方法与pytz查询时区教程_py ...
- 在linux上处理base64加密和解密
http://snailwarrior.blog.51cto.com/680306/142472/ 2.从标准输入读取文件内容,base64编码并打印到标准输出 [root@localhost tes ...
- YTU 2503: 大斐波那契数列
2503: 大斐波那契数列 时间限制: 1 Sec 内存限制: 200 MB 提交: 974 解决: 400 题目描述 斐波那契数列,又称黄金比例数列,指的是这样一个数列:0.1.1.2.3.5. ...
- 22.Extjs Panel中显示多行工具栏(tbar)
转自:http://blog.sina.com.cn/s/blog_454fbf740100t0xj.html 在应用程序的制作中,我们经常性的会用到工具栏,在Extjs中Panel中提供了tbar和 ...
- Android 网络请求及数据处理
Android 网络请求: 1.Volley http://blog.csdn.net/t12x3456/article/details/9221611 2.Android-Async-Http ...
- E20171123-sl
conform vi. 符合; 遵照; 适应环境; vi. 符合; 遵照; 适应环境; adj. 一致的; 顺从的; investigat ...