黑马程序员技术交流社区

标题: 再学了一遍String,优化了一下数组去重复,嘿嘿 [打印本页]

作者: 陈培果    时间: 2014-6-24 17:37
标题: 再学了一遍String,优化了一下数组去重复,嘿嘿
本帖最后由 陈培果 于 2014-6-25 09:30 编辑
  1. public static void main(String[] args)
  2.         {
  3.          //数组去重复
  4.         int[] arr = new int[]{4,2,4,6,1,2,4,7,8};
  5.         StringBuilder sb=new StringBuilder();
  6.         sb.append("{");
  7.                         for (int i = 0; i < arr.length; i++)
  8.                         {
  9.                                 if (!(sb.toString().contains(String.valueOf(arr[i]))))
  10.                 sb.append(arr[i]+",");   
  11.                         }
  12.                         sb.replace(sb.length()-1, sb.length(), "}");
  13.                         System.out.println(sb);
  14.         }
复制代码
还有更简单的吗?


作者: 崔湖尧    时间: 2014-6-24 18:16
判断条件可以简化一下:
if (sb.indexOf(String.valueOf(arr[i])) == -1)
作者: Alan_Kwan    时间: 2014-6-24 18:46
这代码通用性。。额。。这不是面向对象的代码。。
作者: 陈培果    时间: 2014-6-24 19:02
崔湖尧 发表于 2014-6-24 18:16
判断条件可以简化一下:
if (sb.indexOf(String.valueOf(arr)) == -1)

恩,你这个直接索引位置的方法也不错,比我要少一个单词{:2_32:}

作者: 陈培果    时间: 2014-6-24 19:03
Alan_Kwan 发表于 2014-6-24 18:46
这代码通用性。。额。。这不是面向对象的代码。。

面向对象的话,你觉得该怎么弄比较好
作者: Alan_Kwan    时间: 2014-6-24 19:06
陈培果 发表于 2014-6-24 19:03
面向对象的话,你觉得该怎么弄比较好

面向对象的话,我的理解是:
1、逻辑与显示应该分开。
2、代码通用性要强,假如不是int类型的数组呢?考虑这个问题。。

不过可能是我想多了。。你标题写的是String,是我想太多了。。
作者: 陈培果    时间: 2014-6-24 19:10
Alan_Kwan 发表于 2014-6-24 19:06
面向对象的话,我的理解是:
1、逻辑与显示应该分开。
2、代码通用性要强,假如不是int类型的数组呢?考 ...

你说的是把那个抽成方法,用泛型来操作吗
作者: dispensable    时间: 2014-6-24 19:10
:L既然都写到这个程度了,貌似可以封装起来:
public static  String  delDup (int[] arr){
StringBuilder sb=new StringBuilder();
        sb.append("{");
                        for (int i = 0; i < arr.length; i++)
                        {
                                if (!(sb.toString().contains(String.valueOf(arr[i]))))
                sb.append(arr[i]+",");   
                        }
                        sb.replace(sb.length()-1, sb.length(), "}");
return sb;

作者: crazystraw    时间: 2014-6-24 19:15
基础的东西也要回忆一下
作者: Alan_Kwan    时间: 2014-6-24 19:17
陈培果 发表于 2014-6-24 19:10
你说的是把那个抽成方法,用泛型来操作吗
  1. import java.util.*;

  2. class Test
  3. {
  4.    public static void main(String[] args)
  5.     {
  6.         // Integer[] arr = new Integer[]{4,2,4,6,1,2,4,7,8};
  7.         Character [] arr = new Character[]{'a','b','c','a','d','c','e'};
  8.         print(arr);
  9.         print(originalRe(arr));
  10.     }

  11.     public static <T> Object [] originalRe(T [] arr)
  12.     {
  13.         ArrayList<T> alist = new ArrayList<T>();
  14.         for(T t : arr)
  15.         {
  16.             if(!alist.contains(t))
  17.                  alist.add(t);      
  18.         }

  19.         return alist.toArray();
  20.     }

  21.     public static <T> void print(T [] arr)
  22.     {
  23.         StringBuilder sb = new StringBuilder();
  24.         sb.append("{");

  25.         for(T a : arr)
  26.         {
  27.             sb.append(a+", ");
  28.         }

  29.         sb.replace(sb.length()-2, sb.length(), "}");
  30.         System.out.println(sb.toString());
  31.     }
  32. }
复制代码

作者: 陈培果    时间: 2014-6-24 19:21
dispensable 发表于 2014-6-24 19:10
既然都写到这个程度了,貌似可以封装起来:
public static  String  delDup (int[] arr){
StringBuild ...

你的方法返回类型该是StringBuilder。封装起来的话,要做到通用性,再加上泛型和控制遍历。这样方法就强大了,那样做起来要麻烦一点。
作者: 陈培果    时间: 2014-6-24 19:22
crazystraw 发表于 2014-6-24 19:15
基础的东西也要回忆一下

我在复习,看到以前写的这个程序好长的,就优化了一下

作者: 陈培果    时间: 2014-6-24 19:25
Alan_Kwan 发表于 2014-6-24 19:17

恩恩,这样做通用性很好,不错不错{:2_31:}
作者: 马宁    时间: 2014-6-24 19:25
来学习一下!
作者: 崔湖尧    时间: 2014-6-24 21:23
陈培果 发表于 2014-6-24 19:02
恩,你这个直接索引位置的方法也不错,比我要少一个单词

少一个单词,嗯
这一个单词包括了String对象的建立,内存分配,String的初使化,String的回收
作者: 陈培果    时间: 2014-6-24 21:55
崔湖尧 发表于 2014-6-24 21:23
少一个单词,嗯
这一个单词包括了String对象的建立,内存分配,String的初使化,String的回收 ...

哈哈,有道理,{:3_47:}
作者: 这个夏天的芬芳    时间: 2014-6-24 22:13
{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}{:2_31:}
作者: 夏季熬成了秋    时间: 2014-6-24 22:15
看了颇有领悟,新手飘过~~
作者: 王广丛    时间: 2014-6-25 07:03
Alan_Kwan 发表于 2014-6-24 19:17

利用list还是比较方便的
作者: Leung    时间: 2014-6-25 07:07
这算不上优化
作者: jieyu90    时间: 2014-6-25 08:25
本帖最后由 jieyu90 于 2014-6-27 15:20 编辑

不好意思,有问题。。。
作者: №星晨∮    时间: 2014-6-27 12:32
jieyu90 发表于 2014-6-25 08:25
int[] arr = new int[]{4,2,4,6,1,2,4,7,8};
HashSet hs = new HashSet().addAll(Arrays.asList(arr));
Sys ...

感觉不错




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