`
沉沦的夏天
  • 浏览: 10643 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

数组小结

阅读更多

   数组是一种在内存中连续分布的数据结构,很方便存储和取出。

   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超级全局变量数组小结

    在Web开发中,PHP是一种广泛使用的服务器端脚本语言,它提供了一组特殊的全局变量数组,这些数组被称为超级全局变量数组或预定义数组。这些数组在PHP脚本运行时自动创建,并且可以在脚本的任何地方使用,无需显式...

    <指针与数组定义小结>

    数组名在很多情况下可以被视为指向数组首元素的指针,但需要注意的是,数组不是指针,它们在内存中是一段连续的空间。而指针可以被赋值、传递给函数或动态调整其指向的内存位置。 总的来说,掌握指针和数组的概念及...

    C语言中数组的一些基本知识小结

    初始化数组 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编程语言中,数组和字符串是两种非常重要的数据类型,它们在处理大量数据或文本时扮演着至关重要的角色。本文将围绕标题“java数组与字符串用法小结”及描述中的知识点进行详细...

    Java完美编程(第3版).pdf

     小结   自测题参考答案   编程项目  第2章 控制台输入和输出   引言   前导知识   2.1 屏幕输出   2.2 使用scanner类的控制台输入   小结   自测题参考答案   编程项目  第3章 控制流  ...

    PHP数组遍历方法小结

    ### PHP数组遍历方法小结 在PHP编程中,数组是一种非常重要的数据结构,用于存储一系列数据。PHP支持多种类型的数组,包括索引数组、关联数组以及多维数组等。对于数组的操作,尤其是遍历操作,在开发过程中极为...

    大一c语言数组实验心得.docx

    本文档主要介绍了 C 语言数组的实验心得,包括一维数组和二维数组的定义、赋值和输入输出的方法,字符数组和字符串函数的使用,以及与数组有关的算法特别是排序算法。通过实验和实践,掌握了数组的使用方法,并对...

    javascript数组去重小结_.docx

    JavaScript数组去重是编程面试中常见的算法问题,主要目的是消除数组中的重复元素,确保每个元素在结果数组中只出现一次。本文将总结四种常见的JavaScript数组去重方法,并分析它们的优缺点。 首先,我们来看**循环...

    Shell脚本数组操作小结

    Shell脚本中的数组操作是日常自动化任务中非常实用的功能,特别是在处理批量数据和流程控制时。下面我们将详细探讨数组的定义、读取、替换、删除、复制和计算等操作。 ### 定义数组 在Bash中,数组的定义非常简单...

    C#初始化数组的方法小结

    在C#编程语言中,数组是一种非常基础且重要的数据结构,用于存储同类型的数据集合。本文将详细讨论C#中初始化一维数组和多维数组的三种常见方法,以供学习和参考。 首先,我们来看一维数组的初始化: 1. **直接...

    C++ primer 第4版 原书+习题解答+源码 清晰pdf

     小结  术语  第一部分 基本语言  第2章 变量和基本类型  2.1 基本内置类型  2.2 字面值常量  2.3 变量  2.4 const限定符  2.5 引用  2.6 typedef名字  2.7 枚举  2.8 类类型  2.9 编写...

    C++Primer中文版(第4版).part4

     小结  术语  第一部分 基本语言  第2章 变量和基本类型  2.1 基本内置类型  2.2 字面值常量  2.3 变量  2.4 const限定符  2.5 引用  2.6 typedef名字  2.7 枚举  2.8 类类型  2.9 编写...

    第6章数组和广义表第4讲-小结.pptx

    本章主要讲解了数组和广义表的相关概念和特性,特别是对数组的深入理解。数组是一种数据结构,它以固定大小的数据类型存储同一类型的元素集合,通过一个索引(下标)来访问这些元素。数组的基本操作包括读取和修改...

    EH数组班课时学习小结PPT课件.pptx

    这份“EH数组班课时学习小结PPT课件”主要介绍了数组运算的一些核心概念和运行机制,特别是如何通过多流水线作业和自适应法则来理解和优化数组运算。 1. **多流水线作业**:这是一种策略,将复杂的运算拆分为多个更...

    js数组去重的N种方法(小结)

    在JavaScript中,数组去重是一个常见的需求,旨在从数组中删除重复的元素,仅保留唯一的元素。本文介绍了多种js数组去重的方法,并按照ES5和ES6的标准进行了区分。以下是对这些方法的知识点总结。 1. ES5 实现方法...

    python遍历数组的方法小结

    本文实例总结了python遍历数组的方法。分享给大家供大家参考。具体分析如下: 下面介绍两种遍历数组的方法,一种是直接通过for in 遍历数组,另外一种是通过rang函数先获得数组长度,在根据索引遍历数组 第一种,最...

Global site tag (gtag.js) - Google Analytics