上节课我们学了数组,发现在数据存住方面数组还是很方便的。但是在定义数组时必须要定义数组的大小,可是在有些时候哦我们不知道用户到底要存储多少个数据,把数组定义小了就不够用,定义多了还浪费空间。那这时我们就会用到队列,队列呢,顾名思义,就是像排队一样呗,你来了就排到最后面就可以了。队列相对于数组,其特征就是我们不用规定它的长度。
实现队列的思路呢也很简单,就是先定义一个数组,然后有新数据存储时,创建一个比原数组长度多1的数组,将原数组内容复制到新数组中,然后把数据存储到新数组最后就好。
下面就是一个例子:
public Student[] array;//先声明一个学生类数组
intsize = 0;//数组长度为0;
// 构造方法实例化数组
public Queue() {
array = new Student[size];
}
// 添加方法
publicvoid add(Student o) {
//新建一个新的数组,比原数组长度大1;
Student array1[] = new Student[size + 1];
//将原数组数据对应存储到新数组里
for (int i = 0; i < size; i++) {
array1[i] = array[i];
}
array1[size] = o;
size++;
array = array1;//将新数组的地址赋给原数组
}
}
由此可见,队列的添加数据方法其实也就是两个数组倒来倒去。
我们可以给队列写出添加方法,自然也可以写出查找方法,删除方法,等等等等。
下面是我写出的删除方法的代码
// 删除方法,根据学生姓名属性先查找到此数据的位置
publicvoid delete(String name) {
int a = 0;
boolean existence= false;//定义一个布尔变量,判断此数据是否存在时使用
// 查找此信息找到后跳出训话 a记录次信息下标
for (int i = 0; i < size; i++) {
a = i;
if (array[i].name.equals(name)) {
size--;//要删除此数据,队列的size要减一
existence = true;//存在此数据为true
break;//跳出循环
}
}
// 当存在此数据时,此数据删除后,其后所有数据前移一位
if (existence) {
for (int j = a; j < size; j++) {
array[j] = array[j + 1];
}
} else {//不存在此数据时进行提醒
System.out.println("请确认是否输入正确,系统没有此信息!");
}
}
队列用起来挺方便的,但是刚刚我们写的这个队列,他只能添加student类型(当然还有他的子类)的对象;这就太麻烦了。有没有什么方法能让我们写一个队列能存储各种数据呢?答案是我们可以使用“泛型”语法。
泛型有很多种,我们常用的有E,K,V三种,泛型泛指java中所有的引用类型,E(Element)代表它里面的元素是泛型的,K(Key)代表它里面的键值是泛型的,V(Value)的话表示他的值是泛型的。
所以说,要解决刚刚那个问题,只需将队列中所存放的类型定义为泛型即可。
publicclass Queue<E> {
public Object[] array;//先声明一个Object类数组
intsize = 0;//数组长度为0;
// 构造方法实例化数组
public Queue() {
array = new Object [size];
}
// 添加方法
//要注意加元素的时候参数类型也必须为E
publicvoid add(E element) {
//新建一个新的数组,比原数组长度大1;
Object array1[] = new Object [size + 1];
//将原数组数据对应存储到新数组里
for (int i = 0; i < size; i++) {
array1[i] = array[i];
}
array1[size] = element;
size++;
array = array1;//将新数组的地址赋给原数组
}
}
这样的话就可以了,不过要是向此队列中添加别的带有返回值方法时,一定得记得返回值也必须是E型的。
用泛型还有别的一个好处就是我们也可以单一指定向队列中添加的元素类型,如:
Public static void main(String args[]){
Queue<Student> aq=new Queue<Student> ();
aq.add(new Student());
aq.add(new JFrame());//这行语句会报错因为创建队列对象时指定了队列里元素类型都为Student类,别的类型不能添加。
}
相关推荐
本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...
本实例重点讲解了泛型顺序队列和泛型循环队列,这两种队列都是C#中实现队列数据结构的有效方式。 首先,泛型在编程中是指能够处理多种数据类型的类、接口或方法。在C#中,我们可以通过使用`<T>`来声明一个泛型类型...
标题中的“支持多线程和泛型的阻塞队列”意味着我们讨论的是一个能够同时处理多个线程并能存储不同类型数据的队列实现。 ### 阻塞队列的基本概念 阻塞队列(Blocking Queue)是线程安全的数据结构,它结合了队列的...
试用java.util.Stack泛型栈作为父类,用另一个泛型栈对象作为成员变量,模拟实现一个泛型子类Queue,当存储元素的第1个栈的元素超过dump时,再有元素入队列就倒入第2栈。除提供无参构造函数Queue( )外,其它所有队列...
**集合框架与泛型**是Java编程语言中的核心特性,对于初学者来说,理解并熟练掌握这两个概念至关重要。Java集合框架是一组接口和类的集合,它们提供了在Java中存储和管理对象的方法。泛型则是Java SE 5.0引入的新...
### 集合与泛型知识点总结 #### 泛型概览 - **引入原因**:在Java 1.5及之后的版本中,引入了泛型这一特性,旨在提高集合类使用的安全性与灵活性。主要解决的问题包括: - **元素存储的安全性问题**:在非泛型...
在C#编程中,泛型优先队列是一种特殊的数据结构,它结合了队列和堆的概念,用于存储具有优先级的元素。优先队列通常按照优先级高低来处理元素,最高优先级的元素会被最先处理。这个数据结构在处理需要快速访问最高...
5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性...
在分布式系统课程中,学生可能会学习如何使用泛型来设计和实现高效的分布式数据结构和算法,例如泛型队列、堆、图等,这些数据结构在分布式计算中有着广泛的应用。同时,还会探讨如何利用泛型提高分布式服务的抽象...
本资源摘要信息涵盖了C#编程语言的基础知识点,包括泛型队列的设计、迭代器方法的应用、枚举器类的实现等。 一、泛型队列的设计 在C#中,泛型队列是指可以存储不同类型元素的队列。通过设计泛型队列,可以实现队列...
根据提供的文件信息,“泛型编程与STL.pdf”这一标题及描述主要聚焦于两个核心概念:泛型编程和标准模板库(Standard Template Library,简称STL)。这些是现代C++编程语言中的重要组成部分,对于软件开发人员来说...
在实现泛型支持时,我们需要确保所有操作(如添加元素、删除元素、遍历列表)都与类型参数`T`兼容。这意味着我们需要使用`T`来声明方法的参数和返回值,比如`add(T element)`和`T get(int index)`。 对于浮点型...
本讲解将深入探讨这两个主题,以及与之相关的枚举类型。 首先,Java集合框架包括List、Set、Queue等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类。这些接口和类提供了存储、检索、遍历和修改元素的...
在本文中,我们将讨论如何使用堆栈来实现中缀表达式到后缀表达式的转换,并计算后缀表达式的结果。这个过程通常应用于计算机科学中的表达式计算,特别是编程语言的解析和计算。 首先,我们要理解中缀表达式和后缀...
后缀表达式,又称逆波兰表示法,是一种用于表示数学表达式的方式,它将运算符放在操作数之后,使得表达式求值的过程可以利用栈这种数据结构来简化。栈是一种具有“后进先出”(LIFO)特性的数据结构,非常适合处理这...
1. 泛型容器:例如,自定义的堆栈、队列或者优先级队列等数据结构,利用泛型可以处理任何类型的数据,提高代码的复用性。 2. 泛型算法:比如排序、查找等算法,通过泛型,可以应用于不同类型的数据,无需为每种类型...
- **Queue**、**Stack** 和 **SortedList, TValue>**:这些集合分别对应于它们同名的非泛型版本,提供队列、栈和排序列表的功能。 #### 五、泛型示例 为了更好地理解泛型的用法,让我们看一个具体的示例。假设我们...
6. **多态性与泛型**:泛型与多态相结合,可以编写更灵活的代码,同时确保类型安全。 通过合理使用集合框架和泛型,开发者可以编写出更加高效、安全的代码,减少运行时错误,提高代码的可读性和可维护性。在实际...
1. **泛型接口与类** C#中的泛型接口如`IEnumerable<T>`和泛型类如`List<T>`、`Dictionary, TValue>`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,而`T`则代表一个未指定的类型参数,可以在实例化时...
根据提供的信息,“泛型编程与STL中文版.pdf”这一标题和描述中涉及的主要知识点包括泛型编程(Generic Programming)以及标准模板库(Standard Template Library, STL)。由于部分内容并未给出实质性的文本信息,...