黑马程序员技术交流社区
标题:
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
帮你把代码改了下,可以了
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)));//删除元素
System.out.println(arr1.remove(0));//根据索引删除
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;
}
}
复制代码
作者:
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方法。下面附上毕老师原码,希望可以帮到你!
class Person
{
private String name;
private int age;
Person(String name,int age)
{
this.name = name;
this.age = age;
}
public boolean equals(Object obj)
{
if(!(obj instanceof Person))
return false;
Person p = (Person)obj;
//System.out.println(this.name+"....."+p.name);
return this.name.equals(p.name) && this.age == p.age;
}
/**/
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
}
class ArrayListTest2
{
public static void sop(Object obj)
{
System.out.println(obj);
}
public static void main(String[] args)
{
ArrayList al = new ArrayList();
al.add(new Demo());
al.add(new Person("lisi01",30));//al.add(Object obj);//Object obj = new Person("lisi01",30);
//al.add(new Person("lisi02",32));
al.add(new Person("lisi02",32));
al.add(new Person("lisi04",35));
al.add(new Person("lisi03",33));
//al.add(new Person("lisi04",35));
//al = singleElement(al);
sop("remove 03 :"+al.remove(new Person("lisi03",33)));//remove方法底层也是依赖于元素的equals方法。
Iterator it = al.iterator();
while(it.hasNext())
{
Person p = (Person)it.next();
sop(p.getName()+"::"+p.getAge());
}
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2