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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李长波 中级黑马   /  2012-11-25 00:24  /  1856 人查看  /  9 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李长波 于 2012-11-25 00:43 编辑

怎么将一个intl类型的数据加到一个长度为10000的 int 类型数组里(该数组里的数据是不重复的)!假设该数据在10000个数据里不存在,就添加进去!存在的话就不添加进去!要求高效!求大家解决!谢谢!求代码!

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

9 个回复

倒序浏览
我写了一个,不知道合不合楼主的意思。
其余方法暂没想出来,高效不高效,那我不知道,没有比较。还望其他高手来答
  1. import java.util.List;
  2. import java.util.ArrayList;

  3. public class Demo {
  4.         public static void main(String[] args) {
  5.                 long start=System.currentTimeMillis();
  6.                 Object[] arr=new Integer[10000];
  7.                 List<Integer> list=new ArrayList<Integer>();
  8.                 while(list.size()!=10000){
  9.                         int num=(int) (Math.random()*100000+1);
  10.                         if(!list.contains(num))
  11.                                 list.add(num);
  12.                 }
  13.                 arr= list.toArray();
  14. //                for(Object obj:arr){
  15. //                        System.out.println(obj);
  16. //                }
  17.                 long end=System.currentTimeMillis();
  18.                 System.out.println("用时:"+(end-start));
  19.         }
  20. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
奋斗的青春 + 1 赞一个!

查看全部评分

回复 使用道具 举报
崔政 发表于 2012-11-25 00:44
我写了一个,不知道合不合楼主的意思。
其余方法暂没想出来,高效不高效,那我不知道,没有比较。还望其他 ...

你这个可以添加进去!但要循环10000次啊!老张的高新视频里说用hashcode可以搞定这个问题!但我就是折腾不出来!
回复 使用道具 举报
本帖最后由 李长波 于 2012-11-25 00:53 编辑
崔政 发表于 2012-11-25 00:44
我写了一个,不知道合不合楼主的意思。
其余方法暂没想出来,高效不高效,那我不知道,没有比较。还望其他 ...


在给你个问题假设10000个有重复的!你怎么找到重复的那些了!基本的思想肯定是要用hash算法了!
回复 使用道具 举报
楼主的这个问题是自己想出来的吗?
你的第二个问题,我大致想了下,就如你所说,假设10000个有重复的,找到重复的数据。按我所想,不论你做什么,不都得先有这个数组?
不还是要生成,按我直接的想法,我会在生成数组的时候,就进行判断,重复的我也添加,只不过我用另一个容器保存下这些重复的。

再假如说天生就有那么一个10000大小的数组,我也会用Arrays.asList()方法将数组转成list,因为list的contains方法用来判断你这个问题,我觉得很好用。

至于hashcode,因为我的直观想法是用for循环生成随机生成int值,而int值是可以直接比的,没考虑hashset。
如果数组存在的是引用类型的数据,如自定义的Student,那用hashcode亦或是equals,我觉得会更好一点。
不知道楼主能否明白我的意思
回复 使用道具 举报
崔政 发表于 2012-11-25 00:59
楼主的这个问题是自己想出来的吗?
你的第二个问题,我大致想了下,就如你所说,假设10000个有重复的,找到 ...

不是瞎想的!是看了老张的高新视频里的那个hashcode那节的一个问题!就想想能不能搞定!
回复 使用道具 举报
崔政 中级黑马 2012-11-25 01:22:55
7#
本帖最后由 崔政 于 2012-11-25 01:24 编辑

我好像有点明白你的意思了。
给你个案例,你看下能否帮到你。
下面的代码是利用hashset,来去除数组中的重复值。
  1.               String[] strs1 = new String[]{"1","2","3","3","2","1","7"};
  2.                
  3.                HashSet set = new HashSet();
  4.               
  5.                set.addAll(Arrays.asList(strs1));
  6.                //Arrays.asList将数组转List,addAl将Collection转化为HashSet
  7.               
  8.                String[] strs2 = (String[])set.toArray(new String[0]);
  9.                
  10.                 for(int i=0;i<strs2.length;i++)
  11.                 {
  12.                        System.out.println(strs2[i]);
  13.                 }
复制代码
回复 使用道具 举报
本帖最后由 李长波 于 2012-11-25 01:44 编辑

算是明白了用addall结合hashset能直接就能过掉重复的的数据!

点评

这就还有一个问题了,如果数组中有重复的元素会被去掉的,这要数组中的元素不能重复  发表于 2012-11-25 08:23
回复 使用道具 举报
----------------
赶早起来第一件正事,就是昨天的问题,谁知道,还给解决了,{:soso_e109:}
-----------------
public class TreeSet {
public static void main(String[] args) throws Exception {
  Collection<Integer> coll = new java.util.TreeSet<>();
  int count  = 100;
  for(int i = 0;i<count;i++){
   coll.add(new Random().nextInt(10));
  }
  //获取键盘录入
  BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  String str = br.readLine();
   int trans = Integer.parseInt(str);
   coll.add(trans);
  //把集合转化成数组
   int [] arr = new int [coll.size()];
   Iterator< Integer> it = coll.iterator();
   int i =0;
   while(it.hasNext()){
    arr[i] = it.next();
    i++;
   }
   for(int x = 0;x<arr.length;x++){
    System.out.println(arr[x]);
   }
  
}
}

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
徐军涛 发表于 2012-11-25 09:09
----------------
赶早起来第一件正事,就是昨天的问题,谁知道,还给解决了,
------------- ...

去掉重复我觉得你的方法可以考虑!但添加好像还是不怎么好搞!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马