Java集合框架:
集合框架中常用类比较
• 用“集合框架”设计软件时,记住该框架四个基本接口的下列层次结构关系会有用处:
– Collection 接口是一组允许重复的对象。
– Set 接口继承Collection,但不允许重复。
– List 接口继承Collection,允许重复,并引入位置下标。
– Map 接口既不继承Set 也不继承Collection, 存取的是键值对。
总结:
1. 实现了List接口的类元素均可重复,元素顺序按加入顺序排列;
2. 实现了Set接口的类元素均不能重复,元素顺序分几种情况;
3. 实现了Map接口的类Key均不可重复,元素顺序分几种情况;
4. 只要类中出现Linked的类元素顺序按插入顺序排列,因为其实现了数据结构中的链表;
5. 只要类中出现Tree的类元素均不可重复且必须是同一数据类型,因为其实现了用二叉树排序的功能,其中会涉及元素的比较,只有相同类型的数据类型才可比较,除非是其重写了CompareTo方法。
主要集合类简单描述:
List接口: 继承 Collection,允许重复,有序集合,可以通过索引来访问指定位置的集合元素(顺序索引从0开始),List集合默认按元素的添加顺序来设置元素的索引
|----ArrayList
底层数据结构是数组,线程不安全。 增删慢,查询快。
|----LinkedList
底层数据结构是双向链表,线程不安全。增删快,查询慢
|----Vector
底层数据结构是数组,线程安全。增删慢,查询快。但是,线程安全,效率就低。
Set接口: 继承 Collection,但不允许重复,无序集合(存入与取出的顺序不一定一致)拥有自己的内部排列机制。
|----HashSet:
基于哈希表实现,是线程不安全的。通过两个元素的hashcode和equals来元素唯一性。
|----TreeSet:
基于二叉树实现,是线程不安全的。其保证元素的唯一性的依据,compareTo方法return 0。
Map接口: 一组成对的键-值对象,Map中不能有重复的键,拥有自己的内部排列机制。
|----HashTable:
底层是哈希表数据结构,不可以存入null键null值,该集合是线程安全的。
|----HashMap:
底层是哈希表数据结构,允许使用入null键null值,该集合是不安全的,将HashTable代替。
|----TreeMap:
底层是二叉树数据结构,线程不同步;可以用于给Map集合中的键进行排序。和set很像,set底层就是用了Map集合;
重要的两个遍历扩展接口:
Iterator接口:迭代器,实现对集合中元素的遍历操作,很好的体现了内部类的设计。
1.调用iterator()获得集合的Iterator;
2.使用循环不断调用hasNext()方法,判断是否还有元素;
3.在循环体内,调用next()方法获取每个元素
ListIterator接口:获取List的迭代器