集合框架
/* 集合类 存储对象 数组是固定长度,集合石可变长度。 数组必须相同类型,集合只要是对象就可以。 集合框架 每一个容器对数据的存储结构不同(数据结构) Collection List ArrayList LinkedList Vector Set HashSet TreeSet */ import java.util.*; class demo { public static void main(String[] args) { ArrayList al = new ArrayList(); //集合中存储的都是对象的引用(地址) //增 al.add("01");//字符串是对象 add(object obj) 可接受任意类型对象。 al.add("02"); al.add("03"); al.add("04"); //查 al.size(); //集合长度 al.contains("04"); //是否存在04 al.isEmpty();//是否为空 System.out.println(al); //打印 //删 al.remove("03"); al.clear(); //清空 al.retainAll(al2); //取交集,al会保存与al2的交集。 } }
/* List 元素是有序的,元素可以重复,该集合体系有索引。 凡是可以操作角标的方法都是该体系特有的方法。 增 add(index,element); addAll(index,Collection); 删 remove(index); 改 set(index,element); 查 get(index); subList(from,to); listIterator(); Set 元素是无序的,元素不可以重复,该集合体系没有索引。 */ class demo { public static void main(String[] args) { ArrayList al = new ArrayList(); //增 al.add("01"); al.add("02"); al.add("03"); //指定位置 增加 al.add(1,"java"); //指定位置 删除 al.remove(2); //修改元素 al.set(2,"ccc"); //获取元素 al.get(1); //获取所有元素 遍历 for (int x=0;x<al.size() ;x++ ) { System.out.println(al.get(x)); } Iterator it = al.iterator(); while(it.hasNext()) //有元素就返回 true { it.next(); } //集合 动作不同,但是 判断和取出是一样的。 // Iterator 取出内部类对象 //通过indexof获取对象的位置。 al.indexof("03"); List sub = al.subList(1,3); //1~3,不包含3
错误示例:
//在迭代过程中,准备添加或者删除元素 Iterator it = al.iterator(); while(it.hasNext()) //有元素就返回 true { object obj = it.next(); if(obj.equals("02")) //错误 并发同时访问 有安全隐患 { al.add() } }
常用代码:
/* List集合特有的迭代器,ListIterator是Iterator的子接口。 在迭代时,不可以通过集合的对象操作集合中的元素,因为会发生异常。 Iterator 只能对 元素 进行 判断 取出 删除。 ListIterator功能更多。 */ ListIterator li = al.ListIterator(); while(li.hasNext()) { object obj = li.next(); if(obj.equals("02")) { li.add("09");//在02后面添加09 li.set("100");//把02修改成100 } }
ArrayList 底层的数据结构使用的是数组结构。查询速度快,但是增删稍慢。
线程不同步 可变长度数组
LinkedList 链表数据结构 查询速度慢,但是增删快。
Vector 底层是数组数据结构 线程同步。增删查都慢。(被ArrayList取代)
/* LinkedList 特有方法: addFirst 在前面插入 addLast 在后面插入 getFirst(); 获取最前面的 getLast(); 获取最后面的 如果集合中没有元素,会出现nosuchElementExcption size(); 获取元素个数 removeFirst 移除第一个元素,并输出被删的元素 removeLast 移除最后一个元素,并输出被删的元素 如果集合中没有元素,会出现nosuchElementExcption ------------------------------------------------------------------------------ 在JDK1.6出现了替代方法,如果集合中没有元素,会出现null offerFirst() offerLast(); peekFirst(); peekLast(); pollFirst(); pollFirst(); */ import java.util.*; class LinkedListDemo { public static void main(String[] args) { LinkedList link = new LinkedList(); link.add("苹果"); link.add("梨子"); link.add("桃子"); while(!link.isEmpty()) { link.removeFirst(); } } }
Person p = (Person)it.next(); //obj p.getName() p.getAge()