数组是一种在内存中连续分布的数据结构,很方便存储和取出。
java中一维数组定义几种格式如下:(直接赋值时就不能规定长度)
1.数据类型 [] 数组名 = {值,....}; 2.数据类型 [] 数组名 = new 数据类型[长度]; 3.数据类型 [] 数组名; 数组名 = new 数据类型[长度]; 4.数据类型 [] 数组名; 数组名 = new 数据类型[]{值,...};
类似的,二维数组格式如下:
1.数据类型 [][] 数组名 = {{值,....},...}; 2.数据类型 [][] 数组名 = new 数据类型[行][列]; 3.数据类型 [][] 数组名; 数组名 = new 数据类型[行][列]; 4.数据类型 [][] 数组名; 数组名 = new 数据类型[][]{{值,...},...};
我们可以用一些算法对数据进行排序,常见的几种算法原理和代码如下:
//冒泡法从小到大排列:首先将第一个元素与后面所有元素比较, //若第一个元素小则互换元素,这样就把最小的元素放在第一个位置, //后面第n个位置依次方法可获取到倒数第n小的元素 public int [] maopao(int array[]){ System.out.print("冒泡排序(从小到大): "); for(int i=0;i<array.length;i++){ for(int j=i+1;j<array.length;j++){ int temp; if(array[i]>array[j]){ //互换两位置元素 temp=array[j]; array[j]=array[i]; array[i]=temp; } } } return array; } //选择排序从大到小排序:找出元素中的最大值与第一个元素互换,倒数第二大的元素 //与第二个元素互换,依次下去 public int [] xuanze(int array[]){ System.out.print("选择排序(从大到小): "); for(int i=0;i<array.length;i++){ int max=array[i]; int num=i; for(int j=i+1;j<array.length;j++){ if(array[j]>max){ max=array[j]; num=j; } } array[num]=array[i]; array[i]=max; } return array; } //插入排序:即在一个已知有序排列的数字中,依次插入每个数字 //可以先把第一个数字和第二个数字先排成有序的,后面的数字依次插入; //以下方法从小到大; public int [] charu(int array[]){ System.out.print("插入排序(从小到大): "); //数组长度小于2时 if(array.length<2){ return array; } //先将前面两个数据排好序 else if(array[0]>array[1]){// int temp=array[0]; array[0]=array[1]; array[1]=temp; } //后面的依次插入 for(int i=2;i<array.length;i++){ int tem=array[i]; //插入的数字比第一个数字小时 if(tem<array[0]){ for(int k=i;k>0;k--){ array[k]=array[k-1]; } array[0]=tem; } else { //插入的数字比最后一个数字大时 if(tem>array[i-1]){ array[i]=tem; } else { ////插入的数字处于中间位置 for(int j=0;j<i;j++){ if(tem>=array[j]&&tem<=array[j+1]){ //把第j+1之后的数字往后推一位 for(int k=i;k>j+1;k--){ array[k]=array[k-1]; } array[j+1]=tem; break; } } } } } return array; } //希尔排序: 设定一定间距增量gap,每gap个抽出来排序, //然后减小gap,再按gap抽出数据排序,直到gap为1位置 public int [] hill(int array []){ System.out.print("希尔排序(从大到小): "); int length=array.length ; for(int gap=length/2;gap>0;gap=gap/2){ int flag; do{//直到相应gap间距的数字已排好序,flag不为1结束 flag=0; for(int i=0;i<length-gap;i++){ int j=i+gap; int temp; if(array[j]>array[i]){ temp=array[j]; array[j]=array[i]; array[i]=temp; flag=1; } } }while(flag==1); } return array; }
我们可i以创建一个动态数组(自定义队列),就可以弥补数组一旦定义长度固定不能改变的缺点。
其中用到了泛型,可以使动态数组只能添加指定数据类型。
以下是自定义队列接口:
//E就表示泛型,泛型实际上表示的是泛指Java中任意的一种数据类型, //如果指定了对应的数据类型,那么就只能存储该种数据类型的数据 public interface Mylist<E> { public void add(E e); public void add(E e,int index); public boolean remove(int index); public boolean remove(E e); public Object get(int index); public int size(); }
然后定义一个接口类,实现方法:
//自定义队列接口类 public class MyListImp<E> implements Mylist<E>{ //定义一个属性,用来存储元素的总数 private int size=0; //定义一个属性,用来存储数据的数组 private Object array []; public MyListImp(){ array = new Object[0]; } @Override//在动态数组后添加一个对象 public void add(E e) { Object temp []=new Object[array.length +1]; for(int i=0;i<array.length;i++){ temp[i]=array[i]; } temp[array.length]=e; size++; array=temp; } //在指定索引位置添加对象 public void add(E e, int index) { // TODO Auto-generated method stub Object [] temp = new Object [size+1]; for(int i=0;i<index;i++){ temp[i]=array[i]; } for(int i= index;i<size;i++){ temp[i+1]=array[i]; } size++; temp[index]=e; array=temp; } //移除索引位置的对象 public boolean remove(int index) { // TODO Auto-generated method stub System.out.println(size); Object [] temp = new Object [size-1]; if(index<0||index>=size) return false; else { for(int i=0;i<index;i++){ temp[i]=array[i]; } for(int i= index+1;i<size;i++){ temp[i-1]=array[i]; } size--; array=temp; return true; } } //移除某个对象 public boolean remove(E e) { // TODO Auto-generated method stub for(int i=0;i<size;i++){ if(this.get(i).equals(e)){ //这里调用了移除索引位置方法 this.remove(i); return true; } } return false; } //得到索引位置所在对象 public Object get(int index) { // TODO Auto-generated method stub if(index<0||index>=size){ return null; } return array[index]; } //得到动态数组的元素个数,即长度 public int size() { // TODO Auto-generated method stub size=array.length ; return size; } }
编程基础不太好,如有概念等错误欢迎指导!
相关推荐
指针与数组定义小结 指针与数组定义小结 指针与数组定义小结
PHP超级全局变量数组(Super Global Array),又称为PHP预定义数组,是由PHP引擎内置的,不需要开发者重新定义。 在PHP脚本运行时,PHP会自动将一些数据放在超级全局数组中
C语言数组排序小结
PHP数组遍历方法小结 PHP数组遍历方法小结
初始化数组 int ages[3] = {4, 6, 9}; int nums[10] = {1,2}; // 其余的自动初始化为0 int nums[] = {1,2,3,5,6}; // 根据大括号中的元素个数确定数组元素的个数 int nums[5] = {[4] = 3,[1] = 2}; // 指定元素个数...
javascript数组去重小结_.docx
java数组与字符串用法小结 讲述了字符串数组的读入和读出的一些用法 主要是stringtokenizer的用法
小结 自测题参考答案 编程项目 第2章 控制台输入和输出 引言 前导知识 2.1 屏幕输出 2.2 使用scanner类的控制台输入 小结 自测题参考答案 编程项目 第3章 控制流 ...
小结 术语 第一部分 基本语言 第2章 变量和基本类型 2.1 基本内置类型 2.2 字面值常量 2.3 变量 2.4 const限定符 2.5 引用 2.6 typedef名字 2.7 枚举 2.8 类类型 2.9 编写...
小结 术语 第一部分 基本语言 第2章 变量和基本类型 2.1 基本内置类型 2.2 字面值常量 2.3 变量 2.4 const限定符 2.5 引用 2.6 typedef名字 2.7 枚举 2.8 类类型 2.9 编写...
第6章数组和广义表第4讲-小结.pptx
JavaScript常用字符串与数组扩展函数小结_.docx
大一c语言数组实验心得.docx
EH数组班课时学习小结PPT课件.pptx
主要介绍了C#初始化数组的方法,总结分析了C#声明与初始化一维数组及多维数组的相关技巧,具有一定参考借鉴价值,需要的朋友可以参考下
主要介绍了Shell脚本数组用法小结,本文讲解了数组声明、数组遍历、获取数组长度、删除数组元素、数组切片等内容,需要的朋友可以参考下
EH数组班课时学习小结PPT学习教案.pptx
主要介绍了Shell脚本数组操作小结,包含数组定义、读取、替换、删除、复制、计算等,需要的朋友可以参考下