`

Map 和 List 的性能比较

    博客分类:
  • Java
阅读更多

1.Collection接口与Map的总体框架图

Collection  
├List  
│├LinkedList  
│├ArrayList  
│└Vector  
│ └Stack  
└Set  
Map  
├Hashtable  
├HashMap  
└WeakHashMap  

由上图可以看出:List和Set都源自Collection,而Map自成体系;

2.HashMap,ArrayList与HashTable,Vector的区别联系

    HashMap,ArrayList是异步执行的这样有助于提高工作效率,但并不是线程安全的.并且HashMap允许键值对的值为null;

    HashTable和Vector是同步执行的,但是线程安全,这样的效率不如HashMap和ArrayList

3.List集合性能比较:

    ArrayList是首选,在多用于查询使用时,ArrayList的效率更高;但在频繁进行删除,插入操作的时候应该用LinkedList,比如在进行堆栈和队列的操作时,就应该用LinkedList执行,此时的执行效率比JAVA自带的stack要高

4.Map集合性能比较:

    HashMap是首选,但是在整个Map类会需要更多的内存空间,以为有键值对的存在.HashMap用到了哈希函数,所以其key必须是唯一的,TreeMap是用红黑树进行实现的;Map还可用containKey()检查是否含量有某个key/value键值对

   

5.List集合的输出

    在Java里不建议循环执行Object obj =(Object)list.get(i); 这样的效率非常低

    建议使用Iterator迭代器的形式

                       Iterator ite = list.iterator();

                       while(ite.hasnext())

                           {

                                    Object obj = ite.next();

                           }

                                       

6.Collection与Collections的区别

      Collection是集合的接口类,而Collections是一个帮助类,提供了一些帮助函数,如搜索,反转等等

7.Vector向量:与ArrayList相似,多用于多线程,但是线程同步,用Iterator迭代输出时输捕获修改更新的异常

 向量的功能:

  1.能存储任意对象

  2.不能存储基本类型的数据,如39,除非将这些数据包裹在包裹类中

  3.其容量可以按需求自动扩充

  4.若果不用扩充容量,增加元素方法的效率较高

  方式:

  Vector myVector=new Vector()  //初始容量为10

  Vector myVector=new Vector(int cap)  // 初始容量为cap

  Vector myVector=new Vector(Collection col) //使用集合col的元素初始化,若果col为数组,需要先将数组转换成为List对象

  例:Vector myVector=new Vector(Arrays.asList(col));

  void add(Object obj)   //将给定的参数对象加入到Vector的原有元素的最后

  boolean addAll(Colletion col)  //将集合类对象中的所有元素加入到此方法的接收者对象中,如果接收者的结果有变化,则返回true

  int size()  //返回元素的个数

  boolean isEmpty()  //判断Vector是否为空

  Object get(int pos)   //返回指定位置的元素

  void set(int pos,Object obj)  //用obj替换Vector中位置为pos的对象

  boolean remove(Object obj)   //删除第一次找到的obj对象,返回true.找不到则返回false

  Objectremove(int pos)     //去除给定位置的元素,并返回被去除的对象

  boolean removeAll(Collection col)    //删除Vector中所有在col出现的对象,如果接收者的结果有变化,则返回true

  void clear()  //删除vector的所有元素

  boolean contain(Object obj)   //判断Vector是否包含obj

  boolean containAll(Collection col)  //判断Vector是否包含col中的所有元素

  int indexOf(Object obj)     //返回obj在Vector第一次出现的位置,如果找不到则返回-1

  Enumeration elements()     //返回Vector中所有元素的Enumeration对象,注意此方法不能用于ArrayList

  Iterator iterator()    //返回Vector中所有元素的Iterator对象

  特别注意:Object get(int pos)  //读取位置为pos的元素,因其返回的是Object对象,所以需要对其进行塑性(显式转换)

  例:

  for(int i=0;i<v.size();i++)

  Custmer c=(Custmer)v.get(i);      //每次从v读出的对象都需要进行显式转换才可以正确使用

8.Vector与ArrayList比较:

               a:Vectors是可同步化的,Vector的内容的方法都是线程安全 的;

               b:Vector在默认情况下是产生一个双倍大小,而ArrayList增加50%的大小;

               c:Vector确实有一点点优势,因为你可以指定增加值(译者按,如果没有猜错的话,作者说的方法应该是 setSize(int newSize) Sets the size of this vector.)。

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics