JAVA的集合框架包含的主要内容
位于java.util包中
Collection是一个接口,List和Set是它的子接口;ArrayList、LinkedList、HashSet和TreeSet都是它的实现类
Collection的基本操作:增加add()、删除remove().clear()、判断contains()和遍历iterator()
- Collection接口存储一组不唯一、无序的对象
- List接口存储一组不唯一,有序(插入顺序)的对象
- Set接口存储一组唯一,无序的对象
List接口的实现类:
l ArrayList实现了长度可变的数组,在内存中分配连续的空间
优点:遍历元素和随机访问元素的效率比较高
缺点:添加和删除需要移动大量的元素,效率低,按照内容查询效率低
l LinkedLise采用双向链表存储方式
优点:插入、删除元素时效率比较高
缺点:遍历和随机访问元素效率低下
List接口特有的方法:增(add())删(remove())改(set())查(get())
特点:
l ArrayList:
1) 遍历元素和随机访问元素的效率比较高
2) 插入、删除等操作频繁时性能低下
l LinkedList:
1) 插入、删除元素时效率较高
2) 查找效率低
3) 便利效率低
泛型:
使用背景:因为集合中可以存放任意引用数据类型,所以在使用的时候可能需要向下类型转型,由于在转型时由于类型的不确定导致很容易出错,这时规定集合中只能存放一种类型的数据,这就是泛型
表现形式:
l 泛型类
1) 在创建类的时候声明一个未知的类型
2) 可以用该类型作为成员变量的类型
3) 在创建对象的时候来确定该类型
l 泛型方法(可用来替换大量的方法重载)
1) 在声明方法的时候 声明了一种未知类型
2) 在调用方法时才确定了具体类型
3) 可以替换参数类型不同的重载方法
4) 用泛型实现可变参数
5) 在声明方法的时候声明一种未知类型
6) 并且时候用该未知的类型来创建一个可变参数
7) 在使用参数的时候f是一个数组,调用者传入的参数按照顺序放入数组中
l 泛型接口
1) 在定义一个接口的时候可以定义一种未知的类型
2) 该未知类型可以在实现类中确定
3) 当实现类也不确定泛型的类型时,实现类继续作为泛型类,在创建对象的时候在确定泛型的类型
Set接口中的实现类:
Set接口存储一组唯一,无序的对象
操作数据的方法与List类似,但不存在get()方法(因为无序不存在索引值)
l HashSet采用Hashtable哈希表存储结构
优点:添加速度快,查询速度快,删除速度快
缺点:无序
其子类linkedHashSet就是在存储块用了链表的方式增加了前一个元素和后一个元素的位置;
但由于内部存储结构的复杂性,导致了整体的运行速率较慢
l TreeSet采用了二叉树的存储结构
优点:有序(排序后的升序)查询速度比List块(按照内容查询)
缺点:没有HashSet快
大于根节点的数放在右侧称为右子树,小于根节点的数放在左侧称为左子树
TreeSet常见问题:
使用TreeSet存放自定义类型的对象会报错,原因是自定义的类中没有指定排序的方式
解决方法:
l 内部比较器:在自定义的类中实现Comparable接口
1) 自定义类先实现Comparable接口
2) 重写方法
l 外部比较器:新建一个Comparable接口的实现类,通过调用实现类的对象来调用比较的方法
1) 新建一个接口的实现类,并重写方法
2) 通过新建实现类对象调用实现类方法
Map接口
特点:key-value映射
l HashMap:Key无序 唯一;Value无序 不唯一(HashMap最多只允许一条记录的键为Null,允许多条记录值为Null)
注:底层实现与HashSet相同
LinkedHashMap:有序的HashMap
注:底层实现和LinkedHashSet
l TreeMap:有序 速度没有HashMap块
注:底层实现与TreeSet相同
Collections工具类
Collections和Collection的区别:前者是集合的操作类,后者是集合的接口
集合总结:
名称 |
存储结构 |
顺序 |
唯一性 |
查询效率 |
添加/删除效率 |
ArrayList |
顺序表 |
有序 |
不唯一 |
索引效率高 |
低 |
LinkedList |
链表 |
有序 |
不唯一 |
下标查低 |
最高 |
HashSet |
哈希表 |
无序 |
唯一 |
最高 |
最高 |
HashMap |
哈希表 |
Key无序 |
key唯一 |
最高 |
最高 |
LinkedHashSet |
哈+链 |
有序(添加) |
唯一 |
最高 |
最高 |
linkedHashMap |
哈+链 |
Key有序(添加) |
key唯一 |
最高 |
最高 |
TreeSet |
二叉树 |
有序(升序) |
唯一 |
中等 |
中等 |
TreeMap |
二叉树 |
有序(升序) |
key唯一 |
中等 |
中等 |