JAVA数组去除重复数据

一.用List集合实现

 
    int[] str = {5, 6, 6, 6, 8, 8, 7,4};
    List<Integer> list = new ArrayList<Integer>();
    for (int i=0; i<str.length; i++) {
        if(!list.contains(str[i])) {
            list.add(str[i]);
        }
    }
    System.out.println("去除重复后的list集合"+list);

输出结果是:

去除重复后的list集合[5, 6, 8, 7, 4]

可以看到可以去除重复的元素,但是没有实现排序功能。

二.用hashSet或者TreeSet实现

    Integer[] nums = { 5, 5, 6, 6, 6, 8, 8, 7, 11, 12, 12 };
   // HashSet hset = new HashSet(Arrays.asList(nums));
    TreeSet<Integer> hset = new TreeSet<Integer>(Arrays.asList(nums));
    Iterator i = hset.iterator();
    while(i.hasNext()){
        System.out.println(i.next());
    } 

输出结果:5 6 7 8 11 12

可以看到不仅去除了重复数据,而且将数据进行了排序。

其中Arrays.asList()是将一个数组转化为一个List对象,这个方法会返回一个ArrayList类型的对象, 这个ArrayList类并非Java.util.ArrayList类,而是Arrays类的静态内部类!

TreeSet不仅可以使元素不重复,而且可以实现排序等功能的集合,它在对象元素添加到集合中时会自动按照某种比较规则将其插入到有序的对象序列中。

三.用List和set实现

      int[] nums = { 5, 6, 6, 6, 8, 8, 7 };
        List<Integer> numList = new ArrayList<Integer>();
        for (int i : nums)
            numList.add(i);
        Set<Integer> numSet = new HashSet<Integer>();
        numSet.addAll(numList);
        System.out.println(numSet);

输出结果:[5, 6, 7, 8]

可以看出,也是去掉重复的数据,并且实现了排序。

我们来做一个HashSet和TreeSet的比较:

HashSet

HashSet有以下特点

1) 不能保证元素的排列顺序,顺序有可能发生变化

2) 不是同步的

3) 集合元素可以是null,但只能放入一个null

当向HashSet集合中存入一个元素时,HashSet会调用该对象的hashCode()方法来得到该对象的hashCode值,然后根据 hashCode值来决定该对象在HashSet中存储位置。

简单的说,HashSet集合判断两个元素相等的标准是两个对象通过equals方法比较相等,并且两个对象的hashCode()方法返回值相 等

注意,如果要把一个对象放入HashSet中,重写该对象对应类的equals方法,也应该重写其hashCode()方法。其规则是如果两个对
象通过equals方法比较返回true时,其hashCode也应该相同。另外,对象中用作equals比较标准的属性,都应该用来计算
hashCode的值。

TreeSet类

TreeSet是SortedSet接口的唯一实现类,TreeSet可以确保集合元素处于排序状态。TreeSet支持两种排序方式,自然排序 和定制排序,其中自然排序为默认的排序方式。向TreeSet中加入的应该是同一个类的对象。

TreeSet判断两个对象不相等的方式是两个对象通过equals方法返回false,或者通过CompareTo方法比较没有返回0

自然排序

自然排序使用要排序元素的CompareTo(Object obj)方法来比较元素之间大小关系,然后将元素按照升序排列。

Java提供了一个Comparable接口,该接口里定义了一个compareTo(Object obj)方法,该方法返回一个整数值,实现了该接口的对象就可以比较大小。

obj1.compareTo(obj2)方法如果返回0,则说明被比较的两个对象相等,如果返回一个正数,则表明obj1大于obj2,如果是 负数,则表明obj1小于obj2。

如果我们将两个对象的equals方法总是返回true,则这两个对象的compareTo方法返回应该返回0

定制排序

自然排序是根据集合元素的大小,以升序排列,如果要定制排序,应该使用Comparator接口,实现 int compare(T o1,T o2)方法。

最重要:

1、TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。

2、HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。

3、HashSet要求放入的对象必须实现HashCode()方法,放入的对象,是以hashcode码作为标识的,而具有相同内容的 String对象,hashcode是一样,所以放入的内容不能重复。但是同一个类的对象可以放入不同的实例 。

转:http://blog.csdn.net/u010680097/article/details/52353369

时间: 2024-08-07 02:32:37

JAVA数组去除重复数据的相关文章

Java实现数组去除重复数据的方法详解

一.用List集合实现 int[] str = {5, 6, 6, 6, 8, 8, 7,4}; List<Integer> list = new ArrayList<Integer>(); for (int i=0; i<str.length; i++) { if(!list.contains(str[i])) { list.add(str[i]); } } System.out.println("去除重复后的list集合"+list); 输出结果是:

关于iOS去除数组中重复数据的几种方法

关于iOS去除数组中重复数据的几种方法 在工作工程中我们不必要会遇到,在数组中有重复数据的时候,如何去除重复的数据呢? 第一种:利用NSDictionary的AllKeys(AllValues)方法 可以将NSArray中的元素存入一个字典,然后利用AllKeys或者AllValues取得字典的所有键或值,这些键或值都是去重的.代码: NSArray *dataArray = @[@"2014-04-01",@"2014-04-02",@"2014-04-

php去除数组中重复数据

<?php /** * 去除数组中重复数据 * by www.jbxue.com **/ $input = array("a" => "green","", "red","b" => "green", "","blue", "red","c" => "witer",

PHP去除数组中重复数据的两个例子

例一: <?php$input = array("a" => "green","", "red","b" => "green", "","blue", "red","c" => "witer","hello","witer")

List集合去除重复数据

[转自]Java中List集合去除重复数据的方法 1. 循环list中的所有元素然后删除重复 public static List removeDuplicate(List list) { for ( int i = 0 ; i < list.size() - 1 ; i ++ ) { for ( int j = list.size() - 1 ; j > i; j -- ) { if (list.get(j).equals(list.get(i))) { list.remove(j); }

JS求多个数组的重复数据

今天朋友问了我这个问题:JS求多个数组的重复数据 注: 1.更准确的说是只要多个数组中有两个以上的重复数据,那么这个数据就是我需要的 2.单个数组内的数据不存在重复值(当然如果有的话,你可以去重) 3.耗时问题,这一点很重要 源代码: 1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>获取多个数组中

mysql 去除重复数据 语句

纠结的过程: mysql> select * from role group by role_name,deleted; +---------+-----------+---------+ | role_id | role_name | deleted | +---------+-----------+---------+ | 2 | xue | 12 | | 1 | zhao | 12 | | 3 | zhao | 13 | +---------+-----------+---------+

C# 移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =

移除数组中重复数据

#region 移除数组中重复数据 /// <summary> /// 移除数组中重复数据 /// </summary> /// <param name="array">需要除重的数组</param> /// <returns>不重复数组</returns> public static string[] DelRepeatData(string[] array) { return array.GroupBy(p =