先从AbstractCollection
public abstract class AbstractCollection
/*****/
}
public interface Iterable
}
Collection接口继承了Iterable
public interface Collection
}
由此可以看出这是个抽象类,他的子类包括:
AbstractList , AbstractQueue , AbstractSet , ArrayDeque
public interface Collection
/*****/
}
public interface Iterable
/****/
}
Collection
AbstractList此类提供的骨干实现的List接口以最小化来实现该接口由一个“随机访问”数据存储备份所需的工作(如阵列)。
public abstract class AbstractList
}
public interface List
}
eg:AbstractList实现了接口List,ArrayList继承了抽象类AbstractList
public class ArrayList
}
LinkedList与ArrayList 的区别我们可以从下面的代码片段看出了;
public class LinkedList
}
它是继承了AbstractSequentialList
AbstractQueue这个类提供了一些Queue操作的骨架实现。
public abstract class AbstractQueue
}
AbstractSet 此类提供的骨干实现Set界面最小化以实现此接口所需的工作。
public abstract class AbstractSet
}
ArrayDeque 可调整大小的数组的实现的Deque接口。 数组deques没有容量限制; 他们根据需要增长以支持使用。 它们不是线程安全的; 在没有外部同步的情况下,它们不支持多线程的并发访问。
public class ArrayDeque
}
Map接口:
public interface Map
}
里面有我们常用的方法,比如获取Map的size;还有Map的 V put(K key, V value)的方法,等等;
如果我们要使用Map集合时,一般就是new一个出来,
eg:Map
下面我们看看HashMap的源码:
public class HashMap
}
可知HashMap
下面我们看看HashTable的源码:
public class Hashtable
}
共同点在于都是实现了Map的接口,不同的是在继承的方面上,一个是继承AbstractMap
以下摘自Java API文档:
Dictionary
类是任何类的抽象父类,例如Hashtable
,它将键映射到值。 每个键和每个值都是一个对象。 在任何一个Dictionary对象中,每个键最多与一个值相关联。 给定一个Dictionary和一个键,可以查找关联的元素。 任何非null
对象都可以用作键和值。
通常, equals
实现应该使用equals
方法来确定两个键是否相同。
* NOTE: This class is obsolete. New implementations should
* implement the Map interface, rather than extending this class.
注意:此类已过时。 新的实现应该实现Map接口,而不是扩展这个类。
public abstract class Dictionary
}
还有线程安全的问题;以下摘自HashTable源码片段:
也就是说HashTable的安全的;
具体区别:如下链接:
https://blog.csdn.net/fujiakai/article/details/51585767