`
java--hhf
  • 浏览: 305874 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

java集合框架之自定义队列

阅读更多

    java集合框架最初是源自于数组,所以我们在学习java集合框架的时候一定不要脱离了数组的思想。数组的出现给了人们另一种新的对数据处理的认识观。

    我们知道,数组定义时必须指定长度,这就在一定程度上限制了数组的功能。于是集合框架就应运而生了,简单地说,现在我们要讲的自定义队列就是会变长的的数组。可以想象,实现这一功能是非常简单的,只要我们得到当前数组长度,然后根据这个数值新创建一个具有新的长度的数组,就可以了。

    自定义队列的主要思想就是上述所讲了,根据这个思想,现在我们就又可以多实现一些功能,比如:把一个数据插入到对列(数组)的第六号位置、删除第六号位置上的数据,,,

如下代码:

package hhf.自定义队列1020;

public class queue {
//创建一个最大众化的对象
	int [] list = new int[0];
//添加函数
	public void add(int i2){
//创建一个比原来数组大一号的新数组	
		int [] listnew = new int[list.length + 1];  
//添加数据到最后一位
		listnew[list.length] = i2;
//前面的空位全用list中原来的数据补充
		for(int i = 0; i< list.length; i++)
			listnew[i] = list[i];
//还给list指针
		list = listnew;
		
	} 
//删除一个元素
	public void delete(int index){
//如果不在数组里 就不要删除了
		if(index < 0 || index >= list.length)
			return;
//创建一个比原来数组短一号的数组	
		int [] listnew = new int[list.length - 1];  
//删除的那个号前的元素全部复制到新的数组	
		for(int i = 0; i< index; i++)
			listnew[i] = list[i];
//跳过那个元素,继续复制
		for(int i = index+1; i< list.length; i++)
			listnew[i-1] = list[i ];
//还给list	
		list = listnew;
	} 
//查找函数
    public int find(int index){
		return list[index];
	} 
//返回大小
	public int size(){
		return list.length;
	} 
}

 

 

我们现在相当于把数组封装起来了,创建了一个queue类,在类中提供了add,delete,find,size函数,使用的时候我们就创建一个queue类的对象,调用对象的方法,隐形的使用了数组。

如下面就是一种使用的方法

 

package hhf.自定义队列1020;

import java.util.Random;

public class test {
	public static void main(String[] args) {
//定义一个队列对象
		queue q_list = new queue();
//用随机数的方法来选择队列中元素的个数
		Random ran = new Random();
		int	size = ran.nextInt(20);
//用以个for循环添加队列元素
		System.out.println("一共有队列元素    "+size+"  个");
//添加元素
		for(int i = 0;i < size ; i++)
			q_list.add(i);
//打印队列元素
		for(int i = 0; i < q_list.size(); i++)
			System.out.println(q_list.find(i));
		System.out.println("============================");
//删除六号元素
		q_list.delete(6);
		System.out.println("删除第六号元素后一共有队列元素    "+q_list.size()+"  个");
//打印队列元素
		for(int i = 0; i < q_list.size(); i++)
			System.out.println(q_list.find(i));
	}

}

 有了这样的队列类使用起来就比较简单而且容易理解。

     当我们肯定了以上的思维后,我们再稍微做一点点拓展——可以改变数组里保存的数据类型。要实现这个功能也只需要稍微改变代码就可。

package hhf.自定义泛型1021;

public class Generics<E> {
//创建一个最大众化的对象
	Object [] list = new Object[0];
//添加函数	
	public void add(E i2){
//创建一个比原来数组大一号的新数组
		Object [] listnew = new Object[list.length + 1];  
//添加数据到最后一位
		listnew[list.length] = i2;
//前面的空位全用list中原来的数据补充
		for(int i = 0; i< list.length; i++)
			listnew[i] = list[i];
//还给list指针
		list = listnew;
	} 
//删除一个元素
	public void delete(int index){
//如果不在数组里 就不要删除了
		if(index < 0 || index > list.length)
		return;
//创建一个比原来数组短一号的数组	
		Object [] listnew = new Object[list.length - 1];  
//删除的那个号前的元素全部复制到新的数组	
		for(int i = 0; i< index; i++)
			listnew[i] = list[i];
//跳过那个元素,继续复制
		for(int i = index+1; i< list.length; i++)
			listnew[i-1] = list[i ];
//还给list	
		list = listnew;
	} 
//查找函数
	public Object find(int index){
		return list[index];		
	} 
//返回大小
	public int size(){
		return list.length;
	} 	
}

 我们发现只要将

 int [] list = new int[0];改为Object [] list = new Object[0];

 即,将数据类型改为Object,

 只要将public void add(int i2)改为public void add(E i2)

 即,将行参类型改为E  ,就可以了。

 

   那么在使用的时候也就相应发生了细微变化

   改queue q_list = new queue();为

     Generics<String> generics_list = new Generics<String>();在创建对象的时候给它指定类型就可以了。

   以上就是我给大家介绍的自定义队列,说白了,上面所述的队列也就是另一种升级版的数组了。

 

0
2
分享到:
评论

相关推荐

    java开源包4

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    java开源包11

    最大限度地减少时间和费用开发自定义的DSL(领域特定语言在Java)要求。 日志服务器 Apache Flume.tar Flume 是一个分布式、可靠和高可用的服务,用于收集、聚合以及移动大量日志数据,使用一个简单灵活的架构,就...

    Java JDK实例宝典

    7 自定义队列 4. 8 对List排序 4. 9 HashSet. LinkedHashSet和TreeSet 4. 10 列表. 集合与数组的互相转换 4. 11 HashMap. Hashtable. LinkedHashMap和TreeMap 4. 12 对Map排序 4. 13 ...

    JAVA开发工程师简历

    具有扎实的Java基础,对Java的集合、IO、多线程有一定的理解。 熟练使用spring,struts2,hibernate,springmvc,mybatis,springboot等架构的以及各相互间的整合开发(ssh,ssm),配置及对象的设计和开发。 对redis缓存...

    Java语言基础下载

    队列: 250 树: 250 实例分析 252 内容总结 274 独立实践 275 第十六章:数据库(一) 276 学习目标 276 数据库的基本概念 277 数据的描述 277 数据联系的描述 278 数据模型 278 数据库三级模式结构 279 数据库三个...

    infinite-java-code:额外课程作业

    Java 集合框架 - 集合、列表、树、堆栈、队列、映射。 Java泛型。 多线程和多线程应用程序。 同步问题和同步技术(互斥、信号量、屏障)。 具有图形用户界面的应用程序的设计和开发:AWT 和 Swing; 现有组件的使用...

    Java常见面试题208道.docx

    面试题包括以下十九部分:Java 基础、容器、多线程、反射、对象拷贝、Java Web 模块、异常、网络、设计模式、Spring/Spring MVC、Spring Boot/Spring Cloud、Hibernate、Mybatis、RabbitMQ、Kafka、Zookeeper、MySql...

    Java2核心技术.part5

    2.3 集合框架 2.4 算法 2.5 遗留下来的集合 第3章 网络 3.1 连接到服务器 3.2 实现服务器 3.3 发送E-Mail 3.4 建立URL连接 3.5 高级套接字编程 第4章 数据库编程 4.1 JDBC的设计 4.2 结构化查询语言 4.3...

    经典JAVA.EE企业应用实战.基于WEBLOGIC_JBOSS的JSF_EJB3_JPA整合开发.pdf

    中文名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 原名: 经典Java EE企业应用实战--基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 作者: 李刚 资源格式: PDF 版本: 第一版 出版社: 电子...

    java范例开发大全源代码

     第12章 集合(教学视频:45分钟) 358  12.1 Set 358  实例204 利用HashSet删除学生 358  实例205 不重复的随机数序列 360  实例206 运用映射的相关类(Map) 363  实例207 运用集的相关类(Set) ...

    java范例开发大全

    实例211 自定义Queue队列 373 实例212 List、Set与Array之间的相互转换 375 实例213 二分查找法的实现方法 377 实例214 模拟操作系统的进程调度 379 实例215 利用栈将字符串逆序输出 381 实例216 动态的数组链表 382...

    Java范例开发大全 (源程序)

     实例211 自定义Queue队列 373  实例212 List、Set与Array之间的相互转换 375  实例213 二分查找法的实现方法 377  实例214 模拟操作系统的进程调度 379  实例215 利用栈将字符串逆序输出 381  实例216 ...

    Java2核心技术.part3

    2.3 集合框架 2.4 算法 2.5 遗留下来的集合 第3章 网络 3.1 连接到服务器 3.2 实现服务器 3.3 发送E-Mail 3.4 建立URL连接 3.5 高级套接字编程 第4章 数据库编程 4.1 JDBC的设计 4.2 结构化查询语言 4.3...

    Java2核心技术.part1

    2.3 集合框架 2.4 算法 2.5 遗留下来的集合 第3章 网络 3.1 连接到服务器 3.2 实现服务器 3.3 发送E-Mail 3.4 建立URL连接 3.5 高级套接字编程 第4章 数据库编程 4.1 JDBC的设计 4.2 结构化查询语言 4.3 安装JDBC...

    Java2核心技术.part6

    2.3 集合框架 2.4 算法 2.5 遗留下来的集合 第3章 网络 3.1 连接到服务器 3.2 实现服务器 3.3 发送E-Mail 3.4 建立URL连接 3.5 高级套接字编程 第4章 数据库编程 4.1 JDBC的设计 4.2 结构化查询语言 4.3...

    Java2核心技术.part4

    2.3 集合框架 2.4 算法 2.5 遗留下来的集合 第3章 网络 3.1 连接到服务器 3.2 实现服务器 3.3 发送E-Mail 3.4 建立URL连接 3.5 高级套接字编程 第4章 数据库编程 4.1 JDBC的设计 4.2 结构化查询语言 4.3...

Global site tag (gtag.js) - Google Analytics