在编写java程序中,我们最常用的除了八种基本数据类型,String对象外还有一个集合类,在我们的的程序中到处充斥着集合类的身影!
java中集合大家族的成员实在是太丰富了,有常用的ArrayList、HashMap、HashSet,也有不常用的Stack、Queue,有线程安全的Vector、HashTable,也有线程不安全的LinkedList、TreeMap等等!
上面的图展示了整个集合大家族的成员以及他们之间的关系。下面就上面的各个接口、基类做一些简单的介绍(主要介绍各个集合的特点。区别)。
下面几张图更清晰地介绍了结合类接口间的关系:
map的实现类
Collection接口
Collection接口是最基本的集合接口,它不提供直接的实现,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。Collection所代表的是一种规则,它所包含的元素都必须遵循一条或者多条规则。如有些允许重复而有些则不能重复、有些必须要按照顺序插入而有些则是散列,有些支持排序但是有些则不支持。
在Java中所有实现了Collection接口的类都必须提供两套标准的构造函数,一个是无参,用于创建一个空的Collection,一个是带有Collection参数的有参构造函数,用于创建一个新的Collection,这个新的Collection与传入进来的Collection具备相同的元素。//要求实现基本的增删改查方法,并且需要能够转换为数组类型
public class Collection接口 { class collect implements Collection {复制代码
@Override public int size() { return 0; }复制代码
@Override public boolean isEmpty() { return false; }复制代码
@Override public boolean contains(Object o) { return false; }复制代码
@Override public Iterator iterator() { return null; }复制代码
@Override public Object[] toArray() { return new Object[0]; }复制代码
@Override public boolean add(Object o) { return false; }复制代码
@Override public boolean remove(Object o) { return false; }复制代码
@Override public boolean addAll(Collection c) { return false; }复制代码
@Override public void clear() {复制代码
} //省略部分代码 复制代码
@Override public Object[] toArray(Object[] a) { return new Object[0]; } } }复制代码
List接口
List接口为Collection直接接口。List所代表的是有序的Collection,即它用某种特定的插入顺序来维护元素顺序。用户可以对列表中每个元素的插入位置进行精确地控制,同时可以根据元素的整数索引(在列表中的位置)访问元素,并搜索列表中的元素。实现List接口的集合主要有:ArrayList、LinkedList、Vector、Stack。
2.1、ArrayList
public class List接口 { //下面是List的继承关系,由于List接口规定了包括诸如索引查询,迭代器的实现,所以实现List接口的类都会有这些方法。 //所以不管是ArrayList和LinkedList底层都可以使用数组操作,但一般不提供这样外部调用方法。 // public interface Iterable<T> // public interface Collection<E> extends Iterable<E> // public interface List<E> extends Collection<E> class MyList implements List {复制代码
@Override public int size() { return 0; }复制代码
@Override public boolean isEmpty() { return false; }复制代码
@Override public boolean contains(Object o) { return false; }复制代码
@Override public Iterator iterator() { return null; }复制代码
@Override public Object[] toArray() { return new Object[0]; }复制代码
@Override public boolean add(Object o) { return false; }复制代码
@Override public boolean remove(Object o) { return false; }复制代码
@Override public void clear() {复制代码
}复制代码
//省略部分代码复制代码
@Override public Object get(int index) { return null; }复制代码
@Override public ListIterator listIterator() { return null; }复制代码
@Override public ListIterator listIterator(int index) { return null; }复制代码
@Override public ListIterator listIterator(int index) { return null; }复制代码
@Override public Object[] toArray(Object[] a) { return new Object[0]; } } }复制代码
Set接口
Set是一种不包括重复元素的Collection。它维持它自己的内部排序,所以随机访问没有任何意义。与List一样,它同样运行null的存在但是仅有一个。由于Set接口的特殊性,所有传入Set集合中的元素都必须不同,同时要注意任何可变对象,如果在对集合中元素进行操作时,导致e1.equals(e2)==true,则必定会产生某些问题。实现了Set接口的集合有:EnumSet、HashSet、TreeSet。
3.1、EnumSet
是枚举的专用Set。所有的元素都是枚举类型。
3.2、HashSet
HashSet堪称查询速度最快的集合,因为其内部是以HashCode来实现的。它内部元素的顺序是由哈希码来决定的,所以它不保证set 的迭代顺序;特别是它不保证该顺序恒久不变。
public class Set接口 { // Set接口规定将set看成一个集合,并且使用和数组类似的增删改查方式,同时提供iterator迭代器 // public interface Set<E> extends Collection<E> // public interface Collection<E> extends Iterable<E> // public interface Iterable<T> class MySet implements Set {复制代码
@Override public int size() { return 0; }复制代码
@Override public boolean isEmpty() { return false; }复制代码
@Override public boolean contains(Object o) { return false; }复制代码
@Override public Iterator iterator() { return null; }复制代码
@Override public Object[] toArray() { return new Object[0]; }复制代码
@Override public boolean add(Object o) { return false; }复制代码
@Override public boolean remove(Object o) { return false; }复制代码
@Override public boolean addAll(Collection c) { return false; }复制代码
@Override public void clear() {复制代码
}复制代码
@Override public boolean removeAll(Collection c) { return false; }复制代码
@Override public boolean retainAll(Collection c) { return false; }复制代码
@Override public boolean containsAll(Collection c) { return false; }复制代码
@Override public Object[] toArray(Object[] a) { return new Object[0]; } } }复制代码
Java基础19-一文搞懂Java集合类框架,以及常见面试题(二):https://developer.aliyun.com/article/1535725