`
yangyi
  • 浏览: 115711 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何用java做数组乱序?

    博客分类:
  • Java
阅读更多
前些天用java做了一个数组乱序,首先建立快速排序算法,排序的依据是根据序列中随机产生的序列号,序列号利用map保证在每次排序过程中只产生一次:
java 代码
 
  1. public static void randomList(List list) {  
  2.         Collections.sort(list, new Comparator(){  
  3.             HashMap map = new HashMap();  
  4.             public int compare(Object v1, Object v2) {  
  5.                 init(v1);  
  6.                 init(v2);  
  7.                   
  8.                 double n1 = ((Double)map.get(v1)).doubleValue();  
  9.                 double n2 = ((Double)map.get(v2)).doubleValue();  
  10.                 if(n1 > n2)  
  11.                     return 1;  
  12.                 else if(n1 < n2)  
  13.                     return -1;  
  14.                 return 0;  
  15.             }  
  16.             private void init(Object v){  
  17.                 if(map.get(v) == null){  
  18.                     map.put(v, new Double(Math.random()));  
  19.                 }  
  20.             }  
  21.             protected void finalize() throws Throwable {  
  22.                 map = null;  
  23.             }  
  24.         });  
  25.     }  
有没有更好的实现呢,查阅Java API, 才发现:
API实现是向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置(包括)。
此方法以线性时间运行。而我上面提出的方法将是n*logn
java的Collections中的工具方法shuffle就是这样实现的。
分享到:
评论

相关推荐

    4种思路随机乱序输出数组元素

    在Java中,数组的操作是程序员必须掌握的基础技能之一。本篇文章将深入探讨如何在Java中实现“随机不重复输出数组元素”的四种思路,这对于诸如模拟抽奖、点名等实际应用场景非常有用。 1. **基于Math.random()的...

    Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回-附件资源

    Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回-附件资源

    Java实现简单的成语消消乐(动态数组)

    在本项目中,"Java实现简单的成语消消乐(动态数组)"是一个旨在教授初学者如何使用Java编程语言创建一个类似“成语消消乐”的游戏。这个项目涉及到几个关键的编程概念,包括动态数组、数据存储、随机数生成、输入/...

    寻找数组中的值

    一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中一个位置上面的数字赋值为-1,请问该位置赋值之前是多少? 一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中两个位置上面的数字赋值为-1...

    JavaScript中数组Array方法详解

    ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的。 1、Array.join()方法 Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后...

    java网络编程,UDP,发送16进制报文。

    本教程主要关注使用Java标准版(J2SE)进行UDP(用户数据报协议)通信,特别是如何发送16进制格式的报文。UDP是一种无连接的、不可靠的传输协议,适合对实时性要求高的场景,例如视频流和在线游戏。 首先,让我们...

    整数1~30(1-n)随机乱序排列,无重复数字,不用if判断。

    最近学java,数组部分有一题: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。解法如下: int[] arr = new int[6]; //随机生成1-30范围内数字 for (int i = 0; i &lt; arr.length; i++) {// ...

    java课程设计完整版(拼图游戏)

    玩家可以交换相邻的拼图块,Java的数组或集合数据结构(如ArrayList)可以用来存储拼图的状态,同时需要实现判断相邻、交换位置以及判断游戏完成的逻辑。 3. 用户界面:为了使游戏更具交互性,我们需要创建一个用户...

    代码乱序(JarObfuscate)原理1

    - 代码乱序的基本思想是,不改变代码的逻辑结构,只是调整指令的执行顺序,用goto等控制流指令保持原有流程。例如,一个简单的加法操作,原本的顺序是声明变量、赋值、计算,但在乱序后,可能会先执行计算再声明...

    java简易连连看网络实时对战

    6. **图标传递**:描述中提到图标通过矩阵形式传递,这意味着每个图标的位置和状态可能用二维数组表示,然后将这个数组转换成字符串或字节数组在网络上传输。 7. **用户界面(UI)设计**:一个吸引人的UI可以提升...

    java 07用UDP实现两人互聊。

    本项目以"java 07用UDP实现两人互聊"为主题,通过Java的Socket编程来构建一个简单的UDP聊天系统。 首先,我们需要了解UDP的基础概念。UDP是User Datagram Protocol的缩写,是一种无连接的、不可靠的传输协议。这...

    Java的UDP通讯.zip_UDP通讯小例子_java udp

    在Java中,我们通常使用`java.net.DatagramSocket`类来创建一个UDP套接字,用于监听和发送数据报。服务器端首先会创建一个`DatagramSocket`实例,并指定监听的端口号。然后,它会创建一个`DatagramPacket`对象,用于...

    JAVA编写网络通信程序

    它支持向流中写入基本类型的数据或一定长度的字节数组,例如使用`writeChar()`、`writeDouble()`等方法。 **1.2 数据流的使用** - **DataInputStream**通常用于从输入流中读取与机器无关的基本类型数据,实现了跨...

    Java做的socket聊天系统

    以上就是关于“Java做的socket聊天系统”的主要知识点,涵盖了Socket通信的基础、TCP协议、服务器和客户端的实现、多线程以及可能涉及到的其他技术。通过这个项目,开发者可以深入理解网络编程和并发处理,同时也...

    百度java面试查找算法代码

    2. **二分查找**:虽然通常二分查找用于有序数组,但在这个问题中,由于数组是乱序的,直接使用二分查找并不适用。然而,我们可以稍作变通,先对数组排序,然后使用二分查找。排序后的时间复杂度为O(n log n),排序...

    使用JAVA编写网络通信程序.pdf

    【标题】: 使用JAVA编写网络通信程序 【描述】: 本文将介绍如何利用JAVA进行网络编程,重点涉及客户端与服务器端的交互、输入/输出流的使用以及Socket通信机制。 【标签】: cs(计算机科学) 【内容】: 1. 客户/...

    java实现udp的发送信息和接受信息.rar

    本教程将详细介绍如何使用Java实现UDP的发送和接收信息,以及涉及的相关知识点。 首先,UDP是一种无连接的传输层协议,与TCP(传输控制协议)不同,它不保证数据包的顺序、可靠性和错误校验。这意味着UDP更适合实时...

    java网络编程之UDP协议通信

    - **准备数据**:数据通常被封装成`byte[]`数组,然后用`DatagramPacket`构造函数创建数据包,指定目标IP和端口。 - **发送数据**:客户端通过`send(DatagramPacket packet)`方法将数据包发送到服务器。 - **接收...

    JAVA基于UDP通信的一对一聊天

    UDP协议不提供连接建立、数据顺序保证或错误校验,因此它的开销比TCP小,但同时也意味着数据传输可能丢失、重复或乱序。在一对一聊天应用中,由于数据量不大,这种特性通常是可以接受的。 1. **创建DatagramSocket*...

    java聊天工具 基于UDP编程

    4. `Serverjava.txt`:可能是服务器端的源代码,用以展示如何创建UDP服务器,监听和处理来自客户端的数据。 5. `Client.java.txt`:客户端的源代码,展示了如何与服务器建立连接,发送和接收消息。 6. `record.java....

Global site tag (gtag.js) - Google Analytics