`
小篮子java的家
  • 浏览: 32435 次
  • 性别: 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#中,我们可以通过自定义类来实现泛型循环...

    顺序存储和链式存储的泛型队列_C语言项目

    本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...

    实例185 - 自定义泛型化数组类

    这个实例185可能是进一步讨论泛型数组类如何应用于实际项目,例如作为缓存、队列或其他数据结构的基础,或者作为工具类帮助处理不同类型的数据集。标签中的"源码"表明可能有具体的代码实现供学习,而"工具"可能意味...

    用数组实现的双端队列(类模板)

    在C++中,标准库提供了一个名为`deque`的容器,但在这里,我们讨论的是一个自定义实现的基于数组的双端队列类模板。 在C++编程中,类模板(Class Template)是泛型编程的一种形式,允许创建可适用于不同数据类型的...

    C#泛型优先队列

    1. **存储结构**:一般使用泛型列表(`List&lt;T&gt;`)或者数组(`T[]`)来存储元素。 2. **比较器**:使用`IComparer&lt;T&gt;`接口或`Comparison&lt;T&gt;`委托来定义元素之间的比较规则。默认情况下,C#中的`IComparable&lt;T&gt;`接口可...

    delphi 泛型学习实录

    Delphi的TArray是泛型数组,它允许我们创建固定大小的数组并处理不同类型的元素。TArray提供了很多实用的方法,如Length属性获取数组长度,SetLength函数调整数组长度,以及低级的索引访问和赋值操作。 在提供的...

    C#实验报告

    4. **数据类型**:C#支持多种数据类型,包括基本类型(如整型、浮点型、布尔型、字符型等)和引用类型(如类、接口、数组)。在实验中,`float`用于存储圆的半径、直径、周长和面积,`int`用于处理整数。 5. **变量...

    Delphi_2009_2010_XE_泛型使用全集(队_栈_字典_列表_对象列表)

    ### Delphi 泛型使用全集(队列_栈_字典_列表_对象列表) #### 一、泛型概述 在 Delphi 中,泛型编程允许开发人员编写灵活且可重用的代码,该代码可以操作不同类型的值。通过使用泛型,我们可以创建能够处理各种...

    C++循环队列模版(数组和链表两种实现方式都有)

    链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...

    Java1.5泛型指南中文版

    泛型允许我们在编程时指定容器(如列表、队列等)所容纳对象的类型,从而在编译阶段就能捕获类型错误,而非等到运行时。 在定义泛型时,我们使用尖括号 `和 `&gt;` 来声明类型参数(type parameter),例如 `List&lt;T&gt;` ...

    数据结构-加入泛型的线性表、栈、队列

    编译器会在编译时检查类型一致性,如果尝试向泛型列表或数组中添加不兼容的类型,编译器会抛出错误,从而避免了运行时可能的类型异常。 在实现泛型支持时,我们需要确保所有操作(如添加元素、删除元素、遍历列表)...

    3个泛型项目源码.rar

    1. 泛型容器:例如,自定义的堆栈、队列或者优先级队列等数据结构,利用泛型可以处理任何类型的数据,提高代码的复用性。 2. 泛型算法:比如排序、查找等算法,通过泛型,可以应用于不同类型的数据,无需为每种类型...

    Java集合框架及泛型

    LinkedList实现了List、Deque和Iterator接口,可以作为双端队列使用。 3. **HashSet**: 基于哈希表(HashMap)实现,存储不重复的元素。插入和查找速度较快,但无特定顺序。 4. **HashMap**: 是一个键值对的集合,...

    Delphi泛型库--DGL

    在DGL中,泛型主要体现在各种容器类和算法上,例如列表(List)、集合(Set)、映射(Map)和队列(Queue)等,它们都支持不同类型的元素,极大地提高了代码的灵活性和可维护性。 1. **泛型容器:** - **TList**:...

    C#泛型集合使用实例

    泛型队列遵循先进先出(FIFO)原则,使用`Enqueue`方法添加元素到队尾,`Dequeue`方法移除并返回队首元素。`Queue&lt;T&gt;`实现了`ICollection&lt;T&gt;`和`IEnumerable&lt;T&gt;`接口。 6. **泛型栈(Stack)** 栈遵循后进先出...

    集合与泛型

    - `ArrayDeque`:基于数组的双端队列。 - `LinkedList`:也可以作为队列使用。 - `PriorityQueue`:按元素的自然顺序或比较器确定顺序。 #### 结论 通过对泛型和集合的深入分析,我们不仅了解了它们的基本概念...

    队列数据结构的c++实现

    在C++中实现队列可以借助数组、链表或者STL中的queue容器来完成。以下是对队列数据结构在C++中实现及其在银行接待系统仿真应用的详细说明。 1. **队列的定义与基本操作** - 队列的结构通常由两个指针定义:front...

    数据结构-顺序队列

    顺序队列是一种线性数据结构,其元素在内存中是连续存储的,类似于数组。队列的主要特点是“先进先出”(FIFO),即最早进入队列的元素最先离开。顺序队列的基本操作包括入队(enqueue)、出队(dequeue)、查看队首...

    java集合 框架 泛型

    例如,ArrayList是以动态数组为基础的列表实现,适合随机访问,而LinkedList则适用于频繁插入和删除的场景。Set接口不允许重复元素,而List允许。Queue接口则用于表示先进先出的数据结构,如队列。 泛型是Java集合...

Global site tag (gtag.js) - Google Analytics