collection为了满足应用需求,他有划分,可以存储重复元素的和不可以重复元素的,有序的或者无序的,最终体现在了他的子接口,定义了一个可以存储重复元素的规则以及不允许重复元素的规则
一、list(列表): 有序的(存储的顺序和取出的顺序一致)可以存储重复的元素。对内容精确控制
特点:对元素都有索引对应,可以实现对元素的更多操作,而且可以像操作数组一样① ArrayList:内部结构是数组,而且是大小可变的数组(原理就是不断的new数组,并将原数组的元素copy到新数组),是不同步的,效率比Vector高
特点:查询快,增删慢(相对常用,因为查询功能使用更频繁)② LinkedList:内部数据结构是链接列表(链表)
特点:查询慢,增删快,非同步的
可以用链表完成堆栈或者队列结构
堆栈:先进后出 First In Last Out(如同一个杯子)
队列: 先进先出 First In First Out(如同一个水管)
③ Vector:内部数据结构:数组(大小可变的数组),jdk1.2版加入集合框架的,他是同步的,效率低
无论查询增删都很慢,被ArrayList替代了
二、set:Set集合中的方法和collection一致,元素必须唯一
① HashSet :底层是哈希表数据结构,不保证顺序。不同步的(哈希算法也叫散列算法)
好处:查询更快,元素必须唯一性,不保证顺序,
原理:如果出现哈希值(方法:hashcode)相同,会在判断元素的内容(方法:equals)是否相同,如果内容也相同,则 不存。 如果内容不同,会进行二次算法,将元素存储到哈希表中。相同的哈希值叫做:哈希冲突。
哈希表判断元素是否相同依赖两个方法:hashcode和equals,若hashcode不同则不调用equals,否则调用equals,通常都会覆盖这两个方法② TreeSet:基于红黑树结构(二叉树)数据结构,非同步,可以对set中的元素进行自然排序
要想让对象具备比较方式,就得实现comparable,覆盖compareto
排序方式一:元素实现了Compareable接口,覆盖了compareto方法,根 据元素自身建立了比较方式
想要让对象具备比较性,应该实现compareable接口,覆盖compareto方法,对象之间比较需要通过方法来完成,基本数值比较通过运算符完成
当元素不具备自然排序,或者具备的自然排序不是所需的,就使用方式二
排序方式二:自定义比较器Comparator,将比较器对象作为参数传递给Treeset集合的构造函数三、map:特点:1、 一次存储一对元素2、一对元素存在映射关系,一个称为键,一个称为值3、键不能重复
主要子类:
① hashtable:哈希表结构,键值不能使用null,同步的
② hashmap:哈希表结构,键值能使用null,不同步,效率高于hashtable
③ treemap:二叉树结构,可以对map集合中的键进行排序