黑马程序员技术交流社区

标题: ArrayList数组remove怎么用啊? [打印本页]

作者: qw无语    时间: 2013-11-20 21:30
标题: ArrayList数组remove怎么用啊?
本帖最后由 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)没有被删掉,这是为什么啊?
谢谢。



作者: 不抛弃不放弃    时间: 2013-11-20 21:58
你想移除元素   可以这样写:   arr1.remove(arr1.get(0));//可以移除    如果打印的话System.out.println(arr1.remove(arr1.get(0)));//删除元素   为真;   
remove() 方法  用法:
  1, 移除具体元素
  2, 移除元素的所在的位置,即角标位
你移除是一个对象  所以打印false
作者: hurryup    时间: 2013-11-20 21:58
帮你把代码改了下,可以了
  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. }
复制代码

作者: qq316525598    时间: 2013-11-20 22:25
第一 ,你没有用泛型    泛型的用法应该是 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;
               
        }
}
这样就可以了
作者: 橴蝶飛雨    时间: 2013-11-20 22:31
  List是有序集合,可以通过角标删除元素,成功删除返回true。你写的List并没有泛型
作者: qw无语    时间: 2013-11-20 22:43
谢谢大家了,解决了,怎么修改分类?
作者: 明月几时有    时间: 2013-11-20 23:04
楼主啊,我知道你想模仿毕老师的原码,可是你漏写了 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.         }
复制代码





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