集合是一种可以存储对象的容器,当然这个容器也是一个对象。和数组相比,集合的优势在于它的长度是可以变化,另外集合
可以存储多个类型的对象,而数组的长度是固定的,只能存储一个类型的元素;但是集合不能存储基本数据类型,而数组却可以。
--------------------------------Collection是Collection系列的根接口
规定了Collection系列的公共的/必须的一些方法和特征。
1、元素可以重复
2、元素是没有顺序的
boolean add(E e)
boolean addAll(Collection<? extends E> c)
void clear()
boolean isEmpty()
Iterator<E> iterator()
获取该集合的迭代器。我们可以通过迭代器获取这个集合中的所有元素。
boolean hasNext()
Object next()
void remove()
int size()
Object[] toArray() -->将集合变为数组
boolean contains(Object o)
返回集合中是否存在对象o,必须要重写equal()方法
boolean remove(Object o)
移除集合中的对象o,必须要重写equal()方法
--------------------------List 有序的Collection
是有序的Collection,即有下标,所以在Collection的基础上添加了关于下标的方法
void add(int index,E element)
E get(int index)
E remove(int index)
E set(int index, E element)
修改指定的元素
List<E> subList(int formIndex, int toIndex)
获取子集合
int indexOf(Object o)
获取第一个为o元素的下标
int lastIndexOf(Object o)
获取最后一个为o元素的下标
1、ArrayList
底层是数组结构,元素有顺序,线程不同步。
查找快,增删慢。容量扩展的规律是50%+1
ArrayList可以存储不规则的元素和相同的元素。
2、LinkedList
底层是链表结构,线程不同步。
查找慢,增删快。增长方式不同于其他。
ArrayList可以的操作,LinkedList都可以。
3、Vector
*************************************************************************************************Vector中所有的方法都是同步的(synchronized)。操作效率低于ArrayList。
Vector的扩展规律为100%+1。
ArrayList、Vector和LinkedList有何区别
ArrayList底层是数组,增删慢,查找快
是线程不安全的,效率高
LinkedList底层是链表,增删快,查找慢
线程不安全,效率高
Vector底层是数组,增删慢,查找快
线程安全,效率低
*************************************************************************************************
--------------------------Set 无序不可重复的Collection
为什么先比较hashCode? 因为hashCode是数字,比较较快。此方法必须重写equals()和hashCode()
判断元素是否相同的条件是:hashCode() && equals()
boolean containsAll(Connection<?> c)
boolean equals(Object o)
int hashCode()
1、HashSet
2、LinkedHashSet需要重写hashcode和equals方法,其他和LinkedList一样,没有顺序,没有索引,不能有for方法,但可以用foreach()
底层有链表和hashMap组成,链表保证了有序(存储顺序),HaseMap保证了不重复3、TreeSet 有顺序的,不重复Set
LinkedHashSet是一个有序不重复的集合
TreeSet中的元素需要实现Comparable接口。因为TreeSet元素的大小顺序时时按照CoparaTo方法返回的结果判断的。
使用元素的自然顺序对元素进行排序,或者根据set时提供的Comparator进行排序,具体取决于使用的构造方法。
3.1、自然排序/Comparable接口排序 实现接口
3.2、比较器排序/Comparator排序 构造器里面 匿名内部类