`
Mr_mai
  • 浏览: 7886 次
  • 性别: Icon_minigender_2
  • 来自: 温州
最近访客 更多访客>>
社区版块
存档分类
最新评论

自定义队列以及泛型

    博客分类:
  • Java
阅读更多
1、数据结构是用来存储数据的容器,它有很多种,其中主要有:数组,队列,链表,堆栈,向量等等。首先我们来区别一下队列和数组。
相同点:
①都是线性的
②都有下标,数组可以通过.length得到长度的属性。可以通过下标对数组赋值,如Arry[0]="netjava";
不同点:
①数组的长度必须是定长的,而队列的长度可以自定义。
②数组的内存分配是连续的,而队列则不一定,比如以数组作为队列的话在内存中的地址则是连续的。

由于队列的长度是灵活的,比数组更便利的是可以在队列中插入一个元素。
一般队列通过重建一个数组,将原来的数组的元素值赋给新数组,再将追加的元素添加到新数组尾部。再将原来的数组指向新数组。

2、泛型:在定义容器类的时候不规定具体存放的类型,而只是用一个标记泛指某一种类型,一般用E表示这个类型,在创建容器对象的时候再来指定具体的类型,在创建对象的过程中会用这个具体的类型来替换所有的标记(E)。

注意:2.泛型是用来匹配java中所有的类类型,如String,还有我们自己建立的类。但是不能表示那八种基本数据类型:byte,char,short,int,long,float,double,boolean。如果要使用这八种数据类型的话,可以声明成他们的父类。 Byte,Character,Short,Integer,Long,Float,Double,Boolean。

实例代码:
public static void main(String[] args) {
List<Float> list=new List<Float>();
float t = 100;
list.add(t);                    //Float是float的父类
3、java中数组赋值(改变指向对象)的原理
public void add(T t){

Object dest[]=new Object[mylist.length+1];
dest[mylist.length]=t;
for(int i=0;i<mylist.length;i++){        //遍历
dest[i]=mylist[i];
}
mylist=dest;
}
mylist=dest,本来mylist指向一块地址,现在将他指向dest指向的地址,那么原来mylist指向的那块地址就不存在,那么在java中系统会自动调用delete,将那块没有东西指向的地址删除,释放内存。
但是在C++中,如果声明一个指针,指向一块分配了内存的地址,即使用new关键字以后必须使用delete方法才能释放内存。new不管是不是类,都必须delete来释放。
如:
int a;
int*p=new int();
p=0;
delete p;
p=&a;                              
        //调用delete以后删除的是p指向的空间,但是指针p本身还是占用内存的。因此delete以后可以让p再指向其他地址。




自定义列表以及泛型的代码:
/**
* 定义一个队列,有增删改查的功能,以及获取队列元素个数的方法
*
*/
public class List<T>{
private Object[] mylist=new Object[0];
/**
* 添加指定的元素
* @param t 表示要添加到队列最后一个的元素
*/
public void add(T t){

Object dest[]=new Object[mylist.length+1];
dest[mylist.length]=t;
for(int i=0;i<mylist.length;i++){        //遍历
dest[i]=mylist[i];
}
mylist=dest;
}


/**
* 删除指定位置的元素
* @param index  指定要删除的元素的位置
* @return 返回删除的元素
*/
public T delete(int index){
Object ndest[]=new Object[mylist.length-1];
for(int i=0;i<index;i++){
ndest[i]=mylist[i];
}
for(int i=index;i<mylist.length;i++){
ndest[i]=mylist[i+1];
}
T deleteone=(T)mylist[index];
mylist=ndest;
return deleteone;

}

/**
* 修改指定位置的元素内容
* @param index
* @param t
*/
public void midify(int index,T t){
mylist[index]=t;

}


/**
* 在指定位置插入指定的元素
* @param index 要插入的位置
* @param t 要插入的内容
*/
public void insert(int index,T t){
Object dest[]=new Object[mylist.length+1];
for(int i=0;i<index;i++){
dest[i]=mylist[i];
}
dest[index]=t;
for(int i=index+1;i<mylist.length;i++){
dest[i]=mylist[i-1];
}
mylist=dest;
}

/**
* 获得指定位置的元素
* @param index 要获得指定的元素的位置
* @return 返回指定元素并强制转化成T型
*/
public T get(int index){

return (T)mylist[index]; //强制转化成T型
}

/**
* 获得队列的长度
* @return 但会队列长度
*/
public int getSize(){
return mylist.length;
}

}
0
0
分享到:
评论

相关推荐

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

    在C语言中,需要自定义数据结构并使用void指针进行操作,这样队列可以处理任何类型的数据。泛型队列的实现需要额外的类型检查和类型转换机制,以确保安全性和兼容性。 4. **接口设计**: 本项目提供的接口可能包括...

    泛型顺序队列和循环队列

    在C#中,我们可以通过自定义类来实现泛型循环队列,通常需要维护两个指针,一个指向队首,一个指向队尾,同时管理数组的边界条件。 在本实例中,不仅展示了如何创建和操作这两种队列,还演示了队列中元素的变化过程...

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

    2. **数据成员**:使用`std::queue`或自定义队列结构,以及`std::mutex`和`std::condition_variable`来实现同步。 3. **方法声明**:包括`push()`, `pop()`, `take()`, `try_pop()`, `size()`等操作,这些方法需要...

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

    "实例185 - 自定义泛型化数组类"是一个关于如何创建和使用自定义泛型数组类的示例,这个主题将深入探讨泛型、数组以及两者的结合。 首先,我们需要理解泛型的基本概念。泛型是Java 5引入的一个重要特性,它允许我们...

    C#泛型优先队列

    以上代码展示了如何创建一个简单的泛型优先队列,但实际应用中可能需要进一步扩展功能,如检查队列是否为空、获取队首元素但不删除、以及提供自定义比较器等。 **应用场景** 1. **任务调度**:优先级高的任务先执行...

    C++ primer 第十六章 泛型 实现自定义Queue 修改版

    总的来说,"C++ primer 第十六章 泛型 实现自定义Queue 修改版"的学习内容涵盖了C++模板基础、泛型编程、C++11新特性以及问题排查技巧。通过这个主题的学习,开发者可以深化对C++模板的理解,提高编写高效、通用代码...

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

    通过引入泛型,我们可以扩展其支持的类型范围,包括浮点型(float、double)、字符型(char)以及用户自定义的数据类型。在Java中,这可以通过在类声明中使用尖括号`&lt;&gt;`来实现,如下所示: ```java public class ...

    浅谈c# 泛型类的应用

    在实际开发中,泛型类和接口广泛应用于数据结构(如堆栈、队列)、集合(如字典和列表)以及各种算法的实现。它们提供了一种方式,使代码能适应不同的数据类型,减少了类型转换的开销,并确保了类型安全。 通过...

    细细品味C#(泛型专题)

    这类数据结构通常需要实现多个接口,包括但不限于`IDictionary, TValue&gt;`、`IEnumerable&lt;T&gt;`等,并可能涉及到泛型约束、泛型类型参数的复杂使用,以及自定义泛型方法和属性的设计。这种高级泛型编程不仅考验程序员的...

    3个泛型项目源码.rar

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

    Java泛型技术之发展.pdf

    - **自定义数据结构**:创建自定义的泛型类或接口,以实现特定的数据结构,如优先队列、双端队列等。 - **通用方法**:编写可以处理多种类型的通用方法,如交换两个变量的值、比较两个对象等。 5. **泛型的局限性...

    数据结构-顺序队列

    通过阅读和分析源码,可以更深入地理解顺序队列的工作原理以及C语言中如何使用泛型编程和回调函数。这个项目对于学习数据结构和C语言编程是极好的实践案例,不仅可以提高编程技巧,也能增强对抽象数据类型和设计模式...

    数据结构--链式队列

    在C语言中,由于缺乏内置的泛型支持,我们可以利用void指针来模拟泛型队列,使得队列能够存储基本类型(如int、float)或复合类型(如自定义结构体)的数据。在处理void指针时,需要注意类型转换的安全性和正确性。 ...

    C#泛型集合

    本教程将深入探讨C#泛型集合的基本概念、主要类型以及如何使用它们。 首先,我们来理解一下什么是泛型。泛型是C#中的一种特性,允许我们在类、接口和方法中定义类型参数,这样就可以在多个不同的数据类型上使用相同...

    集合框架与泛型课件

    **Queue**接口用于表示先进先出(FIFO)的数据结构,常用于队列操作。LinkedList可以作为Queue的实现,另外还有PriorityQueue,它根据元素的自然顺序或自定义比较器进行排序。 接下来,我们来看**泛型**。泛型是...

    集合框架和泛型机制的解释

    TreeSet则基于红黑树,保证元素排序,可以按自然顺序或自定义比较器进行排序。 Queue接口的实现有LinkedList-based的LinkedListQueue和基于优先级堆的PriorityQueue。LinkedListQueue适合于基本的队列操作,而...

    大局观泛型程式设计与STL

    5. 特殊用途的STL组件:如stack(栈)、queue(队列)和priority_queue(优先队列)。 6. 自定义容器和算法:如何利用STL提供的基础设施开发自己的数据结构和算法。 7. STL与异常安全:理解STL在异常发生时的行为,...

    queue-link.zip_C++队列_打印 队列_队列

    5. **自定义队列实现** 如果需要更高级的功能,如优先级队列,可以使用`std::priority_queue`。另外,通过继承`std::queue`并重载相关操作,可以实现自己的队列类,例如添加打印所有元素的方法。 6. **总结** C++...

    java泛型集合 java集合 集合 java Collection

    Java 泛型集合和Java集合框架是Java编程中不可或缺的部分,它们为开发者提供了高效的数据存储和操作机制。本文将深入探讨这两个主题,并着重讲解`Collection`接口及其在Java中的应用。 首先,Java泛型是一种在编译...

Global site tag (gtag.js) - Google Analytics