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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 陈培果 高级黑马   /  2014-5-10 08:39  /  2295 人查看  /  15 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 陈培果 于 2014-5-10 16:04 编辑
  1. /*
  2. 去除ArrayList集合中的重复元素。
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 ArrayList al=new ArrayList();

  10.                 al.add("java01");
  11.                 al.add("java02");
  12.                 al.add("java01");
  13.                 al.add("java03");
  14.                 al.add("java01");
  15.                 al.add("java02");
  16.                 al.add("java04");
  17.                 al.add("java01");
  18.                 al.add("java02");

  19.                 sop(al);

  20.                 al=singleElement(al);

  21.                 sop(al);
  22.         }
  23.         public static ArrayList singleElement(ArrayList al)
  24.         {
  25.                 //定义一个临时容器
  26.                 ArrayList newAl=new ArrayList();

  27.                 Iterator it=al.iterator();

  28.                 while (it.hasNext())
  29.                 {
  30.                         Object obj=it.next();
  31. //在迭代时,循环中next调用一次,就要hasNext判断一次
  32.                         if (!newAl.contains(obj))
  33.                         newAl.add(obj);
  34.                 }
  35.                 return newAl;
  36.                
  37.         }
  38.         public static void sop(Object obj )
  39.         {
  40.                 System.out.println(obj);
  41.         }
  42. }
  43. /
  44. 请问各位师兄姐,这个程序的泛型该怎么加?
  45. 定义在哪好一点?
  46. /
复制代码


评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1

查看全部评分

15 个回复

倒序浏览
  1. /*
  2. 需求:对ArrayList集合去除重复元素。
  3. 分析:List集合对元素是否重复依靠的是equals方法。
  4.           只要保证复写了equals方法,建立自己的比较即可。

  5. */
  6. import java.util.*;
  7. public class  To_Move
  8. {
  9.         public static void main(String[] args)
  10.         {
  11.                 move();
  12.         }
  13.         public static void move()
  14.         {
  15.                 List<String> list = new ArrayList<String>();
  16.                 list.add("java01");
  17.                 list.add("java02");
  18.                 list.add("java03");
  19.                 list.add("java01");
  20.                 list = tomove(list);
  21.                 for(String str : list)
  22.                 {
  23.                         System.out.println(str);
  24.                 }
  25.         }
  26.         public static <T> List<T> tomove(List< T> list)
  27.         {
  28.                 List<T> lt = new ArrayList<T>();
  29.                 Iterator<T> it = list.iterator();
  30.                 while(it.hasNext())
  31.                 {
  32.                         T t = it.next();
  33.                         if(!(lt.contains(t)))
  34.                                 lt.add(t);
  35.                 }
  36.                 return lt;
  37.         }
  38. }
复制代码

不晓得这个行么?

评分

参与人数 1技术分 +1 收起 理由
张然龙 + 1 赞一个!

查看全部评分

回复 使用道具 举报 1 0


03.*/

04.import java.util.*;

05.class ArrayListTest

06.{

07.        public static void main(String[] args)

08.        {

09.                ArrayList<String> al=new ArrayList();

10.

11.                al.add("java01");

12.                al.add("java02");

13.                al.add("java01");

14.                al.add("java03");

15.                al.add("java01");

16.                al.add("java02");

17.                al.add("java04");

18.                al.add("java01");

19.                al.add("java02");

20.

21.                sop(al);

22.

23.                al=singleElement(al);

24.

25.                sop(al);

26.        }

27.        public static ArrayList singleElement(ArrayList al)

28.        {

29.                //定义一个临时容器

30.                ArrayList<String> newAl=new ArrayList();

31.

32.                Iterator<String> it=al.iterator();

33.

34.                while (it.hasNext())

35.                {

36.                        Object obj=it.next();

37.//在迭代时,循环中next调用一次,就要hasNext判断一次

38.                        if (!newAl.contains(obj))

39.                        newAl.add(obj);

40.                }

41.                return newAl;

42.               

43.        }

44.        public static void sop(Object obj )

45.        {

46.                System.out.println(obj);

47.        }

48.}
注意:
看API,如果类或者接口后面有<>,说明这里用泛型。
                一般来说,集合中用。

