各集合中关系如图所示:
ArrayList演示: 将自定义的对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象,同姓名同年龄,视为同一人
底层使用数组结构
取得元素较多,增删操作比较频繁时使用LinkedList。 ArrayList是使用最频繁的集合。
import java.util.*;
class Person
{
private String name;
private int age;
Person(String name, int age)
{
this.name=name;
this.age =age;
}
public boolean equals(Object obj)//Person 中的equals方法比较地址
{
if(!(obj instanceof Person)) //instanceof判断两个对象类型是否一致
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 Person("Lisi01",23));
al.add(new Person("Lisi02",24));
al.add(new Person("Lisi03",25));
al.add(new Person("Lisi04",26));
al.add(new Person("Lisi03",25));
al = singleElement(al);
Iterator it = al.iterator();
while(it.hasNext())
{
Person p =(Person)it.next(); // 向下转型为 Person类型 ,因为it.next()为Iterator方法
sop(p.getName()+"::"+p.getAge());
}
}
//去除原容器中重复的元素
public static ArrayList singleElement(ArrayList al)
{
//建立临时容器
ArrayList newAl = new ArrayList();
Iterator it =al.iterator();
while(it.hasNext())
{
Object obj = it.next();
if(!newAl.contains(obj)) //使用contains()方法自动调用了Person中的equals方法
newAl.add(obj);
}
return newAl;
}
}
List集合特有的迭代器,ListIterator时Iterrator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素
因为会发生ConcurrentModifiCationException异常
Iterator方法是有限的,,只能对元素进行增删,判断
如果想要修改的话就需要使用它的子接口,ListIorator
该接口只能通过ListItorator方法获取。
import java.util.* ;
public class ArarryListDemo
{
public static void sop(Object obj)
{
System.out.println(obj);
}
/* public static void method()
{
//在指定位置添加元素
al.add(1, "java08");
sop("添加后的集合是:"+al);
//删除指定位置的元素
al.remove(2);
sop("删除后的集合是:"+al);
//修改元素
al.set(1,"java007");
sop("修改后的集合是:"+al);
//通过角标获取元素
System.out.println("角标1的元素是:"+al.get(1));
}
*/
public static void main(String[] args)
{
//演示列表迭代器
ArrayList al = new ArrayList();
//在集合中添加元素
al.add("java01");
al.add("java02");
al.add("java03");
sop("原集合是:"+al);
ListIterator it = al.listIterator(); /*ArrayList继承了AbstractList类,所以自然继承了iterator方法,而LinkedList则不然*/
while(it.hasNext())
{
Object obj = li.next();
if (obj.equals("java03"))
{
li.set("java11")
}
}
}
}