凌风博客原创作品。转载请注明出处:http://blog.youkuaiyun.com/q549130180/article/details/45313433
Collection
|--List:元素是有序的,元素可以重复,因为该集合体系有索引|--ArrayList:底层的数据结构使用的是数组结构吗。特点:查询速度很快,但是增删稍慢。线程不同步
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。
|--Set:元素是无序,元素不可以重复
List:
特有方法,凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
add(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
List集合特有的迭代器,ListIterator是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合中的元素
因为会发生ConcurrentModificationException异常
所以,在迭代器时,只能用迭代器的放过操作元素,可是Iterator方法时有限的,
只能对元素进行判断,取出,删除的操作
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator
该接口只能通过List集合的listIterator方法获取
- import java.util.*;
- class ListDemo2
- {
- public static void main(String[] args)
- {
- //演示列表迭代器
- ArrayList al = new ArrayList();
- al.add("java01");
- al.add("java02");
- al.add("java03");
- sop(al);
- ListIterator li = al.listIterator();
- //sop("hasPrevious():"+li.hasPrevious());
- Iterator it = al.iterator();
- while (it.hasNext())
- {
- Object obj = li.next();
- if (obj.equals("java02"))
- {
- //li.add("java0009");
- li.set("java006");
- }
- }
- while (li.hasPrevious())
- {
- sop("pre:"+li.previous());
- }
- //sop("hasNext():"+li.hasNext());
- //sop("hasPrevious():"+li.hasPrevious());
- sop(sl);
- /*
- //在迭代过程中,准备添加或者删除元素
- Iterator it = al.iterator();
- while (it.hasNext())
- {
- Object obj = it.next();
- if (obj.equals("java02"))
- {
- al.add("java008");
- //it.remove();//将java02的引用从集合中删除了
- }
- sop("obj"+obj);
- }
- */
- }
- public static void method()
- {
- ArrayList al = new ArrayList();
- al.add("java01");
- al.add("java02");
- al.add("java03");
- sop("原集合是:"+al);
- //在指定位置添加元素
- al.add(1,"java09");
- //删除指定位置的元素。
- //al.remove(2);
- //修改元素
- //al.set(2,"java007");
- //通过角标获取元素。
- sop("get(1)"+al.get(1));
- sop(al);
- //获取所有元素
- for (int x = 0;x< al.size() ;x++ )
- {
- System.out.println("al("+x+")="+al.get(x));
- }
- Iterator it = al.iterator();
- while (it.hasNext())
- {
- sop("next:"+it.next());
- }
- //通过indexOf获取对象的位置
- sop("index="+al.indexOf("java02"));
- //获取子列表,1到3
- List sub = al.subList(1,3);
- sop("sub="+sub);
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
枚举就是Vector特有的取出方式
发现枚举和迭代器很像
其实枚举和迭代时一样的
因为枚举的名称以及方法的名称都过长
所以被迭代器取代了
枚举郁郁而终
- class VectorDemo
- {
- public static void main(String[] args)
- {
- Vector v = new Vector();
- v.add("java01");
- v.add("java02");
- v.add("java03");
- v.add("java04");
- Enumeration en =v.elements();
- while (en.hsaMoreElements())
- {
- System.out.println(en.nextElement());
- }
- }
- }
LinkedList特有方法:
addFirst();
addLast();
getFirst();
getLast();
获取元素,但不删除元素,如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除,如果集合中没有元素,会出现NoSuchElementException
在JDK1.6 出现了替代方法
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但不删除元素,如果集合中没有元素,会返回null
pollFirst();
pollLast();
获取元素,但是元素被删除,如果集合中没有元素,会返回null
- class LinkedListDemo3
- {
- public static void main(String[] args)
- {
- LinkedList link = new LinkedList();
- link.addLast("java01");
- link.addLast("java02");
- link.addLast("java03");
- link.addLast("java04");
- sop(link);
- //sop(link.getFirst());
- //sop(link.getLast);
- //sop(link.removeFirst());
- sop("size="+link.size());
- //不使用迭代器遍历输出
- while (!link.isEmpty())
- {
- sop(link.removeLast());
- }
- }
- public static void sop(Object obj)
- {
- System.out.println(obj);
- }
- }
ArrayList练习
将自定义对象作为元素存到ArrayList集合中,并去除重复元素
比如:存人对象。同姓名同年龄,视为同一个人,为重复元素
思路:
1.对人描述,将数据封装进人对象。
2.定义容器,将人存入
3.取出
- class Person
- {
- Person(String name,int age)
- {
- this.name = name;
- this.age = age;
- }
- public boolean equals(Object obj)
- {
- if (!(obj instanceof Person))
- {
- return false;
- }
- 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 ArrayListTest4
- {
- 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",30)); //al.add(Object obj); //Object obj = new Person("lishi01",30); 赋给obj后,对象类型提升为Object
- al.add(new Person("lisi02",31));
- al.add(new Person("lisi02",31));
- al.add(new Person("lisi03",32));
- al.add(new Person("lisi04",34));
- al.add(new Person("lisi04",34));
- //al = singleElement(al);
- sop("remove 03:"+al.remove(new Person("lisi03",32)));
- Iterator it = al.iterator();
- while (it.hasNext())
- {
- Person p = (Person)it.next();
- 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))
- {
- newAl.add(obj);
- }
- }
- return newAl;
- }
- }