回复 使用道具 举报
二楼正解。
回复 使用道具 举报
wangzhiyong515 发表于 2014-5-10 10:02
03.*/

04.import java.util.*;

这我知道,但是我想要修改我这个程序,不知道修改哪才正确
回复 使用道具 举报
skill20 发表于 2014-5-10 09:45
不晓得这个行么?

恩,谢谢这个可以,不过下面一句代码 可以帮我解释一下吗?:D
for(String str : list)
                {
                        System.out.println(str);
                }
回复 使用道具 举报
陈培果 发表于 2014-5-10 12:34
恩,谢谢这个可以,不过下面一句代码 可以帮我解释一下吗?
for(String str : list)
                 ...

这个是增强for循环。
格式是这个样子:
  1. //增强for循环是为了简化代码,替代迭代器。若要对元素进行除获取以外的
  2. // 操作,要使用传统方式。
  3. for(元素类型  变量名 : 要迭代的数组或实现了Iterable接口的集合)
  4. {
  5.         获取元素的代码。//只能获取元素。不能赋值或改变值。
  6. }
复制代码
回复 使用道具 举报
skill20 发表于 2014-5-10 12:59
这个是增强for循环。
格式是这个样子:

哦,谢谢,不过这个貌似还没看到那,
可以帮我在我的程序上直接加上泛型吗?
回复 使用道具 举报
陈培果 发表于 2014-5-10 13:43
哦,谢谢,不过这个貌似还没看到那,
可以帮我在我的程序上直接加上泛型吗?
...

还要咋加?
回复 使用道具 举报

在我程序上加上泛型,消除安全隐患
回复 使用道具 举报
陈培果 发表于 2014-5-10 15:43
在我程序上加上泛型,消除安全隐患

看2L;....
回复 使用道具 举报 1 0

恩,现在解决了,谢谢。我还是不够细心啊
回复 使用道具 举报
陈培果 发表于 2014-5-10 16:01
恩,现在解决了,谢谢。我还是不够细心啊
  1. /*
  2. 去除ArrayList集合中的重复元素。
  3. */
  4. import java.util.*;
  5. class ArrayListTest
  6. {
  7.         public static void main(String[] args)
  8.         {
  9.                 ArrayList<String> al=new ArrayList<String>();

  10.                 al.add("java01");
  11.                 al.add("java02");
  12.                 al.add("java01");
  13.                 al.add("java03");
  14.                 al.add("java01");
  15.                 al.add("java02");
  16.                 al.add("java04");
  17.                 al.add("java01");
  18.                 al.add("java02");

  19.                 sop(al);

  20.                 al=singleElement(al);

  21.                 sop(al);
  22.         }
  23.         public static <T> ArrayList<T> singleElement(ArrayList<T> al)
  24.         {
  25.                 //定义一个临时容器
  26.                 ArrayList<T> newAl=new ArrayList<T>();

  27.                 Iterator<T> it=al.iterator();

  28.                 while (it.hasNext())
  29.                 {
  30.                         T str=it.next();
  31. //在迭代时,循环中next调用一次,就要hasNext判断一次
  32.                         if (!newAl.contains(str))
  33.                                 newAl.add(str);
  34.                 }
  35.                 return newAl;
  36.                
  37.         }
  38.         public static void sop(Object obj )
  39.         {
  40.                 System.out.println(obj);
  41.         }
  42. }
复制代码
回复 使用道具 举报
陈培果 发表于 2014-5-10 15:43
在我程序上加上泛型,消除安全隐患

public static <T> List<T> tomove(List< T> list)

前面两个T的作用是什么?

删掉前面一个T ,编译错误
删掉第二个T ,出现安全隐患

老师视频也没说过加第二个的T
回复 使用道具 举报
Kael 初级黑马 2014-5-10 17:43:15
15#
这是泛型方法的定义:修饰符<T> 返回值 方法名(形参){}
第一个T代表定义泛型,第二个代表返回的是List<T>类型,当形参你传入的是什么具体的类型,T就是什么类型,就返回什么样的具体类型,例如:List<String>.此时T就是String。
回复 使用道具 举报
二楼正解。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马