`
chentingk
  • 浏览: 19981 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

Java队列的实现和优化(泛型)

 
阅读更多

  在我们用数组存储的时候,发现它的长度无法改变,以至于在变动的数据存储的时候会显出弊端。队列这种数据结构是形象于排队的一种存储,一个接一个的存储,是线性表的一种表现形式。队列的实现是基于数组,实现了连续存储。如果输入的数据超过了原本定义的数组的长度,则用一个比原来数组的长度多一的数组来存储,然后替代原来的数组,Java语言的系统自动释放原先的内存,所以不用担心申请不到内存。

所以我们可以得出,队列的定义步骤:

1.定义一个数组。

2.在存入数据大于原先数组的长度的时候,新建一个原数组length+1的新数组。

3.把原先数组的元素拷贝到新数组上。

4.把欲加入队列元素放在新数组的末尾处。

5.在用新数组的地址覆盖原先数组的地址。

public class Queue{
       private int size=0;
       private int[] array=new int[size];
       public Queue{
               this(0);

                            }
       public Queue(int size)
              {
                     this.size=size;
              }
       //主函数 程序入口
       public static void main(String[] args)
              {
              
              }

	//加入元素的方法
	public void add(int e)
	{
		//新建数组
		int[] newarray=new int[size];
		//拷贝数据
		for(int i=0;i<size;i++)
		{
			newarray[i]=array[i];		
		}
		//末尾赋值
		newarray[array.length]=e;
		size++;
		//地址拷贝
		array=newarray;
	}

}

 如此我们实现了一个存储整数的队列(增 删 查 改 是容器必备的操作在此只是抛砖引玉只写增加的操作)

回到现实应用中,我们发现我们面对的是很多不同数据的存储,所以我们得用很多的队列类来实现,这未免有些繁琐,Java中我们有一种功能,就是类定义时候可以使得它传入各种类型的参数而不限制与某一种,这就是泛型。如同C++的类模板一样,泛型可以涵盖Java的所有数据类型。

//泛型定义 在类名后面加<E>
public class Queue<E> {}

 E代表了所有的数据类型,带对象创建时候可以指定它为某一类型的存储器,比如Queue<int> q=new Queue<int>();这就是建立了一个存整数的队列。

在定义泛型的时候,数组定义怎么改变呢?

只要把数组的类型名改成Object就行: Object [] array=new Object[];

Object是所有类的父类,之后可以转型为各种类型。

public class Queue<E> {
	//定义属性 size游标和array存储域
	private int size=0;
	private Object[] array=new Object[size];
	//如果用户调用无参的构造方法 则自动调用带一个参数的构造方法并且传入参数0
	public Queue()
	{
		this(0);
	}
	//设置size值的构造方法
	public Queue(int size)
	{
		this.size=size;	
	}
	
	public static void main(String[] args) {
		
	}
	//加入元素的方法
	public void add(E e)
	{
		//新建数组
		Object[] newarray=new Object[size];
		//拷贝数据
		for(int i=0;i<size;i++)
		{
			newarray[i]=array[i];		
		}
		//末尾赋值
		newarray[array.length]=e;
		size++;
		//地址拷贝
		array=newarray;
	}

}

 

分享到:
评论

相关推荐

    支持多线程和泛型的阻塞队列

    标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多个线程并能存储不同类型数据的队列实现。 ### 阻塞队列的基本概念 阻塞队列(Blocking Queue)是线程安全的数据结构,它结合了队列的...

    java零基础自学 之 JAVA泛型

    在Java中,泛型通过对类型系统进行扩展实现,允许我们创建可以接受不同类型参数的类、接口和方法。类型参数,用尖括号 `&lt;T&gt;` 表示,就像方法的形式参数一样,是一个占位符,代表实际使用时会替换的具体类型。例如,`...

    一种抽象泛型机制的新型Java实现.zip

    7. **新型Java实现**:标题暗示了可能有一种新的泛型实现方式,可能是对现有泛型机制的优化、扩展或变体。这可能涉及到更高级的类型系统特性,如多重边界、类型推断增强或者针对特定场景的定制化泛型设计。 8. **...

    Java1.5泛型指南中文版

    Java 1.5 引入了泛型(generics)这一强大的特性,旨在提升类型安全性,减少类型转换的烦恼,并优化代码的可读性。泛型允许我们在编程时指定容器(如列表、队列等)所容纳对象的类型,从而在编译阶段就能捕获类型...

    《剑指Offer》题目及java代码实现

    Java的反射机制允许在运行时动态访问类、方法和字段,而泛型则提供了类型安全的容器。掌握这两个特性,能让你编写出更加灵活和强大的代码。 九、JVM内存模型 了解JVM的工作原理,包括堆内存、栈内存、方法区、本地...

    经典算法的Java实现.zip

    例如,我们可以使用Java的泛型和比较器接口(Comparator)来实现自定义排序规则。 汉诺塔(Hanoi Tower)问题是一种经典的递归算法问题,它涉及到将一个塔中的所有盘子通过两个辅助柱子移动到另一个柱子上,且任何...

    JAVA高级工程师个人简历模板.pdf

    * 面向对象编程的概念和实现 * Java的多线程编程和并发控制 * Java的集合框架和泛型编程 * Java的异常处理和错误处理机制 Java高级技术 * Java的设计模式和原则 * Java的架构设计和系统集成 * Java的高性能编程和...

    数据结构 Java实验4 栈和队列.doc

    在本实验报告中,主要涉及了数据结构中的两种基本结构——栈和队列,并通过Java编程语言实现了它们的实例应用。栈是一种具有“后进先出”(LIFO)特性的数据结构,而队列则遵循“先进先出”(FIFO)的原则。 在第一...

    详解Java泛型及其应用

    在泛型的初始实现中,编译器将强制类型转换(没有泛型的话,程序员会指定这些强制类型转换)插入生成的字节码中。 泛型的使用: 泛型可以用在类、接口和方法中,分别被称为泛型类、泛型接口和泛型方法。泛型的类型...

    java实现常用算法

    "java实现常用算法"这个主题,涉及到的是使用Java来编写和实现经典算法的过程,这对于我们理解数据结构、优化程序性能以及解决复杂问题至关重要。 1. **排序算法**: - **堆排序**:堆排序是一种基于比较的排序...

    基于java各类数据结构的实现和各种排序

    本文件提供的资源着重于使用Java泛型来实现多种数据结构,并包含了各种排序算法的详细分析和实现。 首先,我们来看数据结构部分: 1. **单链表**:单链表是一种线性数据结构,每个节点包含数据和指向下一个节点的...

    数据结构与算法分析-JAVA实现-带书签目录超清文字版

    数据结构与算法分析是计算机科学中的核心领域,它关乎如何高效地存储和处理数据,以及设计和实现高效的计算过程。本书“数据结构与算法分析-JAVA实现”专注于使用Java编程语言来阐述这些概念,这对于Java开发者来说...

    fastutil,FASTTIL通过提供特定于类型的映射、集合、列表和队列来扩展Javaμ集合框架。.zip

    总而言之,fastutil是Java开发者的宝贵工具,它通过优化特定类型的数据结构和算法,提升了性能和效率,特别适合处理大量数据的高性能应用。无论是内存敏感的嵌入式系统,还是大规模的数据处理任务,fastutil都能提供...

    Offer源代码-Java语言实现

    通过实践这些源代码,开发者可以熟悉并掌握解决复杂问题的方法,包括但不限于排序、搜索、图论、动态规划等算法,以及如何利用Java的类库和API高效地实现这些解决方案。 【标签】"软件/插件 java"表明这个压缩包...

    基于Java的实例源码-最短路径算法实现 k-shortest-paths.zip

    在实际项目中,根据具体需求和图的特性,选择合适的最短路径算法和实现方式至关重要。这个Java源码实例应该提供了具体的实现细节,包括类的设计、方法的实现、数据结构的选择等,可以帮助开发者深入理解这些算法的...

    6本java算法书

    C语言的`stdlib.h`库提供了基本的内存管理和数据结构支持,如malloc/free用于动态内存分配,qsort用于排序,但大部分复杂的数据结构和算法需要程序员自己设计和实现。这使得C语言在理解和学习数据结构和算法时,对...

    Java SE 源码 Java SE 源码

    源码对于理解Java的工作原理、学习编程技巧以及进行高级调试和优化至关重要。在这个压缩包中,你可能找到了Java SE的原始源代码,这将允许你深入探究这个强大的编程语言的内部机制。 1. **类库解析**:Java SE源码...

    数据结构与算法--Java语言描述

    在Java语言中,我们可以使用ArrayList和LinkedList实现数组和链表,Stack和Queue接口实现栈和队列,TreeSet和TreeMap实现有序集合和映射,以及HashSet和HashMap实现无序集合和映射。这些内置类和接口简化了数据结构...

    常见的java,android面试题整理

    3. **集合框架**: Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。面试时可能考察集合的遍历、容量、性能优化以及泛型的应用。 4. **异常处理**: Java的异常处理...

Global site tag (gtag.js) - Google Analytics