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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 黄玉昆 黑马帝   /  2013-2-23 20:18  /  2603 人查看  /  8 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 黄玉昆 于 2013-2-24 13:23 编辑
  1. <font size="1" face="Arial">/*
  2. 去除ArrayList中重复的元素
  3. 分析:
  4.         建立一个新集合,对原集合取值,
  5.         每取一次,要判断一次,是否新集合中有这个元素
  6.         如果没有就添加到新集合中
  7. */
  8. import java.util.*;
  9. class RemoveArrayListTest
  10. {
  11.         public static void sop(Object obj)
  12.         {
  13.                 System.out.println(obj);
  14.         }
  15.         
  16.         public static void main(String[] args)
  17.         {
  18.                 ArrayList al = new ArrayList();
  19.                 al.add("java01");
  20.                 al.add("java02");
  21.                 al.add("java03");
  22.                 al.add("java01");
  23.                 al.add("java03");
  24.                 al.add("java02");
  25.                 al.add("java05");
  26.                 al.add("java04");
  27.                 sop("原集合:" + al);
  28.                 al = singleElement(al);
  29.                 sop("新集合:" + al);
  30.         }

  31.         public static ArrayList singleElement(ArrayList al)
  32.         {
  33.                 //定义一个临时容器
  34.                 ArrayList newAl = new ArrayList();
  35.                 Iterator it = al.listIterator();
  36.                 //判断是否有重复值,没有则加入新集合
  37.                 while (it.hasNext())
  38.                 {
  39.                         Object obj = it.next();
  40.                         if (!newAl.contains(obj))
  41.                                 newAl.add(obj);
  42.                 }
  43.                 return newAl;               
  44.         }
  45. }
  46. </font>
复制代码
这是毕老师视频中的一个练习,如何将singleElement()这个函数改写为非静态的方法,可被对象调用?求指教

评分

参与人数 1黑马币 +9 收起 理由
Rancho_Gump + 9

查看全部评分

8 个回复

倒序浏览
本帖最后由 李挺 于 2013-2-23 20:27 编辑
  1. package day28;

  2. import java.lang.reflect.Method;
  3. import java.util.*;
  4. class RemoveArrayListTest
  5. {
  6.         public static void sop(Object obj)
  7.         {
  8.                 System.out.println(obj);
  9.         }
  10.         
  11.         public static void main(String[] args) throws Exception, Exception
  12.         {
  13.                 ArrayList al = new ArrayList();
  14.                 al.add("java01");
  15.                 al.add("java02");
  16.                 al.add("java03");
  17.                 al.add("java01");
  18.                 al.add("java03");
  19.                 al.add("java02");
  20.                 al.add("java05");
  21.                 al.add("java04");
  22.                 sop("原集合:" + al);
  23.                 Method method=RemoveArrayListTest.class.getMethod("singleElement", ArrayList.class);
  24.                 al=(ArrayList)method.invoke(new RemoveArrayListTest(), al);
  25.                 //al = singleElement(al);
  26.                 sop("新集合:" + al);
  27.         }

  28.         public  ArrayList singleElement(ArrayList al)
  29.         {
  30.                 //定义一个临时容器
  31.                 ArrayList newAl = new ArrayList();
  32.                 Iterator it = al.listIterator();
  33.                 //判断是否有重复值,没有则加入新集合
  34.                 while (it.hasNext())
  35.                 {
  36.                         Object obj = it.next();
  37.                         if (!newAl.contains(obj))
  38.                                 newAl.add(obj);
  39.                 }
  40.                 return newAl;               
  41.         }
  42. }
复制代码
用反射啊亲!

评分

参与人数 1技术分 +1 收起 理由
Rancho_Gump + 1

查看全部评分

回复 使用道具 举报
李挺 发表于 2013-2-23 20:24
用反射啊亲!

亲,我还没学反射呢啊。我很纠结你的这个程序啊。不过很谢谢你 啊
回复 使用道具 举报
改几个字不就行了,首先把static关键字去掉,
然后把al = singleElement(al);改成al=new RemoveArrayListTest ().singleElement(al);
就成了。
回复 使用道具 举报
亲,静态方法也可以被对象掉用的啊,静态比非静态多了一个掉用方法,直接类名调用
回复 使用道具 举报
游灿平 发表于 2013-2-24 01:19
亲,静态方法也可以被对象掉用的啊,静态比非静态多了一个掉用方法,直接类名调用 ...

亲,本质上,静态方法是属于类的,随着类的加载而加载,类的对象调用就不是我这个题目的意思了。
回复 使用道具 举报
黄玉昆 黑马帝 2013-2-24 07:59:57
7#
王钊 发表于 2013-2-24 01:01
改几个字不就行了,首先把static关键字去掉,
然后把al = singleElement(al);改成al=new RemoveArrayListTe ...

谢谢,你说的这样可以了,只是我没太搞清楚,去掉static后,为什么我不能直接用al.singleElement(al),这个al不也是一个对象的引用吗?为什么还会提示已经创建了这个对象而编译失败呢?
回复 使用道具 举报
黄玉昆 发表于 2013-2-24 07:59
谢谢,你说的这样可以了,只是我没太搞清楚,去掉static后,为什么我不能直接用al.singleElement(al),这 ...

singleElement()是类RemoveArrayListTest的方法,  al不是类RemoveArrayListTest的对象, 你用别人家的对象调用类RemoveArrayListTest的方法肯定是行不通的啊, 不知道是不是这个问题.
回复 使用道具 举报
黄玉昆 黑马帝 2013-2-24 11:17:54
9#
侯丛政 发表于 2013-2-24 11:15
singleElement()是类RemoveArrayListTest的方法,  al不是类RemoveArrayListTest的对象, 你用别人家的对象 ...

言之有理,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马