一 泛型
1.为什么使用泛型:
要用一个类型接收多个类时如:
int x=2,y=3;
float x=3.0,y=5.6;
String x="aa",y="bb";
可以使用Object接受任何类型的数据(发生向上转型),但由于Object可接受任何数据类型,
当接受的和输出的类型不符时就会出错,因此使用泛型。
2.访问权限 class 类名<泛型标识符...>{ //泛型标识符可任意定义,可为多个
访问权限 泛型标识符 变量名称;
访问权限 泛型标识符 方法名(){};
访问权限 泛型标识符 构造方法([泛型类型 参数名]){};
访问权限 返回值类型 方法名(泛型标识符 变量名){};
}
3.实例化该类时
类名<具体指定的类型> 对象名=new 类名<具体指定的类型>();
二 优化队列
1.使用数组时,长度是固定的,有时不够,有时浪费------>因此使用队列
2.但使用队列时有存在性能问题如下:
public class StList<E> {
private Object[] srcA=new Object[0];
public void add(E e){
//新建一个数组,长度为原数组的长度加1
Object[] destA=new Object[srcA.length+1];
//将元素加到新数组的最后一个位置
destA[srcA.length]=e;
//将原数组中的数据放入新数组,使用系统提供的数组copy方法
System.arraycopy(srcA, 0, destA, 0, srcA.length);
//指向新建的数组
srcA=destA;
}
}
3.这样的话没加一个元素都要将原数组长度加1,添加新元素,然后将原数组的数据放入新数组------>导致性能降低
为了解决这一问题引入全局变量
int initCount=10;//原数组初始长度
int increase=20;//新数组在原数组上的增幅
int count=0;//用来记数
private Object[] srcA=new Object[initCount];
public void add(E e){
if(count<srcA.length){
srcA[count++]=e;
}else{
Object[] destA=new Object[srcA.length+increase];
destA[count++]=e;
//将原数组中的数据放入新数组,使用系统提供的数组copy方法
System.arraycopy(srcA, 0, destA, 0, srcA.length);
//指向新建的数组
srcA=destA;
}
}
4.这样做是性能提高,但操作死板。因此可以使用构造器将initCount,increase的值传入,这样用户可以自
定义数组原始长度和增幅。
public StList(){
}
public StList(int initCount){
this.initCount=initCount;
increase=1;
}
public StList(int initCount,int increase){
this.initCount=initCount;
this.increase=increase;
}
分享到:
相关推荐
阻塞队列是一种在多线程编程中广泛使用的并发数据结构,它在计算机科学和编程领域,特别是Java和C++等面向对象语言...在理解和使用时,需要理解其内部原理,合理选择队列容量,以及适当使用不同的操作方法来优化性能。
泛型队列遵循先进先出(FIFO)原则,使用`Enqueue`方法添加元素到队尾,`Dequeue`方法移除并返回队首元素。`Queue<T>`实现了`ICollection<T>`和`IEnumerable<T>`接口。 6. **泛型栈(Stack)** 栈遵循后进先出...
- **Queue**、**Stack** 和 **SortedList, TValue>**:这些集合分别对应于它们同名的非泛型版本,提供队列、栈和排序列表的功能。 #### 五、泛型示例 为了更好地理解泛型的用法,让我们看一个具体的示例。假设我们...
泛型是C#编程语言中的一个强大特性,它允许开发者创建可重用的...在实际开发中,无论是数据结构实现(如列表和队列)还是算法设计,都可以看到泛型方法的身影,它们在提升代码的灵活性和可维护性方面发挥着重要作用。
通过泛型,我们可以创建通用的数据结构,如集合和队列,而无需为每种可能的数据类型编写单独的实现。 在C#中,泛型的主要好处体现在以下几个方面: 1. **类型安全**:泛型提供了一种编译时的类型检查机制,确保了...
在本文中,我们将深入探讨C语言中的队列数据结构,以标题“C例子:队列(顺序存储方式)”为例,结合描述中的博客...同时,这也为扩展和优化队列提供了基础,例如实现线程安全的队列或者支持不同数据类型的泛型队列。
除了这些基本的泛型集合,C#还提供了其他泛型集合,如LinkedList(链表)、Stack(栈)、Queue(队列)等,它们各自对应不同的数据结构和算法需求。 在实际项目中,我们可以利用泛型集合来组织和管理数据。比如,你...
5. 特殊用途的STL组件:如stack(栈)、queue(队列)和priority_queue(优先队列)。 6. 自定义容器和算法:如何利用STL提供的基础设施开发自己的数据结构和算法。 7. STL与异常安全:理解STL在异常发生时的行为,...
在C++中,泛型是通过模板实现的,可以创建不依赖特定类型的数据结构,如数组、队列、栈、链表等。在C语言中,由于没有内置的泛型机制,通常需要为每种数据类型编写单独的实现,这增加了代码重复和维护难度。该静态...
Java 1.5 引入了泛型(generics)这一强大的特性,旨在提升类型安全性,减少类型转换的烦恼,并优化代码的可读性。泛型允许我们在编程时指定容器(如列表、队列等)所容纳对象的类型,从而在编译阶段就能捕获类型...
2. 性能优化:由于泛型集合内部可以避免装箱和拆箱操作,因此执行速度更快,内存消耗更少。 3. 代码复用:泛型集合可以用于存储任何类型的对象,减少了编写特定类型集合的需要,提高了代码的重用性。 三、泛型集合...
在Java编程中,泛型是一种强大的特性,它允许我们在编写代码时指定容器(如列表、队列或映射)所容纳的数据类型。这为程序带来了更高的类型安全性和可读性,同时减少了运行时类型转换异常的可能性。本文将深入探讨...
在DGL中,泛型主要体现在各种容器类和算法上,例如列表(List)、集合(Set)、映射(Map)和队列(Queue)等,它们都支持不同类型的元素,极大地提高了代码的灵活性和可维护性。 1. **泛型容器:** - **TList**:...
在C++编程语言中,模板队列是一种泛型数据结构,允许我们存储不同类型的元素,如整数、字符串、自定义对象等。本教程将深入探讨如何使用C++实现一个模板队列,以及其相关的重要知识点。 首先,我们需要了解队列的...
C# .NET框架提供了一个名为`System.Collections.Generic.Queue<T>`的类,用于创建泛型队列。队列的主要操作包括: 1. **Enqueue()**:在队尾添加元素。 2. **Dequeue()**:从队头移除并返回元素,如果队列为空则抛...
"C++ primer 第十六章 泛型 实现自定义Queue 修改版"的主题主要围绕如何利用C++的模板机制来实现一个自定义的队列(Queue)容器。在实现过程中,可能会遇到模板编译错误,解决这些问题需要对C++的模板语法有深入的...
7. **新型Java实现**:标题暗示了可能有一种新的泛型实现方式,可能是对现有泛型机制的优化、扩展或变体。这可能涉及到更高级的类型系统特性,如多重边界、类型推断增强或者针对特定场景的定制化泛型设计。 8. **...
在DGL 1.27中,容器是一组数据组织结构,如数组、链表、队列、堆栈、集合、映射等。这些容器提供了对数据的存储和操作接口,使得程序员可以方便地管理数据。例如,`std::vector`是一个动态数组容器,支持快速随机...
7. **优化策略**:在实际应用中,可能会考虑更多的优化策略,如使用超时等待、批量处理消息、优先级队列等,以适应不同的并发场景。 8. **总结**:C++多线程安全的消息队列模板是并发编程中的重要工具,它提供了...