集合继承实现关系

类之间的继承关系——不含接口
在这里插入图片描述
实现了Iterator接口的集合必须提供一个可以获得Iterator对象的方法。且通过Iterator,集合便有了hasNext(), remove()等方法。并可以使用增强for循环
在这里插入图片描述

接口之间的继承接口——不含类

在这里插入图片描述
在这里插入图片描述
1.AbstractCollection(聚类)
1.1 AbstractList(列表)
1.1.1ArrayList(线性表)—在内存里面地址是连续的线性空间,那么对于随机存储会很方便,因为他可以直接到的是对象地址,对于没有元素删减的操作方便

1.1.2.LinkedList(链表)—-在内存里面的地址是随机的,当要找一个元素的时候需要找到第一个元素,然后一直往回找,但是节点与节点之间是链表形式的所以删除和插入元素比较方便
Vector(线性同步表)—在多个线性访问的时候,会进行锁操作,让在同一个时间段只有一个线程访问Vector对象,所以Vector是线程安全的,每个方法都加了synchronized修饰符,除此之外和ArrayList是一样的。

1.1.3.Stack–栈,先进后出push()加到栈顶,poll()从栈顶拿出

1.2AbstractSet(集合)
1.2.1.HashSet(随机集合)HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。

1.2.2.TreeSet(有序集合)—TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。

1.3AbstractQueue(队列)
1.3.1AbstractQueue实现了Queue接口,可以像排队一样先进先出
offer()在队尾加入对象,poll()从队首取出对象,peek()判断是否还能取出元素,remove()移除元素不能返回null

1.3.2Deque继承了Queue接口可以指定在队前、队末加入和取出对象


public class Test {
    public static void main(String[] args) {
    Queue q=new LinkedList<>();
    q.offer("1");
    q.offer("2");
    q.offer("3");
    System.out.println(q.poll());
    }
}

2.AbstractMap(键值对)
首先介绍一下什么是Map。在数组中我们是通过数组下标来对其内容索引的,而在Map中我们通过对象来对对象进行索引,用来索引的对象叫做key,其对应的对象叫做value。这就是我们平时说的键值对。

2.1HashMap与TreeMap
2.1.1HashMap–values是无序的
2.1.1TreeMap–values是有序的

3.Dictionary
HashMap几乎可以等价于Hashtable,除了HashMap是非synchronized的,并可以接受null(HashMap可以接受为null的键值(key)
和值(value),而Hashtable则不行)。

HashMap是非synchronized,而Hashtable是synchronized,这意味着Hashtable是线程安全的,多个线程可以共享一个Hashtab
le;而如果没有正确的同步的话,多个线程是不能共享HashMap的。Java5提供了ConcurrentHashMap,它是HashTable的替代,比HashTable的扩展性更好。

另一个区别是HashMap的迭代器(Iterator)是fail-fast迭代器,而Hashtable的enumerator迭代器不是fail-fast的。所以当有
其它线程改变了HashMap的结构(增加或者移除元素),将会抛出ConcurrentModificationException,但迭代器本身的remove
()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。这条同样也
是Enumeration和Iterator的区别。

由于Hashtable是线程安全的也是synchronized,所以在单线程环境下它比HashMap要慢。如果你不需要同步,只需要单一线程
,那么使用HashMap性能要好过Hashtable。HashMap不能保证随着时间的推移Map中的元素次序是不变的。

总结 hashmap非线性安全,hashTable是线性安全的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值