数组是一种在内存中连续分布的数据结构,很方便存储和取出。
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; } }
编程基础不太好,如有概念等错误欢迎指导!
相关推荐
在Web开发中,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}; // 指定元素个数...
### Java数组与字符串用法小结 在Java编程语言中,数组和字符串是两种非常重要的数据类型,它们在处理大量数据或文本时扮演着至关重要的角色。本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细...
小结 自测题参考答案 编程项目 第2章 控制台输入和输出 引言 前导知识 2.1 屏幕输出 2.2 使用scanner类的控制台输入 小结 自测题参考答案 编程项目 第3章 控制流 ...
### PHP数组遍历方法小结 在PHP编程中,数组是一种非常重要的数据结构,用于存储一系列数据。PHP支持多种类型的数组,包括索引数组、关联数组以及多维数组等。对于数组的操作,尤其是遍历操作,在开发过程中极为...
本文档主要介绍了 C 语言数组的实验心得,包括一维数组和二维数组的定义、赋值和输入输出的方法,字符数组和字符串函数的使用,以及与数组有关的算法特别是排序算法。通过实验和实践,掌握了数组的使用方法,并对...
JavaScript数组去重是编程面试中常见的算法问题,主要目的是消除数组中的重复元素,确保每个元素在结果数组中只出现一次。本文将总结四种常见的JavaScript数组去重方法,并分析它们的优缺点。 首先,我们来看**循环...
Shell脚本中的数组操作是日常自动化任务中非常实用的功能,特别是在处理批量数据和流程控制时。下面我们将详细探讨数组的定义、读取、替换、删除、复制和计算等操作。 ### 定义数组 在Bash中,数组的定义非常简单...
在C#编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的数据集合。本文将详细讨论C#中初始化一维数组和多维数组的三种常见方法,以供学习和参考。 首先,我们来看一维数组的初始化: 1. **直接...
小结 术语 第一部分 基本语言 第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 编写...
本章主要讲解了数组和广义表的相关概念和特性,特别是对数组的深入理解。数组是一种数据结构,它以固定大小的数据类型存储同一类型的元素集合,通过一个索引(下标)来访问这些元素。数组的基本操作包括读取和修改...
这份“EH数组班课时学习小结PPT课件”主要介绍了数组运算的一些核心概念和运行机制,特别是如何通过多流水线作业和自适应法则来理解和优化数组运算。 1. **多流水线作业**:这是一种策略,将复杂的运算拆分为多个更...
在JavaScript中,数组去重是一个常见的需求,旨在从数组中删除重复的元素,仅保留唯一的元素。本文介绍了多种js数组去重的方法,并按照ES5和ES6的标准进行了区分。以下是对这些方法的知识点总结。 1. ES5 实现方法...
本文实例总结了python遍历数组的方法。分享给大家供大家参考。具体分析如下: 下面介绍两种遍历数组的方法,一种是直接通过for in 遍历数组,另外一种是通过rang函数先获得数组长度,在根据索引遍历数组 第一种,最...