集合

来源:互联网 发布:淘宝怎么解决管控纪录 编辑:程序博客网 时间:2024/05/01 09:21

 集合是存储对象的容器 大小无限 类型无限 能够让我们更好的管理对象 有可能出现堆内存溢出  通过用泛型限定为某一类型 更安全更方便 

最上层有2种接口 Collection和map接口 Set和List接口继承Collection接

List实现迭代和List迭代 可以通过Collections工具进行排序 要元素实现Comparable或指定Comparator比较器 

ArrayList底层数组 有序 可重复 增删慢  改查块   数组越大速度越慢    已实现迭代 线程不安全 可以添加null

自己写的ArrayList

// Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov  Date: 2011-7-7 下午 04:10:51// Home Page : http://members.fortunecity.com/neshkov/dj.html  - Check often for new version!// Decompiler options: packimports(3) // Source File Name:   MySet.javapackage cn.nailsoul.banksystem.util;import java.io.PrintStream;import java.util.ConcurrentModificationException;import java.util.Iterator;public class MySet implements Iterable{int modCount=0;    public MySet(){        objs = new Object[0];    }    public boolean contains(Object obj){        boolean flag = false;        Object aobj[] = objs;        int i = aobj.length;        int j = 0;        do {            if(j >= i)                break;            Object obj1 = aobj[j];            if(obj1.equals(obj)){                flag = true;                break;            }            j++;        } while(true);        return flag;    }    public int contains(Object obj, int i){        i = -1;        int j = 0;        do {            if(j >= objs.length)                break;            if(objs[j].equals(obj)){                i = j;                break;            }            j++;        } while(true);        return i;    }    public boolean add(Object obj){        boolean flag = false;        Object aobj[] = new Object[objs.length + 1];        System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, objs.length);        aobj[objs.length] = obj;        objs = aobj;        flag = true;        modCount++;        return flag;    }    public Object[] getAll(){        return objs;    }    public boolean delete(Object obj){        boolean flag = false;        int i = contains(obj, 1);        if(i >= 0){            Object aobj[] = new Object[objs.length - 1];            System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, i);            System.arraycopy(((Object) (objs)), i + 1, ((Object) (aobj)), i, aobj.length - i);            objs = aobj;            modCount++;            flag = true;        }        return flag;    }    public boolean delete(int i){        boolean flag = false;        if(i >= 0){            Object aobj[] = new Object[objs.length - 1];            System.arraycopy(((Object) (objs)), 0, ((Object) (aobj)), 0, i);            System.arraycopy(((Object) (objs)), i + 1, ((Object) (aobj)), i, aobj.length - i);            objs = aobj;            modCount++;            flag = true;        }        return flag;    }    public boolean update(Object obj){        boolean flag = false;        int i = contains(obj, 1);        System.out.println(0x1b207);        System.out.println(i);        System.out.println(obj);        if(i >= 0){            System.out.println(222);            objs[i] = obj;            modCount++;            flag = true;        }        return flag;    }    public boolean update(Object obj, int i){        boolean flag = false;        if(i >= 0) {            objs[i] = obj;            modCount++;            flag = true;        }        return flag;    }    public int getLen() {        return objs.length;    }    private Object objs[];public Object[] getObjs() {return objs;}@Overridepublic Iterator iterator() {// TODO Auto-generated method stubreturn new Ite();}class Ite implements Iterator{int expectedModCount=modCount;int pos=-1,count=MySet.this.getLen();Object[] objs=MySet.this.getObjs();@Overridepublic boolean hasNext() {return pos+1>=count?false:true;}@Overridepublic Object next() {check();return objs[++pos];}@Overridepublic void remove() {check();if(MySet.this.delete(++pos)){modCount++;}}public void check(){ if (modCount != expectedModCount){throw new ConcurrentModificationException();}}}}


LinkedList  底层链表+数组实现  增删块 改查慢 数组越大速度越慢    已实现迭代 可用于压弹栈 和队列数据结构 线程不安全

vector 底层数组  被ArrayList 替代  线程安全  SequenceInputStream要用到它 当然也可以不用

Set  无序 不可重复  底层是调用的Map+自己实现迭代

HashSet  底层Hash表 线程不安全 元素的操作通过hashCode方法、==和equals方法完成  先通过hashCode方法去除Hash值  如果Hash值相等 相等Hash值的元素用==比较如果为false用equals比较 可以添加null

set方法调用的是map的put方法  set的参数作为put的key创建一个对象作为value

TreeSet 底层 二叉树实现  元素操作通过compareTo方法  如果元素没实现该方法 则只能添加一个元素否则报异常  线程不安全

 

Map接口键值对 HashMap和TreeMap实现Map接口  要迭代map先要将map中取出set在迭代set

HashSet,HashMap和TreeSet,TreeMap的区别在于TreeSet,TreeMap在完成该功能的同时还进行排序   排序是通过容器里的对象的类实现Comparable接口 覆盖compareTo方法实现的

List接口没有实现排序功能的实现类  可以通过创建个自己的比较器实现Comparator接口 通过Collections.sort(对象,比较器)来进行排序  对象必须是List类型的.

对于Collection ,Set,Map类型的要查看该集合里的对象通常需要用到Iterator接口 如

public class CollectionDemo{

        public void collectionDemo(){

                Collection col=new HashSet();

               col.add("1");

               col.add("2");

               col.add("3");

              Iterator it=col.iterator();

              while(it.hasNext()){

              String s=it.next().toString;  //it.next()返回的是Object类型的对象

              System.out.println(s);

             }

        }

}