java中的集合体系:
Collection
|--- List 元素的序列, 可以重复
|--ArrayList:底层的数据结构使用的是数组结构。特点:查询速度很快。但是增删稍慢。线程不同步。
|--LinkedList:底层使用的链表数据结构。特点:增删速度很快,查询稍慢。线程不同步。
|--Vector:底层是数组数据结构。线程同步。被ArrayList替代了。因为效率低。
|---Set 元素是无序的,不可以重复
|--- HashSet, 底层数据结构是哈希表。是线程不安全的。不同步。通过hashCode和equals方法来保证元素唯一性
|---TreeSet, 可以对Set集合中的元素进行排序。 底层数据结构是二叉树。保证元素唯一性的依据:compareTo方法
Map 元素为二元偶对的汇集,不能重复
|--Hashtable:底层是哈希表数据结构,不可以存入null键null值。线程同步,效率低。
|--HashMap:底层是哈希表数据结构,允许使用 null 值和 null 键,线程不同步,效率高。
|--TreeMap:底层是二叉树数据结构。线程不同步。可以用于给map集合中的键进行排序。
TreeSet排序的两种方式:
一:让元素自身具备比较性。通过实现Comparable接口,覆盖compareTo方法。
这种方式也称为元素的自然顺序,或者叫做默认顺序。
二:当元素自身不具备比较性时,或者具备的比较性不是所需要的, 这时就需要让集合自身具备比较性。
定义比较器,实现Comparator接口,覆盖compare方法,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。注意,排序时,当主要条件相同时,一定要判断次要条件。
map集合的两种取出方式:
1,Set<k> keySet:将map中所有的键存入到Set集合。通过set的迭代器以迭代方式取出所有的键,
再根据get方法,获取每一个键对应的值。
Map集合的取出原理:将map集合转成set集合。在通过迭代器取出。
2,Set<Map.Entry<k,v>> entrySet:将map集合中的映射关系存入到了set集合中,这个关系的数据类型就是:Map.Entry
Entry其实就是Map中的一个static内部接口。 Map.Entry下有这样两个方法:
getKey() 返回与此项对应的键。
getValue() 返回与此项对应的值。