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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© qw无语 中级黑马   /  2013-11-20 21:30  /  1645 人查看  /  6 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 qw无语 于 2013-11-20 22:47 编辑

import java.util.ArrayList;
import java.util.Iterator;
public class Test {
public static void main(String[] args) {
  // 建立一个ArrayList容器
  ArrayList arr1 = new ArrayList();
  // 增加元素
  arr1.add(new Work("a", 1));
  arr1.add(new Work("b", 2));
  arr1.add(new Work("c", 3));
  arr1.add(new Work("a", 1));
  System.out.println(arr1.remove(new Work("a", 1)));//删除元素  
  Iterator it1 = arr1.iterator();
  // 遍历打出
  while (it1.hasNext()) {
   Work wk = (Work) it1.next();
   System.out.println("名字是" + wk.getName() + "年龄" + wk.getAge());
  }
}
}
class Work {
private String name;
private int age;
Work(String name, int age) {
  this.name = name;
  this.age = age;
}
public String getName() {
  return name;
}
public int getAge() {
  return age;
}
}

运行结果,new Work("a", 1)没有被删掉,这是为什么啊?
谢谢。


6 个回复

倒序浏览
你想移除元素   可以这样写:   arr1.remove(arr1.get(0));//可以移除    如果打印的话System.out.println(arr1.remove(arr1.get(0)));//删除元素   为真;   
remove() 方法  用法:
  1, 移除具体元素
  2, 移除元素的所在的位置,即角标位
你移除是一个对象  所以打印false
回复 使用道具 举报
帮你把代码改了下,可以了
  1. import java.util.ArrayList;
  2. import java.util.Iterator;
  3. public class Test {
  4. public static void main(String[] args) {
  5.   // 建立一个ArrayList容器,使用泛型
  6.   ArrayList arr1 = new ArrayList();
  7.   // 增加元素
  8.   arr1.add(new Work("a", 1));
  9.   arr1.add(new Work("b", 2));
  10.   arr1.add(new Work("c", 3));
  11.   arr1.add(new Work("a", 1));
  12.   //System.out.println(arr1.remove(new Work("a", 1)));//删除元素  
  13.         System.out.println(arr1.remove(0));//根据索引删除
  14.   Iterator it1 = arr1.iterator();
  15.   // 遍历打出
  16.   while (it1.hasNext()) {
  17.    Work wk = (Work) it1.next();
  18.    System.out.println("名字是" + wk.getName() + "年龄" + wk.getAge());
  19.   }
  20. }
  21. }
  22. class Work {
  23. private String name;
  24. private int age;
  25. Work(String name, int age) {
  26.   this.name = name;
  27.   this.age = age;
  28. }
  29. public String getName() {
  30.   return name;
  31. }
  32. public int getAge() {
  33.   return age;
  34. }
  35. }
复制代码
回复 使用道具 举报
第一 ,你没有用泛型    泛型的用法应该是 ArrayList<Work> arr1 = new ArrayList<Wo rk>();
第二,你每次添加的时候都是arr1.add(new Work("a", 1));    这样子每次都是重新new的一个新的Work类
所以最后 System.out.println(arr1.remove(new Work("a", 1)));//删除元素   失败,因为这也是重新new的Work类      对象不是同一个所以返回false     而remove(Object obj )这个方法是需要对象相同时才能返回 true
public class Test {
        public static void main(String[] args) {
                // 建立一个ArrayList容器,使用泛型
                  ArrayList<Work> arr1 = new ArrayList<Work>();
                  
                  // 增加元素
                 Work  w1= new Work("a", 1);
                 Work  w2= new Work("b", 2);
                 Work  w3= new Work("c", 3);
                 Work  w4= new Work("a", 1);
                 arr1.add(w1);
                 arr1.add(w2);
                 arr1.add(w3);
                 arr1.add(w4);
//                  arr1.add(new Work("a", 1));
//                  arr1.add(new Work("b", 2));
//                  arr1.add(new Work("c", 3));
//                  arr1.add(new Work("a", 1));
                  System.out.println(arr1.remove(w1));//删除元素  
                  Iterator it1 = arr1.iterator();
                  // 遍历打出
                  while (it1.hasNext()) {
                   Work wk = (Work) it1.next();
                   System.out.println("名字是" + wk.getName() + "年龄" + wk.getAge());
                  }
                }
                }
                class Work {
                private String name;
                private int age;
                Work(String name, int age) {
                  this.name = name;
                  this.age = age;
                }
                public String getName() {
                  return name;
                }
                public int getAge() {
                  return age;
               
        }
}
这样就可以了
回复 使用道具 举报
  List是有序集合,可以通过角标删除元素,成功删除返回true。你写的List并没有泛型
回复 使用道具 举报
谢谢大家了,解决了,怎么修改分类?
回复 使用道具 举报
楼主啊,我知道你想模仿毕老师的原码,可是你漏写了 work类的equals方法,remove方法底层页依赖于equals方法。下面附上毕老师原码,希望可以帮到你!
  1. class Person
  2. {
  3.         private String name;
  4.         private int age;
  5.         Person(String name,int age)
  6.         {
  7.                 this.name = name;
  8.                 this.age = age;
  9.         }
  10.        
  11.         public boolean equals(Object obj)
  12.         {

  13.                 if(!(obj instanceof Person))
  14.                         return false;

  15.                 Person p = (Person)obj;
  16.                 //System.out.println(this.name+"....."+p.name);

  17.                 return this.name.equals(p.name) && this.age == p.age;
  18.         }
  19.         /**/
  20.         public String getName()
  21.         {
  22.                 return name;
  23.         }
  24.         public int getAge()
  25.         {
  26.                 return age;
  27.         }
  28. }
  29. class ArrayListTest2
  30. {
  31.         public static void sop(Object obj)
  32.         {
  33.                 System.out.println(obj);
  34.         }
  35.         public static void main(String[] args)
  36.         {
  37.                 ArrayList al = new ArrayList();

  38.                 al.add(new Demo());

  39.                 al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30);
  40.                 //al.add(new Person("lisi02",32));
  41.                 al.add(new Person("lisi02",32));
  42.                 al.add(new Person("lisi04",35));
  43.                 al.add(new Person("lisi03",33));
  44.                 //al.add(new Person("lisi04",35));

  45.                
  46.                 //al = singleElement(al);

  47.                 sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。


  48.                 Iterator it = al.iterator();


  49.                 while(it.hasNext())
  50.                 {
  51.                         Person p = (Person)it.next();
  52.                         sop(p.getName()+"::"+p.getAge());
  53.                 }
  54.         }
复制代码
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马