1、Set存放的元素是无序的不可重复。Set容器类有HashSet,TreeSet等
2、List存放的元素为有序可重复。
3、重写equals方法,一般最好重写hasCode方法,当对象作为key的时候及索引,会使用hasCode方法进行查找。
4、容器对象在调用remove,contains等方法时需要比较对象是否相等,这会涉及到对象类型的equals方法和hashCode方法。对于自定义的类型,需要重写equals和hashCode方法以实现自定义的对象相等规则。相等的对象应该具有相等的hashCode。
5、ArrayList底层是动态数组实现的,便于查找,读快
6、LinkedList底层以双向链表实现,便于插入和删除,读慢(Hash介于Array(读快改慢)和Linked(改快读慢)两者之间)
7、Map接口的实现类有HashMap(hash实现)和TreeMap(二叉树实现)等。
以下是java中集合的思维导图,总结了Java中集合的关系,区别,特点
由图可以看出,Java中的集合由三部分主成,包括Map,Collection,Collections,
其中Map存储的时key和value,Collection是Set和List的父类,Collections是集合的操作类,可以对集合进行处理。
下面先分析下Collection的源码:
package java.util; public interface Collection<E> extends Iterable<E> { int size(); boolean isEmpty(); boolean contains(Object o); Iterator<E> iterator(); Object[] toArray(); <T> T[] toArray(T[] a); boolean add(E e); boolean remove(Object o); boolean containsAll(Collection<?> c); boolean addAll(Collection<? extends E> c); boolean removeAll(Collection<?> c); boolean retainAll(Collection<?> c); void clear(); boolean equals(Object o); int hashCode(); }
从上我们可以看出Collection继承了了Iterable 接口,那么我们在看看Iterable 接口的源码,此接口只有3个函数:
public interface Iterator { //刚开始迭代的指针是指向第一元素前面 //如果仍有元素可以迭代,则返回 true boolean hasNext(); //返回迭代的下一个元素。 E next(); //从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。 void remove();} }
通过上面的基础知识相信对java中集合的基础知识应该有所了解,学东西要从源头学习,才能学的扎实,