一.总体分类
- Collection(包括方法add,remove,contains,clear,size)
- List(接口)
LinkedList
ArrayList
Vector---Stack
2. Set
HashSet
TreeSet
- Map
- Hashtable---properties
- HashMap
- TreeMap
二.集合------List(有序,可重复)
1.ArrayList
这里有个包装类的概念:每一个基本类型都有一个对应的数据类型的包装类
特点就是包装类和String类一样,有一块缓冲区, -128~127的常量池,用着更灵活自由。
在此特殊记忆:char-----Character,int--------Integer其余基本类型包装类都同它本身的名字
*装箱:基本类型转化为包装类
*拆箱:包装类转化为基本类型
装箱和拆箱的内部实现机制:自动调用valueOf()方法
public static Integer valueOf(int i){ if(i>=IntegerCache.low&&i<=IntegerCache.high){ return IntegerCache.cache[i+(-IntegerCache.low)]; } return new Integer(i); }
缓冲区对于double和float类型是没有用的,因为0-1之间的数有无数个啊,无法都放在常量池。
ArrayList al=new ArrayList(); al.add("ffsjkafsd"); al.remove(15);//错误 al.remove(new Integer(15));//新建,对比对象,相等删除,包装类 al.get(3); al.toArray(); al.isEmpty(); al.set(1,"fsa"); al.indexOf("sss");//如果没有返回-1; al.contains(null);// 返回布尔
遍历方式有三种,普通方法在此不赘余。
for(Object o:al){ syso(o); }
Interator i=al.interator(); while(i.hasNext){ syso(i.next()); }
2.LinkedList
底层是双向链表,而ArrayList的底层是数组。
链表:增删快,查找修改慢
数组:便于查询修改,不便增删
LinkedList相对于数组增加了头和尾巴的操作。
LinkedList l=new LinkedList() l.addFirst() l.addLast() l.getFirst() l.getLast()
3.Vector
和ArrayList相同,底层也是数组,不过V是线程安全的。
Vector v=new Vector();
栈,线程安全
Stack s=new Stack(); s.push("sss");//入栈 Object o=s.pop();//删除栈顶并返回obj syso(o); s.peek();//查看栈顶 s.size(); s.elementAt();//遍历方法1 s.empty; s.search(null);//1 2 3