前些天用java做了一个数组乱序,首先建立快速排序算法,排序的依据是根据序列中随机产生的序列号,序列号利用map保证在每次排序过程中只产生一次:
java 代码
- public static void randomList(List list) {
- Collections.sort(list, new Comparator(){
- HashMap map = new HashMap();
- public int compare(Object v1, Object v2) {
- init(v1);
- init(v2);
-
- double n1 = ((Double)map.get(v1)).doubleValue();
- double n2 = ((Double)map.get(v2)).doubleValue();
- if(n1 > n2)
- return 1;
- else if(n1 < n2)
- return -1;
- return 0;
- }
- private void init(Object v){
- if(map.get(v) == null){
- map.put(v, new Double(Math.random()));
- }
- }
- protected void finalize() throws Throwable {
- map = null;
- }
- });
- }
有没有更好的实现呢,查阅Java API, 才发现:
API实现是向后遍历列表,从最后一个元素一直到第二个元素,将随机选择的元素重复交换到“当前位置”。元素是从列表中随机选择的,从第一个元素运行到当前位置(包括)。
此方法以线性时间运行。而我上面提出的方法将是n*logn
java的Collections中的工具方法shuffle就是这样实现的。
分享到:
相关推荐
在Java中,数组的操作是程序员必须掌握的基础技能之一。本篇文章将深入探讨如何在Java中实现“随机不重复输出数组元素”的四种思路,这对于诸如模拟抽奖、点名等实际应用场景非常有用。 1. **基于Math.random()的...
Java调用C语言动态库(JNA方式):回调函数、结构体数组传参、结构体数组返回-附件资源
在本项目中,"Java实现简单的成语消消乐(动态数组)"是一个旨在教授初学者如何使用Java编程语言创建一个类似“成语消消乐”的游戏。这个项目涉及到几个关键的编程概念,包括动态数组、数据存储、随机数生成、输入/...
一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中一个位置上面的数字赋值为-1,请问该位置赋值之前是多少? 一个长度为100的数组,开始乱序存放了1到100共100个数, 将其中两个位置上面的数字赋值为-1...
ECMAScript 3在Array.prototype中定义了一些很有用的操作数组的函数,这意味着这些函数作为任何数组的方法都是可用的。 1、Array.join()方法 Array.join()方法将数组中所有元素都转化为字符串并连接在一起,返回最后...
本教程主要关注使用Java标准版(J2SE)进行UDP(用户数据报协议)通信,特别是如何发送16进制格式的报文。UDP是一种无连接的、不可靠的传输协议,适合对实时性要求高的场景,例如视频流和在线游戏。 首先,让我们...
最近学java,数组部分有一题: 创建一个长度为6的int型数组,要求取值为1-30,同时元素值各不相同。解法如下: int[] arr = new int[6]; //随机生成1-30范围内数字 for (int i = 0; i < arr.length; i++) {// ...
玩家可以交换相邻的拼图块,Java的数组或集合数据结构(如ArrayList)可以用来存储拼图的状态,同时需要实现判断相邻、交换位置以及判断游戏完成的逻辑。 3. 用户界面:为了使游戏更具交互性,我们需要创建一个用户...
- 代码乱序的基本思想是,不改变代码的逻辑结构,只是调整指令的执行顺序,用goto等控制流指令保持原有流程。例如,一个简单的加法操作,原本的顺序是声明变量、赋值、计算,但在乱序后,可能会先执行计算再声明...
6. **图标传递**:描述中提到图标通过矩阵形式传递,这意味着每个图标的位置和状态可能用二维数组表示,然后将这个数组转换成字符串或字节数组在网络上传输。 7. **用户界面(UI)设计**:一个吸引人的UI可以提升...
本项目以"java 07用UDP实现两人互聊"为主题,通过Java的Socket编程来构建一个简单的UDP聊天系统。 首先,我们需要了解UDP的基础概念。UDP是User Datagram Protocol的缩写,是一种无连接的、不可靠的传输协议。这...
在Java中,我们通常使用`java.net.DatagramSocket`类来创建一个UDP套接字,用于监听和发送数据报。服务器端首先会创建一个`DatagramSocket`实例,并指定监听的端口号。然后,它会创建一个`DatagramPacket`对象,用于...
它支持向流中写入基本类型的数据或一定长度的字节数组,例如使用`writeChar()`、`writeDouble()`等方法。 **1.2 数据流的使用** - **DataInputStream**通常用于从输入流中读取与机器无关的基本类型数据,实现了跨...
以上就是关于“Java做的socket聊天系统”的主要知识点,涵盖了Socket通信的基础、TCP协议、服务器和客户端的实现、多线程以及可能涉及到的其他技术。通过这个项目,开发者可以深入理解网络编程和并发处理,同时也...
2. **二分查找**:虽然通常二分查找用于有序数组,但在这个问题中,由于数组是乱序的,直接使用二分查找并不适用。然而,我们可以稍作变通,先对数组排序,然后使用二分查找。排序后的时间复杂度为O(n log n),排序...
【标题】: 使用JAVA编写网络通信程序 【描述】: 本文将介绍如何利用JAVA进行网络编程,重点涉及客户端与服务器端的交互、输入/输出流的使用以及Socket通信机制。 【标签】: cs(计算机科学) 【内容】: 1. 客户/...
本教程将详细介绍如何使用Java实现UDP的发送和接收信息,以及涉及的相关知识点。 首先,UDP是一种无连接的传输层协议,与TCP(传输控制协议)不同,它不保证数据包的顺序、可靠性和错误校验。这意味着UDP更适合实时...
- **准备数据**:数据通常被封装成`byte[]`数组,然后用`DatagramPacket`构造函数创建数据包,指定目标IP和端口。 - **发送数据**:客户端通过`send(DatagramPacket packet)`方法将数据包发送到服务器。 - **接收...
UDP协议不提供连接建立、数据顺序保证或错误校验,因此它的开销比TCP小,但同时也意味着数据传输可能丢失、重复或乱序。在一对一聊天应用中,由于数据量不大,这种特性通常是可以接受的。 1. **创建DatagramSocket*...
4. `Serverjava.txt`:可能是服务器端的源代码,用以展示如何创建UDP服务器,监听和处理来自客户端的数据。 5. `Client.java.txt`:客户端的源代码,展示了如何与服务器建立连接,发送和接收消息。 6. `record.java....