Java容器

Java容器

 

数组

数组应该是一种最原始的容器。

数组特点:高效,固定大小,固定保存类型,可保存基本类型;

用法:int[] array = new int[8];

 

Array类

Array 类提供了动态创建和访问 Java 数组的方法;

作为操作数组的工具类,提供了一系列的静态方法来操作数组;

与数组的差别:

–  容量可变

–  存放任意类型对象,但不能保存基本类型

 

        

 

Java常用容器继承关系:

Collection
├List       接口
│├LinkedList       链表
│├ArrayList         顺序结构动态数组类
│└Vector         向量
│ └Stack       栈
└Set
Map
├Hashtable
├HashMap
└WeakHashMap List接口

 

ArrayList

       最基本、最常见的容器,可以简单看成“能够自动扩展的数组”;

       和其他容器一样,ArrayList只保存Object的引用,所以除了基本类型,啥都可以放;

       因为ArrayList只保存Object的引用,所以其contains()方法其实是靠判断引用来确定的,也就是靠判断对象内存地址来确定的 ;

       ArrayList容量拓展:新的容量=(原始容量x3)/2 + 1 ;

         ArrayList是线程不安全的,可以通过synchronized关键字,或者ArrayList中的Collections.synchronizedList()方法来解决线程不安全问题。

 

 

Vector

Vector非常类似ArrayList,但是Vector是同步的。

由Vector创建的Iterator,虽然和ArrayList创建的Iterator是同一接口,但是,因为Vector是同步的,当一个Iterator被创建而且正在被使用,另一个线程改变了Vector的状态(例如,添加或删除了一些元素),这时调用Iterator的方法时将抛出ConcurrentModificationException,因此必须捕获该异常。

 

Stack

Stack继承自Vector,实现一个后进先出的堆栈。

Stack提供5个额外的方法使得Vector得以被当作堆栈使用。基本的push和pop方法,还有peek方法得到栈顶的元素,empty方法测试堆栈是否为空,search方法检测一个元素在堆栈中的位置。

 

 

LinkedList

LinkedList实现了List接口,允许null元素。此外LinkedList提供额外的get,remove,insert方法在LinkedList的首部或尾部。这些操作使LinkedList可被用作堆栈(stack),队列(queue)或双向队列(deque)。

 

HashTable与HashMap

 

 

      两者的数据结构都是“链表散列”;

       put元素的时候,先根据key的hash值得到这个元素在数组(Entry)中的位置(即下标),然后就可以把这个元素放到对应的位置中了。如果这个元素所在的位子上已经存放有其他元素了,那么在同一个位子上的元素将以链表的形式存放,新加入的放在链头,最先加入的放在链尾。

         区别

         HashTable线程安全,HashMap非线程安全;

         HashMap的键允许存在一个null(所以用containsKey()方法来判断键是否存在),值可以存在任意多null;HashTable键值都不能出现null;

         HashTable的Entry数组默认初始为11,初始化时可指定;HashMap初始长度为16,长度始终保持2的n次方;

         HashTable的数组拓展:2*原数组长度+1;HashMap的数组拓展:原数组长度* 2;

Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

        

其他:

  • List:

–  ArrayList和数组随即访问性能高

–  LinkedList添加和删除元素性能高

  • Set:

–  HashSet各项性能都很高

–  TreeSet有顺序要求时使用

–  LinkedHashSet有特殊操作时使用,如模拟栈

  • Map:

–  HashMap、TreeMap、LinkedHashMap的情况和Set类似

 

 

 

 

 

(待补充)

posted @ 2015-08-22 20:17  李宙你好吗  阅读(331)  评论(0)    收藏  举报