`

java线程应用——排序过程动态显示

阅读更多

设计思路:(用多线程并且每次交换数据都暂停1ms实现动态效果,顺便深入理解一下各类排序的特点)

       从各类选择中选择了7种排序,用动态效果展示排序过程。生成800个随机数(用图形描述的时候每个数占一个像素点)用ArrayList存储每个点的长度(此处用矩形来画线,方便以后宽度的更改),每种排序都用一个线程来执行,每次赋值(冒泡和2路太慢,所以做了适当修改)都暂停1ms,这样才能看清过程再写一个线程刷新JPanel的窗体。

      每个排序再写一个计算排序时间的类(线程)。测试了1000个,10000个,100000个的时间。

程序效果展示如下:



 

 

 



 



 

由于生成的随机数为了方便画出来,直接选的0-69的随机数,所以基数排序过程非常迅速,只要循环两次就可以排好。归并排序很明显的是一个一个合并起来。冒泡很明显的在一个一个的挑出来。堆排序明显在找到最大的往后面放。。。。。。(不代表排序时间)

 在计算时间的时候是生成的100000以内的随机数

 

贴出部分实现代码:

重绘:

public void paint(Graphics g) {
			super.paint(g);

			for (int i = 0; i < mplist.size(); i++) {
				Rect rc = mplist.get(i);
				rc.draw(g);
			}
............
}

 

加到ArrayList:(冒泡为例)

	public void Maopao() {
		for (int i = 0; i < a.length; i++) {
			for (int j = i + 1; j < a.length; j++) {

				if (a[i] > a[j]) {
					try {
						Thread.sleep(2);
					} catch (InterruptedException e) {
						e.printStackTrace();
					}
					UI.mplist.remove(rc[i]);
					UI.mplist.remove(rc[j]);

					temp = a[i];
					a[i] = a[j];
					a[j] = temp;

					rc[i] = new Rect(x + i, y - a[i], 2, a[i], new Color(255,
							3 * a[i], 3 * a[i]));
					rc[j] = new Rect(x + j, y - a[j], 2, a[j], new Color(255,
							3 * a[j], 3 * a[j]));
					UI.mplist.add(rc[i]);
					UI.mplist.add(rc[j]);
				}
			}
		}

 

在构造方法中初始化数据:

public MaoPao(int a[]) {
		for (int i = 0; i < a.length; i++) {
			this.a[i] = a[i];
			rc[i] = new Rect(x + i, y - this.a[i], 2, this.a[i], new Color(255,
					3 * this.a[i], 3 * this.a[i]));
			UI.mplist.add(rc[i]);
		}
	}

 

 

刷新窗体的线程:

package v1;

import javax.swing.JPanel;
/**
 * 更新屏幕的线程
 * @author 斌
 *
 */
public class UpdataCenter implements Runnable{

	JPanel center;
	public UpdataCenter(JPanel center){
		this.center= center;
		if(UI.over==0){
				UI.btnStart.setText("重来");
				UI.btnStart.setEnabled(true);
			}
	}
	@Override
	public void run() {
		while(true){
			center.repaint();
			try {
				Thread.sleep(30);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}
		}
	}

}

 

 

源码参考:

 

  • 大小: 274.9 KB
  • 大小: 261.1 KB
  • 大小: 157.6 KB
  • 大小: 117.4 KB
分享到:
评论
2 楼 肆无忌惮_ 2014-07-04  
人生难得糊涂 写道
好牛逼的样子

在你面前怎么敢装逼...从头到尾都是在画矩形
1 楼 人生难得糊涂 2014-07-03  
好牛逼的样子

相关推荐

    JAVA上百实例源码以及开源项目源代码

    Java局域网通信——飞鸽传书源代码 28个目标文件 内容索引:JAVA源码,媒体网络,飞鸽传书 Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java...

    Java编程基础课设 Java打字游戏

    8. **多线程**:如果游戏包含背景音乐或者实时动态效果,可能会用到Java的多线程技术,使得不同的任务可以在同一时间执行,提升用户体验。 9. **测试与调试**:项目开发过程中,单元测试和集成测试是必不可少的,...

    (完整版)Java笔记总结.pdf

    Java 语言的特点包括简单、安全、跨平台、面向对象、支持多线程等。Java 的三个技术平台分别是 JavaSE、JavaEE、JavaME。 Java 程序的运行环境简称为 JDK,javac.exe 和 java.exe 这两个可执行程序存放在 JDK 安装...

    基于 UDP 通信机制的航班显示系统(包 括服务器和客户端)的应用软件

    《基于UDP通信机制的航班显示系统应用软件详解》 在当今信息化时代,机场航班显示系统是旅客获取航班信息的重要途径,高效、稳定的通信机制对于确保系统正常运行至关重要。本项目中,我们采用UDP(User Datagram ...

    Java游戏项目贪吃蛇和坦克大战程序源码

    在本资源中,我们拥有两个基于Java开发的经典游戏——贪吃蛇和坦克大战的源代码。这个项目非常适合Java初学者或者正在进行课程设计的学生作为实践项目,以加深对Java编程和图形用户界面(GUI)设计的理解。 1. **...

    Java开发技术大全 电子版

    5.1.8应用程序示例1——数组排序209 5.1.9应用程序示例2——杨辉三角212 5.2字符串213 5.2.1String对象的声明213 5.2.2String对象的创建214 5.2.3String对象的使用214 5.2.4String类型的数组216 5.2.5...

    游戏TOP TRUMPS (JAVA编写)

    5. **多线程**:为了让游戏体验更加流畅,开发者可能利用JAVA的多线程技术,比如在背景线程中处理游戏逻辑,防止主界面冻结。 6. **输入/输出(I/O)**:JAVA提供强大的文件I/O功能,游戏可能包含读取和保存卡片...

    JSP教程——必看.pdf

    - JSP(JavaServer Pages)是一种基于Java技术的服务器端脚本语言,用于生成动态网页内容。它允许在HTML页面中嵌入Java代码,从而实现更强大的功能。 - **1.2 JSP页面** - JSP页面是由普通的HTML标记、内嵌的Java...

    安卓Android源码————仿美图秀秀和IOS系统的相机胶卷.zip

    - 使用`RecyclerView`:在Android中,显示大量图片和元数据通常会用到`RecyclerView`,它是一种高效的列表视图,能够动态加载和回收视图,提高性能。 - 自定义Adapter:为了展示图片和相关信息,我们需要创建...

    Java数据库编程宝典4

    目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 ... 17.3 使用Java XML API——Xerces和JDOM ...

    Java数据库编程宝典3

    目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 ... 17.3 使用Java XML API——Xerces和JDOM ...

    应用源码之MyGallery.zip

    《Android应用源码解析——MyGallery深度学习》 在Android开发领域,源码学习是提升技术能力的重要途径。本篇文章将深入探讨一个名为"MyGallery"的Android应用源码,通过分析其代码结构、功能实现以及设计模式,...

    Android源码——仿ES界面文件浏览器源码.zip

    本项目“Android源码——仿ES界面文件浏览器源码”提供了一个类似ES文件管理器的实现,旨在帮助开发者理解和构建自己的文件浏览功能。ES文件管理器是一款流行的开源Android应用,以其丰富的功能和用户友好的界面而广...

    Game_Shoot.rar

    在IT行业中,游戏开发是一项充满挑战与创新的工作,而Java作为一门广泛使用的编程语言,同样可以应用于游戏开发。本篇将深入探讨一款名为“飞机大战”的Java小游戏,它包含了登录、注册、排行榜、暂停、结束等丰富的...

    ElectronicDictionary.rar_Java编程_Java_

    《电子词典——Java编程实现解析》 在IT领域,编程语言的应用无处不在,而Java作为一门广泛应用的高级编程语言,其强大的跨平台能力和丰富的类库使得它在各种项目中大放异彩。本篇文章将围绕“ElectronicDictionary...

    Java数据库编程宝典2

    目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 ... 17.3 使用Java XML API——Xerces和JDOM ...

    Java数据库编程宝典1

    目录 前言 第1部分 介绍数据库、SQL和JDBC 第1章 关系型数据库 1.1 理解关系型数据库管理系统 1.1.1 关系模型 1.1.2 Codd法则 1.1.3 表、行、列和关键字 ... 17.3 使用Java XML API——Xerces和JDOM ...

    javaSE代码实例

    第16章 多线程——Java中的并发协作 343 16.1 线程的基本知识 343 16.1.1 多线程编程的意义 343 16.1.2 定义自己的线程 344 16.1.3 创建线程对象 345 16.1.4 启动线程 347 16.1.5 同时使用多个线程 ...

Global site tag (gtag.js) - Google Analytics