Java实现的数组去重与排序操作详解

 更新时间:2018年07月10日 09:42:23   作者:萌萌的晨子  
这篇文章主要介绍了Java实现的数组去重与排序操作,结合实例形式分析了Java针对数组去重及排序操作相关遍历、排序、判断等使用技巧与注意事项,需要的朋友可以参考下

本文实例讲述了Java实现的数组去重与排序操作。分享给大家供大家参考,具体如下:

这里演示Java实现数组去重、排序操作

文中的示例源码编写基于Jdk1.6+、junit4.8.2

java.util.Arrays.sort()

支持对int[],long[],short[],char[],byte[],float[],double[],Object[]进行排序

参考示例代码片段如下

// 声明int 数组,并初始化
int[] intArry = {5,4,7,8,2,0,1,9,3,6,10};
// 对int数组进行排序
Arrays.sort(intArry);

Junit 测试类源码:

package com.gjnote.test.array;
import java.util.Arrays;
import org.junit.Test;
public class TestArraysSort {
// 声明int 数组,并初始化
int[] intArry = {5,4,7,8,2,0,1,9,3,6,10};
@Test
public void test() {
// 对int数组进行排序
Arrays.sort(intArry);
for (int i = 0; i < intArry.length; i++) {
System.out.println(intArry[i]);
}
System.out.println(Arrays.toString(intArry));
}
}

控制台输出

0
1
2
3
4
5
6
7
8
9
10
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

java.util.Collections.sort()

通过实现内部compare方法实现对象的比较

示例代码片段如下

/**
* 使用 Collections.sort(list, Comparator(){});
* 对List数组排序 推荐使用方法
*/
public void collectionsSortElement1(List list) {
Collections.sort(list, new Comparator() {
@Override
public int compare(String o1, String o2) {
// 根据实际排序需要调整compareTo对象顺序
return (o2).compareTo(o1);
}
});
}

Java实现对List去重

方式一,使用for循环遍历去除List中的重复元素

代码片段如下

List tempList = new ArrayList();
// 去除原始List中的重复元素
for (String string : originalList) {
if (!tempList.contains(string)) {
tempList.add(string);
}
}

方式二,使用Set去重

代码片段如下

// Set 利用Set元素唯一性,去重
Set set = new HashSet(originalList);
List tempList = new ArrayList(set);

方式三,使用 TreeSet去除重复元素

TreeSet treeSet = new TreeSet(originalList);
ListtempList = new ArrayList();
tempList.addAll(treeSet);
// treeSet 默认的排序为升序,根据实际情况添加是否需要反排序
Collections.reverse(tempList);

Java实现对List去重后排序

Junit 测试List去重及排序源码

package com.gjnote.test.array;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;
import org.junit.Before;
import org.junit.Test;
/**
* Test Class
*
List 数组去重 元素排序
*
* @version 1.0
* @author www.gjnote.com
*
*/
public class TestListArraySort {
private ListoriginalList = null;
@Before
public void setUp() throws Exception {
originalList = new ArrayList();
for (int i = 10000; i > 0; i--) {
originalList.add("element" + i);
// add repeat element
if(i % 2 == 0) {
originalList.add("element" + i);
}
}
}
/**
* 输出List 元素
* @param list
*/
private void outputList(List list) {
for (int i = 0; i < list.size(); i++) {
System.out.println(list.get(i));
}
}
/**
* 使用 Collections.sort(list, Comparator(){});
* 排序 推荐方法
*/
private void collectionsSortElement(List list) {
long start = System.currentTimeMillis();
Collections.sort(list, new Comparator() {
@Override
public int compare(String o1, String o2) {
// 根据实际排序需要调整compareTo对象顺序
return o2.compareTo(o1);
}
});
//outputList(tempList);
System.out.println("Collections.sort:"
+ (System.currentTimeMillis() - start) + "ms");
}
/**
* 测试 使用for循环遍历去除重复元素
* Collections.sort排序
*/
@Test
public void testForLoopRemoveRepeatElement() {
System.out.println("testForLoopRemoveRepeatElement");
long start = System.currentTimeMillis();
List tempList = new ArrayList();
// 去除重复元素
for (String string : originalList) {
if (!tempList.contains(string)) {
tempList.add(string);
}
}
// 排序
collectionsSortElement(tempList);
//outputList(tempList);
System.out.println("使用for循环遍历List,去除重复元素: "
+ (System.currentTimeMillis() - start) + "ms");
}
/**
* 测试 使用Set去重;
* 使用Collections.sort(list, Comparator(){});排序
*
*/
@Test
public void testSetRemoveRepeatElement() {
System.out.println("testSetRemoveRepeatElement");
long start = System.currentTimeMillis();
// 先排序 (理论值:先排序后去重会比后排序效率更高)
collectionsSortElement(originalList);
// Set 利用Set元素唯一性,去重
Set set = new HashSet(originalList);
List tempList = new ArrayList(set);
// 后排序 可以注释先排序,开启后排序试试运行时间
//collectionsSortElement(tempList);
//outputList(tempList);
System.out.println("Collections.sort排序,使用Set去重:"
+ (System.currentTimeMillis() - start) + "ms");
}
/**
* 测试 使用 TreeSet去除重复元素
* 默认排序或Collections.reverse翻转排序
*/
@Test
public void testTreeSetRemoveRepeatElement() {
System.out.println("testTreeSetRemoveRepeatElement");
long start = System.currentTimeMillis();
TreeSettreeSet = new TreeSet(originalList);
ListtempList = new ArrayList();
tempList.addAll(treeSet);
// treeSet 默认的排序为升序,根据实际情况添加是否需要反排序
Collections.reverse(tempList);
//outputList(tempList);
System.out.println("使用 TreeSet排序,去除重复元素:"
+ (System.currentTimeMillis() - start) + "ms");
}
@Test
public void testMethods() {
//outputList(originalList);
// List 去重 推荐方法
testSetRemoveRepeatElement();// 14ms
testTreeSetRemoveRepeatElement();// 20ms
//testForLoopRemoveRepeatElement();// 2525ms
}
}

