A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© zhangx 中级黑马   /  2013-4-16 14:51  /  1178 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

比如一个String类型的数组str={a,sd,er,f,a,sd,sd,a,f,a}长度为10,通过什么方法能将其重复元素去掉,变成一个长度为4的数组。

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

3 个回复

倒序浏览
如果你知道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 ,只是二叉树数据结构在时间复杂度上更为优异·

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
直接用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. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

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

评分

参与人数 1技术分 +1 收起 理由
陈丽莉 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马