java容器类学习总结

java类容器的继承关系

JAVA的容器---List,Map,Set
Collection
├List
│├LinkedList
│├ArrayList
│└Vector
 
└Stack
└Set
Map
├Hashtable
├HashMap
└WeakHashMap

 HashMap HashTable 是无序的,ArrayList TreeMap是有序的。 

 

ArrayList LinkList HashMap 非同步

HashTable Vector 同步(同步的没有非同步的集合性能高)

 

 JAVA类容器使用

不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子

    
while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素

    
}

  由Collection接口派生的两个接口是ListSet

 

 

LinkedList的内 部实现是链表,它适合于在链表中间需要频繁进行插入和删除操作,ArrayList从其命名中可以看出它是一种类似数组的形式进行存储,因此它的随机访问速度极快,如果需要快速随机访问元素,应该使用ArrayList

 

如果程序在单线程环境中,或者访问仅仅在一个线程中进行,考虑非同步的类,其效率较高,如果多个线程可能同时操作一个类,应该使用同步的类。

 

尽量返回接口而非实际的类型,如返回List而非ArrayList,这样如果以后需要将ArrayList换成LinkedList时,客户端代码不用改变。这就是针对抽象编程。

 

在使用add()方法增加新的元素时,如果要增加的数据量很大,应该使用ensureCapacity()方法,该方法的作用是预先设置Arraylist的大小,这样可以大大提高初始化速度。

 

LinkedList一样,ArrayList也是非同步的(unsynchronized)。

 

 

Set是一种不包含重复的元素的Collection,即任意的两个元素e1e2都有e1.equals(e2)=falses

 

Map中元素,可以将key序列、value序列单独抽取出来。使用keySet()抽取key序列,将map中的所有keys生成一个Set;使用values()抽取value序列,将map中的所有values生成一个Collection 为什么一个生成Set,一个生成Collection?那是因为,key总是独一无二的,value允许重复。

 

 

HashMap 和 HashTable的区别

 

线程安全不同
    HashTable的方法是同步的,HashMap是未同步,所以在多线程场合要手动同步HashMap。HashMap效率高
对NULL的处理不同
    HashTable不允许null值(key和value都不可以),  编译期不会检查,运行期会出现空指针异常。
    HashMap允许null值(key和value都可以)。当get()方法返回null值时,即可以表示 HashMap中没有该键,也可以表示该键所对应的值为null。因此,在HashMap中不能由get()方法来判断HashMap中是否存在某个键,而应该用containsKey()方法来判断。
方法不同   
    HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。

 

Map的排序

 

 

 

 匿名内部类的使用:

     要产生的新类需要继承于一个已有的父类或者实现一个接口,并且这个类的声明只在创建此类对象时用了一次。

 Map的遍历

方法1:

 

方法2:

 

比较:

entrySet比keySet 效率要高很多。
 keySetMap.keySet()会生成KeyIterator迭代器,其next方法只返回其key值
 entrySetMap.entrySet()方法会生成EntryIterator 迭代器,其next方法返回一个Entry对象的一个实例,其中包含key和value
 方式一再取得key所对应的value时,此时还要访问Map的这个方法,这时,方式一多遍历了一次table。

Collection是一个接口,没有任何直接实现类

Collection的实现类是指Collection的具体子接口的实现类

Collection的子接口常见的有ListSetMap不是Collection的子接口。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值