当我们要处理一串数据的时候,相比较c++和c中的数组和指针,在Java中我们更为常用的是ArrayList、HashMap等集合数据结构。c语言对指针的支持成就了他的深度,而Java中多种多样的包装类成就了他的广度。在java中,我们一般将List、Map、Set等数据结构通归为集合数据结构,这些类都存在于集合类库中。
(一) 本文来源[email protected]搞@^&代*@码2网 集合接口
1.集合的接口和实现分离
与其他的数据结构类库相似的,java的集合类库也采用了这种接口和实现分离的方法。
这种方法的好处是不言而喻的。当你要实例化一个队列时,如果你想去选择链式结构或者循环数组或其他不同的实现方法,只需为集合接口引用不同的实现类即可。
Queue<String> qe1 = new LinkedList<>();//LinkedList是链表实现队列Queue<String> qe2 = new ArrayDeque<>();//ArrayDeque是循环数组实现队列
同样是Queue的实现类,但采用了不同的方式。
2.Collection接口
在集合类库中,最基本的接口是Collection接口。
Collection接口可以理解成集合类库中的树根,所有的其他类都是从之演变出来的。因为Colleaction是一个泛型接口,所以在这个泛型接口中java类库的设计者添加了许多的方法,所有的实现类都必须去实现这些方法。
int size()//返回此 collection 中的元素数。//如果此 collection 包含的元素大于 Integer.MAX_VALUE,则返回 Integer.MAX_VALUE。boolean isEmpty()//如果此 collection 不包含元素,则返回 true。 boolean contains(Object o)//当且仅当此 collection 至少包含一个满足 (o==null ? e==null : o.equals(e)) 的元素 e 时,返回 true。 Iterator<E> iterator()//返回在此 collection 的元素上进行迭代的迭代器。//关于元素返回的顺序没有任何保证,除非此 collection 是某个能提供保证顺序的类实例。 Object[] toArray()//返回包含此 collection 中所有元素的数组。//如果 collection 对其迭代器返回的元素顺序做出了某些保证,那么此方法必须以相同的顺序返回这些元素。 //返回的数组将是“安全的”,因为此 collection 并不维护对返回数组的任何引用。//调用者可以随意修改返回的数组。 //此方法充当了基于数组的 API 与基于 collection 的 API 之间的桥梁。 boolean add(E e)//确保此 collection 包含指定的元素。如果此 collection 由于调用而发生更改,则返回 true。//如果此 collection 不允许有重复元素,并且已经包含了指定的元素,则返回 false。boolean remove(Object o)//如果此 collection 包含一个或多个满足 (o==null ? e==null : o.equals(e)) 的元素 e,则移除这样的元素。//如果此 collection 包含指定的元素(或者此 collection 由于调用而发生更改),则返回 true 。 boolean containsAll(Collection<?> c)//如果此 collection 包含指定 collection 中的所有元素,则返回 true。 boolean addAll(Collection<? extends E> c)//将指定 collection 中的所有元素都添加到此 collection 中。//如果在进行此操作的同时修改指定的 collection,那么此操作行为是不确定的。boolean removeAll(Collection<?> c)//移除此 collection 中那些也包含在指定 collection 中的所有元素。//此调用返回后,collection 中将不包含任何与指定 collection 相同的元素。 void clear()//移除此 collection 中的所有元素。boolean retainAll(Collection<?> c)//仅保留此 collection 中那些也包含在指定 collection 的元素。//移除此 collection 中未包含在指定 collection 中的所有元素。