黑马程序员技术交流社区

标题: 关于数组的问题 [打印本页]

作者: zhangx    时间: 2013-4-16 14:51
标题: 关于数组的问题
比如一个String类型的数组str={a,sd,er,f,a,sd,sd,a,f,a}长度为10,通过什么方法能将其重复元素去掉,变成一个长度为4的数组。

作者: PANZERLEADER    时间: 2013-4-16 15:15
如果你知道hashSet去重功能的话,也许能解决你的问题;
写个简单的代码解决你的问题吧;

import java.util.HashSet;
import java.util.Set;


public class SetTest {

        public static void main(String[] args) {
                String [] test = {"a","sd","er","f","a","sd","sd","a","f","a"};
               
                Set<String> set = new HashSet<String>();
               
                for(String t : test){
                        set.add(t);
                }
               
                System.out.println("集合test个数:"+test.length);
                System.out.println("去重后集合在还剩下数据个数:"+set.size());
               
        }

}


如果追求顺序性,考虑用linkedHashSet 链表去重,去重原理还是构建二叉树数据结构,比较hashcode和equas ,只是二叉树数据结构在时间复杂度上更为优异·

作者: 杨冉    时间: 2013-4-16 16:52
直接用Set集合不能重复的特性就好了,遍历字符串数组然后再存进TreeSet中就好了,代码如下
  1. public class Test {

  2.         public static void main(String[] args) {
  3.                 String[] str = { "a", "sd", "er", "f", "a", "sd", "sd", "a", "f", "a" };

  4.                 for (String s : removeRep(str))
  5.                         System.out.println(s);

  6.         }

  7.         public static String[] removeRep(String[] str) {

  8.                 Set<String> set = new TreeSet<String>();

  9.                 for (String s : str) {
  10.                         set.add(s);
  11.                 }

  12.                 return set.toArray(new String[0]);
  13.         }

  14. }
复制代码

作者: 奋斗2013    时间: 2013-4-16 16:52
list集合允许有重复的对象。其中的对象有一定的顺序,便于快速方问。
而set集合只是把对象加入集合中,但set集合不包含重复的元素
把数组str={a,sd,er,f,a,sd,sd,a,f,a}中的元素添加到集合set中就回除掉重复的元素
使用楼上的代码就可以。楼上已经写了。大同小异。我就不写了。
HashSet类实际上是HashMap的实例。有哈希表支持,重写了equals()方法。从而保证插入对象的唯一性。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2