集合框架是用来装对象的一个容器,并且只能装对象,数组也能装对象,但是数组没有集合中的方法,并且性能没有集合的好,所以此时就需要集合框架。
集合是有接口和类构成的,常用的集合为Collection、List、Set、Map等。
1、Collection
a、Collection是一个接口,代表一个集合,定义了一个集合最基本的操作,他有一个Iterable父接口,有子接口对其进行实 现,比如常用的List、Set。
b、Collection中定义了一些可以被实现的接口的方法,可以对集合进行增删查改,和遍历
2、List
a、List是一个有序、有下表、可重复的集合
b、List有一个父接口Collection和ArrayList、LinkedList等常用子类
注:存入List中的对象要重写hashcode和equals方法,因为List中的remove和contains方法要通过equals进行判断
c、ArrayList和LinkedList类进行对比:
ArrayList内部是数组实现,所以查找快,但插入、删除慢,需要一整片空间,所以需要扩容
LinkedList内部是链表实现,所以查找慢,但插入、删除快,不需要一整片空间,所以不需要扩容
3、Set
a、Set是一个无序,无下表,不可重复的集合
b、List有一个父接口Collection和HashSet、LinkedHashList和TreeSet等常用子类
c、HashSet
HashSet的存查速率特别高,可以和数组媲美,向HashSet中存对象,对象会调用其hashcode方法来获取一个hashcode值,并根据该hashcode值来存放该对象,当取对象的时候,获取hashcode值根据相同的计算方法计算,去相应的位置取出对象即可。
注:当集合的长度小于对象的个数的时候,容易放生hash冲突
此时,如果两个对象的hashcode值相同,此时调用对象的equals方法比较两个对象是否相同,如果相同的不存,如果不同,该对象会以链表的形式存入到相同hashcode值得下方
d、TreeSet
TreeSet内部使用二叉树进行实现,实现了可排序的set集合,存入到TreeSet中的对象要么具有可比较性,此时存入TreeSet中的集合需要调用对象的CompareTo方法,所以存入TreeSet中的对象需要实现Comparable接口,重写CompareTo方法。要么提供比较器Comparator。
*Comparator与Comparable区别
Comparator是构造器,Comparable叫可比较接口,放入TreeSet中的元素应该实现该接口,元素具有自然的比较顺序,当不满足该自然比较顺序同时又不能更改时,可以对TreeSet传入比较器,指定特定的比较顺序,且Comparator比Comparable的优先级高。
*compareTo和compare的区别
compareTo是Comparable中的方法,该方法中有一个参数,用于当前对象和传入对象的比较
compare是Comparator中的方法,该方法中有两个参数,用于传入的两个参数的比较
4、Map
Map描述了一种键值对的数据结构
Map是一个顶级接口,有HashMap、LinkedHashMap、TreeMap等实现类
Map中主要是对键的操作,键是唯一的,值可以重复