数组与队列的特点,区别,及应用场景
数组:长度一旦定义就不能改变,并且在内存中的地址是连续的。
队列:在允许的范围内,长度可以根据需要而改变,类型也可以改变。缺点是只能放入一个种类(或其子类)的对象。于是我们可以通过定义一个队列了来改变队列的类型。
泛型:不知道队列的类型或者想改变队列的类型时使用。
队列:
主类:
/**
* 自定义队列类(动态数组)
* 长度可以改变,但只能存整数
* 增加,得到,修改,删除,插入元素,得到长度
* @author Administrator
*
*/
public class MyList {
//定义一个长度为0的原始数组
private int[] src = new int[0];
/**
* 将指定的数据放入队列容器中
*
* @param num
* 要放入队列容器的数据
*/
public void add(int num) {
//定义一个新数组,长度是原始数组长度+1
int dest[] = new int[src.length+1];
//将新元素放入新数组最后一个下标位置
dest[src.length] = num;
//将原始数组中的元素按照下标顺序拷贝到新数组
for(int i=0;i<src.length;i++){
dest[i] = src[i];
}
//将原数组名指向新数组
src = dest;
}
/**
* 取出指定下标位置的元素
*
* @param index
* 要取出的元素的下标
* @return 返回取得的元素
*/
public int get(int index) {
//得到src对应下标的元素
int num = src[index];
return num;
}
/**
* 删除指定位置的元素
*
* @param index
* 要删除的元素的下标
*/
public void delete(int index) {
//定义一个新数组,长度是原始数组长度-1
int dest1[] = new int[src.length-1];
//将原始数组中的元素按照下标顺序拷贝到新数组
for(int i=0;i<dest1.length;i++){
dest1[i] = src[i+1];
}
//将原数组名指向新数组
src = dest1;
}
/**
* 将指定位置的元素修改为指定的值
*
* @param index
* 要修改的元素的下标
* @param num
* 修改之后的新值
*/
public void modify(int index, int num) {
src[index] = num;
}
/**
* 在指定的位置插入指定的元素值
*
* @param index
* 要插入元素的位置
* @param num
* 要插入的元素
*/
public void insert(int index, int num) {
}
/**
* 得到容器中元素个数的方法
*
* @return 返回容器中的元素个数
*/
public int size() {
//队列长度就是src数组的当前长度
int len = src.length;
return len;
}
}
测试类:
/**
* 队列测试类
*
* @author Administrator
*
*/
public class ListTest {
public static void main(String args[]) {
// 创建一个队列对象
MyList list = new MyList();
// 放入10个元素
for (int i = 0; i < 10; i++) {
list.add(i*100);
}
//在增加一个
//list.add(10000);
list.delete(2);
//list.modify(0, 1234);
//遍历
for(int i=0;i<list.size();i++){
//根据下标取出元素
int num = list.get(i);
System.out.println(num);
}
}
}
泛型:
主类:
/**
* 自定义队列类(动态数组)
* E: 表示容器中将要存放的数据类型,没有确定是什么类型,是泛指一种类型
* @author Administrator
*
*/
public class MyListFan<E> {
//定义一个长度为0的原始数组
//将数组定义为Object数组,表示能存放Java中所有的对象
private Object[] src = new Object[0];
/**
* 将指定的数据放入队列容器中
*
* @param e
* 要放入队列容器的数据
*/
public void add(E e) {
//定义一个新数组,长度是原始数组长度+1
Object dest[] = new Object[src.length+1];
//将新元素放入新数组最后一个下标位置
dest[src.length] = e;
//将原始数组中的元素按照下标顺序拷贝到新数组
for(int i=0;i<src.length;i++){
dest[i] = src[i];
}
//将原数组名指向新数组
src = dest;
}
/**
* 取出指定下标位置的元素
*
* @param index:要取出的元素的下标
*
* @return 返回取得的元素
*/
public E get(int index) {
//得到src对应下标的元素,强制转型
E e = (E) src[index];
return e;
}
/**
* 删除指定位置的元素
*
* @param index
* 要删除的元素的下标
*/
public void delete(int index) {
}
/**
* 将指定位置的元素修改为指定的值
*
* @param index:要修改的元素的下标
*
* @param num:修改之后的新值
*
*/
public void modify(int index, E e) {
src[index] = e;
}
/**
* 在指定的位置插入指定的元素值
*
* @param index:要插入元素的位置
*
* @param e:要插入的元素
*
*/
public void insert(int index, E e) {
}
/**
* 得到容器中元素个数的方法
*
* @return 返回容器中的元素个数
*/
public int size() {
//队列长度就是src数组的当前长度
int len = src.length;
return len;
}
}
测试类
/**
* 测试泛型队列
*
* @author Administrator
*
*/
public class ListTest {
public static void main(String args[]) {
// 创建队列,用来存储字符串
MyListFan<String> list = new MyListFan<String>();
//装入元素
for (int i = 0; i < 10; i++) {
String s = "元素" + i;
list.add(s);
}
//遍历
for(int i=0;i<list.size();i++){
//根据下标取出一个元素
String s = list.get(i);
System.out.println(s);
}
}
}
分享到:
相关推荐
**泛型循环队列**,也称为环形队列,利用数组的循环特性,使得队列的首尾可以无缝连接。这种队列在处理大量数据流时有更高的效率,因为它避免了数组的动态扩展和收缩。在C#中,我们可以通过自定义类来实现泛型循环...
本项目专注于实现顺序存储和链式存储的泛型队列,使用C语言作为编程工具,旨在提供灵活且高效的操作接口。下面我们将深入探讨相关知识点。 首先,队列是一种先进先出(First In First Out, FIFO)的数据结构,它的...
这个实例185可能是进一步讨论泛型数组类如何应用于实际项目,例如作为缓存、队列或其他数据结构的基础,或者作为工具类帮助处理不同类型的数据集。标签中的"源码"表明可能有具体的代码实现供学习,而"工具"可能意味...
在C++中,标准库提供了一个名为`deque`的容器,但在这里,我们讨论的是一个自定义实现的基于数组的双端队列类模板。 在C++编程中,类模板(Class Template)是泛型编程的一种形式,允许创建可适用于不同数据类型的...
1. **存储结构**:一般使用泛型列表(`List<T>`)或者数组(`T[]`)来存储元素。 2. **比较器**:使用`IComparer<T>`接口或`Comparison<T>`委托来定义元素之间的比较规则。默认情况下,C#中的`IComparable<T>`接口可...
链表实现的循环队列在处理满队列和空队列时与数组实现有所不同,因为链表的节点可以动态增加和删除,所以无需像数组那样进行特殊的重置操作。 在C++中,模板(template)是泛型编程的重要工具,它可以让我们创建...
1. **队列的定义与基本操作** - 队列的结构通常由两个指针定义:front表示队头,rear表示队尾。在数组实现中,它们分别指向队列的第一个元素和最后一个元素的下一个位置。在链表实现中,front指向链表的第一个元素...
### 集合与泛型知识点总结 #### 泛型概览 - **引入原因**:在Java 1.5及之后的版本中,引入了泛型这一特性,旨在提高集合类使用的安全性与灵活性。主要解决的问题包括: - **元素存储的安全性问题**:在非泛型...
在Java编程中,泛型是一种强大的工具,它允许我们在编写代码时指定容器(如堆栈、队列等)可以容纳的数据类型,从而提高了代码的可读性和安全性。在这个例子中,我们将探讨如何使用泛型实现一个堆栈类——`...
这符合“策略模式”的设计思想,将策略(如何处理每个元素)与机制(如何遍历队列)分离,提高了代码的可复用性和灵活性。 在提供的源码中,我们可以看到这些概念的具体实现。通过阅读和分析源码,可以更深入地理解...
Java数组是Java编程语言中的基本数据...同时,数组是许多高级数据结构(如栈、队列、图等)的基础,熟练掌握数组将对后续的编程学习大有裨益。在学习过程中,不断练习并应用所学知识,加深理解,有助于提升编程技能。
### Delphi 泛型使用全集(队列_栈_字典_列表_对象列表) #### 一、泛型概述 在 Delphi 中,泛型编程允许开发人员编写灵活且可重用的代码,该代码可以操作不同类型的值。通过使用泛型,我们可以创建能够处理各种...
在本文中,我们将深入探讨C语言中的队列数据结构,以标题“C例子:队列(顺序存储方式)”为例,结合描述中的博客...同时,这也为扩展和优化队列提供了基础,例如实现线程安全的队列或者支持不同数据类型的泛型队列。
5. **协变与逆变**: 在泛型中,类型参数的使用会影响类型安全。比如,List是List的子类型(协变),而List不是List的子类型(逆变)。 在实际开发中,理解和熟练运用Java集合框架和泛型能够大大提高代码的可维护性...
编译器会在编译时检查类型一致性,如果尝试向泛型列表或数组中添加不兼容的类型,编译器会抛出错误,从而避免了运行时可能的类型异常。 在实现泛型支持时,我们需要确保所有操作(如添加元素、删除元素、遍历列表)...
**集合框架与泛型**是Java编程语言中的核心特性,对于初学者来说,理解并熟练掌握这两个概念至关重要。Java集合框架是一组接口和类的集合,它们提供了在Java中存储和管理对象的方法。泛型则是Java SE 5.0引入的新...
TList类提供了动态数组的功能,可以存储任意类型的对象,而TQueue类是System.Generics.Collections单元中的一个泛型类,它提供了一种标准的队列实现。这里我们将重点讨论TQueue。 1. **TQueue类的使用**: - **...
Delphi的TArray是泛型数组,它允许我们创建固定大小的数组并处理不同类型的元素。TArray提供了很多实用的方法,如Length属性获取数组长度,SetLength函数调整数组长度,以及低级的索引访问和赋值操作。 在提供的...
根据提供的文件信息,“泛型编程与STL.pdf”这一标题及描述主要聚焦于两个核心概念:泛型编程和标准模板库(Standard Template Library,简称STL)。这些是现代C++编程语言中的重要组成部分,对于软件开发人员来说...
1. **泛型接口与类** C#中的泛型接口如`IEnumerable<T>`和泛型类如`List<T>`、`Dictionary, TValue>`是泛型集合的基础。这些接口和类定义了操作数据的一般方法,而`T`则代表一个未指定的类型参数,可以在实例化时...