运行testSetRemoveRepeatElement()控制台输出结果

testSetRemoveRepeatElement
Collections.sort:8ms
Collections.sort排序,使用Set去重:14ms

运行testTreeSetRemoveRepeatElement()控制台输出结果

testTreeSetRemoveRepeatElement
使用 TreeSet排序,去除重复元素:20ms

运行testForLoopRemoveRepeatElement()控制台输出结果

testForLoopRemoveRepeatElement
Collections.sort:7ms
使用for循环遍历List,去除重复元素: 2525ms

PS:这里再为大家提供几款相关工具供大家参考使用:

在线去除重复项工具:
http://tools.jb51.net/code/quchong

在线文本去重复工具:
http://tools.jb51.net/aideddesign/txt_quchong

在线动画演示插入/选择/冒泡/归并/希尔/快速排序算法过程工具:
http://tools.jb51.net/aideddesign/paixu_ys

更多关于java算法相关内容感兴趣的读者可查看本站专题:《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总

希望本文所述对大家java程序设计有所帮助。

相关文章

  • spring cloud学习教程之config修改配置详解

    spring cloud学习教程之config修改配置详解

    这篇文章主要给大家介绍了关于spring cloud学习教程之config修改配置的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。
    2017-09-09
  • JAVA 多线程之信号量(Semaphore)实例详解

    JAVA 多线程之信号量(Semaphore)实例详解

    这篇文章主要介绍了JAVA 多线程之信号量(Semaphore)实例详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • Java关键字volatile详析

    Java关键字volatile详析

    这篇文章主要介绍了Java关键字volatile,volatile关键字可以说是Java虚拟机提供的最轻量级的同步机制,但对于为什么它只能保证可见性,不保证原子性,它又是如何禁用指令重排的,还有很多同学没彻底理解,文章会让大家牢掌握一个Java核心知识点
    2022-01-01
  • Java+mysql实现学籍管理系统

    Java+mysql实现学籍管理系统

    这篇文章主要为大家详细介绍了Java+mysql实现学籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-07-07
  • java中重载、覆盖和隐藏三者的区别分析

    java中重载、覆盖和隐藏三者的区别分析

    本篇文章介绍了,在java中重载、覆盖和隐藏它们三者的区别分析。需要的朋友参考下
    2013-04-04
  • Java解决LocalDateTime传输前端为时间的数组

    Java解决LocalDateTime传输前端为时间的数组

    本文主要介绍了Java解决LocalDateTime传输前端为时间的数组,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2024-03-03
  • springboot 启动如何排除某些bean的注入

    springboot 启动如何排除某些bean的注入

    这篇文章主要介绍了springboot 启动如何排除某些bean的注入方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-08-08
  • java实现将Webp转为jpg格式方式

    java实现将Webp转为jpg格式方式

    这篇文章主要介绍了java实现将Webp转为jpg格式方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-07-07
  • Java异常中toString()和getMessage()区别

    Java异常中toString()和getMessage()区别

    在java异常体系中,要打印异常信息,可以通过:e.getMessage() 、 e.toString() e.printStackTrace() 等方法打印,本文主要介绍了Java异常中toString()和getMessage()区别,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • SSh结合Easyui实现Datagrid的分页显示

    SSh结合Easyui实现Datagrid的分页显示

    这篇文章主要为大家详细介绍了SSh结合Easyui实现Datagrid的分页显示的相关资料,感兴趣的小伙伴们可以参考一下
    2016-06-06

最新评论