集合框架分为两大派系: |--单列集合 Coloection |-- List 有序,可重复,元素都有索引值 |-- ArrayList 底层是数组数据结构,查询速度快,增删稍慢,线程不安全的 |-- LinkedList 底层是链表数据结构,增删速度快,查询稍慢,线程不安全的 |-- Vector 底层是数组数据结构,查询相对于ArrayList慢,增删相对于LinkedList慢,线程安全的,jdk1。0时出现,后来被ArrayList替代 |-- Set 无序,不可重复,因为底层是封装的一个Map集合,它使用了Map的key,丢弃了Map的vlaue,所以必须保证元素的唯一性。 |-- HashSet 底层是哈希表数据结构,线程不安全的,无序高效,必须保证元素的唯一性,依赖于hashCode()和equals()方法 |-- LinkedHashSet 是存取有序的,底层是链表数据结构,元素唯一的原理和HashSet一样 |-- TreeSet 底层是二叉树数据结构,线程不安全的,可以对存入的数据进行排序,但是必须保证元素的唯一性,否则会导致元素覆盖 要使用TreeSet集合对元素进行排序,前提是必须让元素具备可比性,有两种方式: (1) 让元素自身具备比较性,也就是让元素实现Comparable接口并覆盖compareTo()方法来指定比较规则 (2) 如果元素自身不具备比较性或者具备的比较性不是所需要的,我们可以定义一个比较器,也就是实现Comparator接口并覆盖compare() 方法来指定比较规则,通过TreeSet的构造方法传递给集合即可。 |--双列集合 Map |-- HashMap 底层是哈希表数据结构,线程不安全的,可以存储null键null值,数据是以键值对的形式存储的,键和值之间存在着映射关系。 |-- Hashtable 底层是哈希表数据结构,线程安全的,不可以存储null键null值,jdk1。0时出现,后来被HashMap替代 |-- TreeMap 底层是是二叉树数据结构,线程不安全的,可以对集合中的key进行排序,排序方式和TreeSet相同
|-- Iterator迭代器:要遍历集合,则需要使用到Iterator接口,也就是迭代器,调用集合的一个iterator方法返回的就是一个Iterator迭代器,通过该迭代器的hasNext()和next()方法 就可以循环得到集合中的每一个元素。foreach循环底层也是使用迭代器实现的。 |-- List集合特有的遍历方式:普通for循环集合get(index)和size()方法实现遍历。另外List集合还有ListIterator可以实现向前遍历,前提是先向后遍历过。 |-- Map集合本身是没有迭代器的,要想迭代该集合中的元素有两种方式: (1)调用该集合的keySet方法返回的是集合中所有的key的Set集合,再使用Set集合的迭代器对返回的Set集合进行迭代,再通过Map集合的get(key)方法获取key对应 的value值 (2)调用该集合的entrySet方法返回的是Map集合中键和值的眏射关系,数据类型为Map。Entry,在迭代返回的Set集合获取每一个键和值的眏射关系,在调用Map。Entry 的getKey()和getValue()方法回去对应的键和值
|