`
小篮子java的家
  • 浏览: 31069 次
  • 性别: Icon_minigender_2
社区版块
存档分类
最新评论

数组,队列,泛型

阅读更多
数组注意:

数组是引用数据类型 是一种线性结构

length为其唯一的属性 下标控制操作

一维数组

实例化数组

实例化数组的几种类型---实例化后要想赋值 必须循环

数据类型[] 数组名 = new 数据类型[长度];-----声明的同时实例化

数据类型[] 数组名 ;
数组名== new 数据类型[长度];-------先声明后实例化


赋值的几种类型

数据类型[] 数组名 = new 数据类型[长度]{值...}------实例化并赋值

数据类型[] 数组名 ={值...}----直接赋值开辟空间

数据类型[] 数组名 ;
数组名== new 数据类型[长度]{值...};-------先声明后实例化赋值

二维数组
实例化方面与赋值一维数组无异  只要是[]改为2个即可 还有{值}也要有行列之分

差异之处:
一维数组数组名.length直接表示数组长度
二二维数组里面数组名.length表示 行数 数据名[].length表示列数


优势
访问速度快  能存储多个同类型的数据

劣势
只能存储同一类型数据
空间不能加载或缩短
只有相同类型的数组才可以赋给对方


队列

一种类 封装对数组的操作 解决数组中空间问题 只能存储一种数据类型的问题

使用泛型E这个概念实现多种数据存储


任务:
1.随机2000-3000之间的数据,存入到一维数组中,并且使用三种方式对数组排序。
2.实例化一个二维数组,给数组中的每一个元素赋值,然后找出最大值的元素,但是记住不要改变数组。
3.实现一个通用的队列
4.数组和队列总结

1 随机2000-3000之间的数据,存入到一维数组中,并且使用三种方式对数组排序。
思路 首先创建一个数组对象
然后 利用循环和随机函数对一维数组赋值

插入排序思路 
外层循环选取元素 从第二个元素开始 到最后一个元素
选取一个元素为当前元素进入内存循环
假设前面的元素是有序的 将这个元素与其前面的比较若大的话内存循环
结束 若小的继续比较直到大于它前面的元素

冒泡排序 两两比较 依次交换
外层循环控制趟数一共是此数组的长度-1次 内存循环控制进行两两比较
第一次将最大的数排好序 再是第二大的 按照此规则 依次排序

选择排序
将当前元素下标赋给一个变量 然后下标为变量的元素与其他元素比较 将较小的元素小标       的放入到变量中 最后判断变量和元素的小标的和当前元素下标是否相同 使得当前元素是最        小的
		
package cn.tjn.study0713;

import java.util.Random;

public class Text1Array {

	public static void main(String[] args) {
		int array[] = creatArray(10);
		print(array);
		System.out.println("===================插入排序=================");
		charu(array);
		print(array);
		System.out.println("===================冒泡排序=================");
		maopao(array);
		print(array);
		System.out.println("===================选择排序=================");
		xuanze(array);
		print(array);
	}

	public static int[] creatArray(int length) {
		int array[] = new int[length];
		Random rand = new Random();
		for (int i = 0; i < array.length; i++) {
			array[i] = rand.nextInt(1000) + 2000;
		}
		return array;
	}

	public static void print(int[] array) {
		for (int i = 0; i < array.length; i++) {
			System.out.print(array[i] + "\t");
		}
		System.out.println();
	}

	// 直接插入排序
	public static void charu(int[] array) {
		for (int i = 1; i < array.length; i++) {
			int k = array[i];
			for (int j = i; j >= 1; j--) {
				if (k < array[j - 1]) {
					array[j] = array[j-1];
					array[j-1] = k;
				}
			}
		}
	}

	// 冒泡排序
	public static void maopao(int[] array) {
		for (int i = 0; i < array.length - 1; i++) {
			for (int j = 0; j < array.length - 1 - i; j++) {
				if (array[j] > array[j + 1]) {
					int temp = array[j];
					array[j] = array[j+1];
					array[j+1] = temp;
				}
			}
		}
	}

	// 选择排序

	public static void xuanze(int[] array) {
		for (int i = 0; i < array.length - 1; i++) {

			int k = i;

			for (int j = i+1; j < array.length; j++) {

				if (array[j] < array[k]) {
					k = j;
				}

				if (k != i) {
					int temp = array[i];
					array[i] = array[k];
					array[k] = temp;
				}
			}            
		}
	}
}


2.实例化一个二维数组,给数组中的每一个元素赋值,然后找出最大值的元素,但是记住不要改变数组。


思路 实例化一个二维数组 并利用2层循环赋值
再利用循环找出最大值 具体 首先将第一个元素假设为最大的赋给变量 然后利用循环使表量和其他的元素比较 将较大的放入变量中  最后输出
ackage cn.tjn.study0713;

import java.util.Random;

public class Text2Array {

	
	public static void main(String[] args) {
	 int[][] array = creat(5,5);
	 print(array);
	 max(array);
	 
	}
	public static  int[][] creat(int row, int column){
		 int[][] array = new int [row][column];
		 Random rand = new Random();
		 for(int i=0;i<array.length;i++){
			 for(int j=0;j<array[i].length;j++){
				 array[i][j]=rand.nextInt(100);
			 } 
		 }
		 return array;
	}
	public static void max(int[][] array){
		int k=array[0][0];
		for(int i=0;i<array.length;i++){
			 for(int j=0;j<array[i].length;j++){
				if(k<=array[i][j]){
					k=array[i][j];
				}
			 } 
		}
			System.out.println(k);
		}
	
	
	public static void print(int[][] array){
		 for(int i=0;i<array.length;i++){
			 for(int j=0;j<array[i].length;j++){
				 System.out.print(array[i][j]+"\t");	
      }
			 System.out.println();
      }
	}
}


3.实现一个通用的队列
首先定义一个接口 写好所有要在队列中要实现的方法 然后还需要一个测试类
看队列中的中的方法是否正确
注意原数组的实例化 在队列中的构造函数 要区分 obl.length 和 initcount的区别
obl.length表示数组的长度  initcount新增元素的个数加上构造函数给的已有元素个数



package cn.tjn.study0713;

/**
 * 自定义一个队列类SamlpList
 * 
 * @author Administrator
 * 
 */
public class SampleList<E> implements Spl<E> {
	// 定义一个私有的数组对象属性
	private Object[] obl = null;
	// 记录队列中已经存储了多少个元素
	private int initCount = 0;
	private int incresCount = 1;

	// 使用默认参数构造队列
	public SampleList() {
		obl = new Object[0];
	}

	// 创建时指定队列的初始化大小
	public SampleList(int initCount) {
		this.initCount = initCount;
		obl = new Object[initCount];
	}

	// 创建时指定队列的初始化大小,和每次增长比率
	public SampleList(int initCount, int incresCount) {
		this.initCount = initCount;
		obl = new Object[initCount];
		this.incresCount = incresCount;
	}

	// 向队列中添加一个元素 队列长度+1
	public void add(E e) {
		Object[] temp = new Object[obl.length + incresCount];
		for (int i = 0; i < obl.length; i++) {
			temp[i] = obl[i];
		}
		temp[obl.length] = e;
		this.initCount++;
		obl = temp;
	}

	// 将另一个队列中的所有对象加到队列的后面
	public void addall(SampleList<E> list) {
		Object[] temp = new Object[obl.length + list.size()];
		for (int i = 0; i < obl.length; i++) {
			temp[i] = obl[i];
		}
		for (int i = 0; i < list.size(); i++) {
			temp[i + obl.length] = list.get(i);
			this.initCount++;
		}
		obl = temp;
	}

	// 在队列中的指定索引位置删除一个元素 并返回该元素 队列长度-1
	public E delete(int index) {
		E item = (E) obl[index];
		for (int i = index; i < obl.length; i++) {
			obl[i] = obl[i + 1];
		}
		this.initCount--;
		return item;
	}

	// 获取指定索引位置的元素
	public E get(int index) {
		if (index < 0 || index > initCount)
			return null;
		E item = (E) obl[index];
		return item;
	}

	// 在队列的指定位置插入一个对象
	public void insert(E str, int index) {
		obl[index] = str;
	}

	// 获取队列中元素总数的方法
	public int size() {
		return initCount;
	}
}



package cn.tjn.study0713;

/**
 * 自定义泛型队列的接口
 * 
 * @author NetJava
 * 
 */
public interface Spl<E> {
	// 在队列的指定位置插入一个对象
	public void insert(E str, int index);

	// 向队列中添加一个元素 队列长度+1
	public void add(E str);

	// 获取指定索引位置的元素
	public E get(int index);

	// 获取队列中元素总数的方法
	public int size();

	// 在队列中的指定索引位置删除一个元素 并返回该元素 队列长度-1
	public E delete(int index);

	// 将另一个队列中的所有对象加到队列的后面
	public void addall(SampleList<E> list);
}


package cn.tjn.study0713;
/**定义一个测试类
 * @author 
 */
public class Splmain {

	/**
	 * 主函数
	 */
	
	public static void main(String[] args) {
         //实例化二个对象一个传参数一个不传参数
		SampleList spll1= new SampleList();	
		SampleList spll2= new SampleList(5);
		//向队列对象spll1中添加2个元素一个为整形一个为字符串
		String str1="添加无参构造的字符串元素";
		int i1=5;
		spll1.add(str1);
		spll1.add(i1);

		//打印
		for(int i=0;i<spll1.size();i++){
			System.out.println(spll1.get(i));
		}
		System.out.println("spll1队列的长度是:"+spll1.size());
		System.out.println("===========================================");
		
		String str2="添加有参构造的字符串元素";
		int i2=3;
		spll2.add(str2);
		spll2.add(i2);
		//打印
		for(int i=0;i<spll1.size();i++){
			System.out.println(spll2.get(i));
		}
		System.out.println("spll2队列的长度是:"+spll2.size());
		System.out.println("===========================================");
		 
		spll2.addall(spll1);
		//打印
		for(int i=0;i<spll2.size();i++){
			System.out.println(spll2.get(i));
		}
		System.out.println(spll2.size());
		System.out.println("===========================================");
	}

}

分享到:
评论

相关推荐

    泛型顺序队列和循环队列

    本实例实现了泛型顺序队列和泛型循环队列的基本操作,并通过界面演示了队列中元素的变化,最后结合栈实现了回文字符串的判断,通过本实例可以充分掌握C#队列数据结构。

    delphi 泛型学习实录

    delphi 泛型及原生泛型列表、栈、队列、数组。

    leetcode添加元素使和等于-Play-with-Data-Structures:玩转数据结构

    数组队列和循环队列的比较 补充代码1: 不浪费一个空间的循环队列 补充代码2: 没有size成员变量的循环队列 第四章 最基础的动态数据结构:链表 4-1 什么是链表 4-2 在链表中添加元素 4-3 使用链表的虚拟头结点 4-4 ...

    leetcode添加元素使和等于-Play-With-Data-Structures:慕课网学习

    leetcode添加元素使和等于 ...数组队列和循环队列的比较 补充代码1: 没有size成员变量的循环队列 [整理中,敬请期待] 第四章 最基础的动态数据结构:链表 4-1 什么是链表 4-2 在链表中添加元素 4-3 使用链

    C#的6种常用集合类大比拼

    虽然System.Array.Resize这个泛型方法可以重置数组大小,但是该方法是重新创建新设置大小的数组,用的是旧数组的元素初始化。随后以前的数组就废弃!而集合却是可变长的 2.数组要声明元素的类型,集合类的元素类型却...

    CSharp-Advanced:堆栈和队列,多维数组,高级集合和词典,流,文件和目录,函数式编程,定义类,泛型,迭代器和比较器

    CSharp-Advanced:堆栈和队列,多维数组,高级集合和词典,流,文件和目录,函数式编程,定义类,泛型,迭代器和比较器

    datastructure:基于java语言的数据结构及算法实现

    栈和队列2-1 栈的基本实现2-2 栈的另一个应用:括号匹配2-3 数组队列Java2-4 循环队列Java第三章 最基础的动态数据结构:链表章节Java源码3-1 链表的基本实现Java3-2 使用链表实现栈Java3-3 带有尾指针的链表:使用...

    datafall2019:回购样品

    ICOM 4035 / CIIC 4020数据结构2019年秋季 回购在课堂讲课中介绍的代码。... 队列-使用泛型,循环数组和双向链表实现的队列ADT。 map-使用泛型和单链列表实现的地图ADT。 hashtable-使用泛型和哈希表实现的地图ADT。

    数据结构与算法分析Java语言描述(第二版)

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    数据结构与算法分析-Java语言描述(第2版)_1_2

    java5 1.4.1 使用object表示泛型 1.4.2 基本类型的包装 1.4.3 使用接口类型表示泛型 1.4.4 数组类型的兼容性 1.5 利用java5泛性实现泛型特性成分 1.5.1 简单的泛型类和接口 1.5.2 自动装箱/拆箱....

    glib-2.0-demo.zip

    GLib包含了字符串操作、文件操作、数据校验、编解码、字符集转换、随机数生成器、命令行解析器、xml解析器、正则表达式、单链表、双链表、 数组、指针数组、双端队列、哈希表、平衡二叉树、N维树、泛型、主循环、多...

    数据结构与算法分析_Java语言描述(第2版)]

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析 Java语言描述第2版

    Java51.4.1 使用Object表示泛型1.4.2 基本类型的包装1.4.3 使用接口类型表示泛型1.4.4 数组类型的兼容性1.5 利用Java5泛性实现泛型特性成分1.5.1 简单的泛型类和接口1.5.2 自动装箱/拆箱1.5.3 带有限制的通配符...

    数据结构与算法分析_Java语言描述(第2版)

    3.7.2 队列的数组实现 3.7.3 队列的应用 小结 练习 第4章 树 4.1 预备知识 4.1.1 树的实现 4.1.2 树的遍历及应用 4.2 二叉树 4.2.1 实现 4.2.2 例子:表达式树 4.3 查找树ADT——二叉查找树 4.3.1 contains方法 ...

    Java2核心技术.part5

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java2核心技术.part3

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 ...

    Java2核心技术.part1

    5.3泛型数组列表 5.3.1访问数组列表元素 5.3.2类型化与原始数组列表的兼容性 5.4对象包装器与自动打包 5.5反射 5.5.1 Class类 5.5.2使用反射分析类的能力 5.5.3在运行时使用反射分析对象 5.5.4使用...

Global site tag (gtag.js) - Google Analytics