集合(List)学习笔记
(一)集合只用于存储对象,其长度可变,可存储不同类型的对象。
(二)体系:
(三)集合存储的也是对象的引用(地址值)。
(四)Iterator:其实就是集合取出元素的方式。虽然每个容器都有自己独特的存储方式,但取出元素的方式都有共性的取出方式(即判断和取出的动作),所以将共性的东西抽取出来。即有了共同的接口Iterator。
package cn.cx.collection.study;
import java.util.ArrayList;
import java.util.*;
publicclass Demo01 {
publicstaticvoid main(String[] args) {
ArrayList<Object> l = new ArrayList<Object>();
l.add(new Person(1,"zhangsan"));
l.add(new Person(2,"lisi"));
l.add(new Person(3,"wanwu"));
l.add(new Person(4,"zhaoliu"));
Iterator it = l.iterator();
while(it.hasNext()) {
Object o = it.next();
System.out.println(o);
}
}
}
(五)List是有序的,元素可以重复,因为该集合体系有索引。而Set是无序的,元素不可重复。ListIterator是List的特有迭代器,使用它不会发生ConcurrentModificationException异常。
package cn.cx.collection.study;
import java.util.*;
publicclass Demo01 {
publicstaticvoid main(String[] args) {
ArrayList<Person> l = new ArrayList<Person>();
l.add(new Person(1,"zhangsan"));
l.add(new Person(2,"lisi"));
l.add(new Person(3,"wanwu"));
l.add(new Person(4,"zhaoliu"));
//Iterator it = l.iterator();
/*while(it.hasNext()) {
Person p = (Person)it.next();
if(p.name.equals("lisi")) {
l.add(new Person(5,"wusong"));
}
System.out.println(p);
}*/
//System.out.println(l.get(3));
System.out.println(l);
ListIterator<Person> li = l.listIterator();
while(li.hasNext()) {
Person p = (Person)li.next();
if(p.name.equals("lisi")) {
li.add(new Person(5,"wusong"));
}
}
System.out.println(l);
}
(六)ArrayList底层使用数组数据结构存储对象,故查询速度快但增删稍慢,线程不同步;LinkedList是链表数据结构,故查询慢,增删快;Vector底层也是数组数据结构,但线程同步,被ArrayList替代了,枚举是其特有的取元素方式。
(七)LinkedList
package cn.cx.collection.study;
import java.util.*;
publicclass LinkedListDemo {
publicstaticvoid main(String[] args) {
LinkedList<String> ll = new LinkedList<String>();
ll.addFirst("java01");
ll.addFirst("java02");
ll.addFirst("java03");
ll.addFirst("java04");
System.out.println(ll);
System.out.println(ll.getFirst());
System.out.println(ll.removeFirst());//删除并返回删除的元素
System.out.println(ll);
}
(八)筛选相同元素:
package cn.cx.collection.study;
import java.util.*;
publicclass ArrayListTest {
publicstaticvoid main(String[] args) {
ArrayList<Object> list = new ArrayList<Object>();
list.add("java01");
list.add("java02");
list.add("java03");
list.add("java01");
list.add("java02");
list.add("java05");
list.add("java04");
list.add("java05");
System.out.println(list);
list = filter(list);
System.out.println(list);
}
publicstatic ArrayList<Object> filter(ArrayList<Object> list) {
ArrayList<Object> al = new ArrayList<Object>();
Iterator i = list.iterator();
while(i.hasNext()) {
Object o = i.next();
if(!al.contains(o)) { //底层调用元素的equals方法
al.add(o);
}
}
return al;
}
(九)List集合判断元素是否相同调用的是元素的equals方法。