Collection
|--List:元素是有序的,元素可以重复,因为该集合体系有索引。
|--ArrayList;底层的数据结构是数组。特点:查询速度很快,但是增删稍慢线程不同不
|--LinkedList:底层使用数据结构是链表。特点:增删速度很快,查询稍慢。
|--Vector:底层数据结构是数组。特点:线程同步,被ArrayList取代
|--Set:元素是无序的(存入和取出的顺序不一定一致),元素不可以重复
|--HashSet:底层是哈系表
HashSet保证元素的唯一性是通过hashCode和equals来完成的。
如果元素的HashCode值相同,才会判断equals是否为true
如果元素的HashCode值不相同,不会判断equals
注意,对于判断元素是否存在,以及删除操作,依赖的方法是元素的hashCode和equals。
|--TreeSet:可以对Set集合的元素进行排序,底层是二叉数。
保证元素唯一性的依据:compareTo方法return 0。
TreeSet排序的第一种方式: 让元素自身具备比较性。
元素需实现Comparable接口,覆盖compareTo方法。
这种方式也叫自然顺序,或者叫做默认顺序。
|--Map
|--Hashtable:底层数据结构是哈希表,不可以存入null键null值,该集合是线程同步的,jdk1.0效率低
|--HashMap:底层数据结构是哈系表:允许使用null键null值,该机和线程是不同步的,将hashtable代替,jdk1.2效率高。
|--TreeMap:底层数据结构是二叉数,线程不同步,可以用map集合中的键进行排序
和Set集合很像。其实Set集合底层就是使用了Map集合。
List:
特有方法,凡是可以操作角标的方法都是该体系特有的方法。
增
add(index,element);
addAll(index,Collection);
删
remove(index);
改
set(index,element);
查
get(index);
subList(from,to);
listIterator();
int indexOf(obj)获取指定元素的位置
ListIterator listIterator();
List集合特有的迭代器。ListIterator 是Iterator的子接口。
在迭代时,不可以通过集合对象的方法操作集合的元素。因为会发生ConcurrentModificationException异常
所以在迭代时,只能用迭代器的方法操作元素,可是Iterator方法是有限的,
只能对元素进行判断,取出,删除的操作
如果想要其他的操作如添加,修改等,就需要使用其子接口,ListIterator.
该接口只能通过List集合的ListIterator方法获得
LinkedList:特有方法
addFirst();
addLast();
getFirst();
getLast();
获取元素,但是不删除元素。如果集合中没有元素,会出现NoSuchElementException
removeFirst();
removeLast();
获取元素,但是元素被删除。如果集合中没有元素,会出现NoSuchElementException
在JDK1.6出现了代替方法:
offerFirst();
offerLast();
peekFirst();
peekLast();
获取元素,但是不删除元素。如果集合中没有元素,返回null。
pollFirst();
pollLast();
获取元素,但是元素被删除。如果集合中没有元素,返回null。
Map集合:该集合存储键值对。一对一对往里存,而且要保证键的唯一性。
1.添加
put(K key,V value)
putAll(Map<? extends K,? extends V> m)
2.删除
clear()
remove(Object key)
3.判断
containsValue(Object value)
containKey(Object key)
isEmpty()
4.获取
get(Object key)
size()
value()
entrySet()
keySet()
map集合的两种取出方式:
1.keyset:将map中所有的键存入到Set集合当中。因为Set具备迭代器。
所有可以迭代方式取出所有的键,在根据get方法,获取每一个键对应的值
Map集合的取出原理:将map集合转换成set集合,再通过迭代器。 |