Collection常用方法:(共性方法)
方法名 功能简述
Boolean add(E e) 添加元素
boolean addAll(Collection c) 添加一堆元素
void clear() 清空容器
boolean contains(Object o) 判断容器中是否存在o
boolean remove(Object o) 移除一个特定元素
boolean removeAll(Collection c) 移除一堆元素
boolean retainAll(Collection c) 取交集
boolean isEmpty() 容器是否为空
int size() 容器中元素数
Iterator iterator() 取元素
List:
List:有序的,允许重复元素存在的集合。常用的类有ArrayList和LinkedList和Vector.
List集合判断元素是否相同,使用的是元素的equals方法。无论是包含contains还是删除remove操作其方法底层都调用了equals方法。
ArrayList:(可变数组)。
底层使用的是数组结构。特点:查询速度快,但是增加删除比较慢。线程不同步。
空参构造时默认容量大小是10。如果后期元素已满的话,会自动增加50%的容量。
LinkedList:底层使用的是链表数据结构,特点:查询慢,增加删除比较快。
特有方法:
addFirst();
addLast();
offerFirst();在此列表的开头插入指定的元素。
offerLast();....
getFirst();//不再建议使用
getLast();//不再建议使用
peekFirst() //获取但不移除此列表的第一个元素;如果此列表为空,则返回 null。jdk1.6开始
peekLast();//获取但不移除此列表的最后一个元素;如果此列表为空,则返回null。jdk1.6开始
removeFirst();//获取元素,并移除该元素
removeLast();//这两个remove不建议使用,因为当LinkList为空时,他们会抛出NoSuchElementException 异常。
pollFirst();// 获取并移除此列表的第一个元素;如果此列表为空,则返回 null。jdk1.6开始
pollLast();// 获取并移除此列表的最后一个元素;如果此列表为空,则返回 null。jdk1.6开始
Vector: 底层也是数组数据结构。Vector是线程同步的。增加删除都很慢,在jdk1.2之后被ArrayList取代了.并很少使用,它的带有elements关键字的这些方法一般都是其特有的方法。枚举是Vector特有的取出方式,其实枚举和迭代器是一样的。它和Iterator 接口的功能是重复的。但是Iterator 接口添加了一个可选的移除操作,并使用较短的方法名。新的实现应该优先考虑使用 Iterator 接口。
Set:
元素是无序的,元素不可以重复。
Set集合取元素方法只有一种:迭代器。
Set:常用子类:HashSet和treeSet
HashSet底层数据结构是哈希表。
HashSet是如何保证数据的唯一性的呢?
答:是通过元素的两个方法,hashCode和equals方法来完成的。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashCode值不同,不会调用equals方法。
所以我们在编写自己定义的一个类时,一般还要覆写Object的hashCode和equals方法,以防后期我们会对类的对象进行比较时会用到。
另外,判断元素是否存在contains,以及删除remove等操作,依赖的判断标准仍然是元素的hashcode和equals方法。而ArrayList判断是否存在只根据equals方法来判断的。
TreeSet:
底层的数据结构是二叉树(也叫红黑树)。TreeSet是一个有序集合,TreeSet中的元素将按照升序排列,缺省是按照自然排序进行排列,意味着TreeSet中的元素要实现Comparable接口。或者有一个自定义的比较器。所以如果我们自己定义的一个类的对象要加入到TreeSet当中,那么这个类必须要实现Comparable接口。并覆写其中的compareTo方法。 |
|
|