集合
概念
对象的容器,定义了对多个对象进行操作的常用方法。可
实现数组的功能
和数组的区别
- 数组长度固定,集合长度不固定
- 数组可以存储基本类型和引用类型,集合只能存储引用类型
Collection体系集合
Collection父接口(方法)
- 特点:代表一组任意类型的对象,无序,无下标
- 方法:
1 | boolean add(Object obj); //添加一个对象 |
针对Collection集合进行操作的工具类
1 | public static <T> int binarySearch(List<?> list,T key)://针对集合的二分查询方法:查询key在集合中出现的索引值 |
List集合
特点
- 有序、有下标、元素可以重复
ArrayList
- 一个List接口的实现类叫做ArrayList,类似于数组,但是长度空间可以动态变化
- 集合对象在内存中是可以不连续存放的,只能存放引用类型的数据对象
- ArrayList里面可以存放null值,元素可以重复
- 其父类叫做AbstractList
LinkList
也是一个List接口的实现类,底层的数据结构是链接列表
方法
1 | void add(int index , Object o); //在index位置插入对象o |
Set集合
特点:不可重复的“无序”集合
HashSet
重写equals和hashCode方法来实现去重
TreeSet
本质
本质基于TreeMap的底层实现(红黑树结构 ———> 自平衡的“二叉树结构”)
由于TreeSet属于Set集合(本身保证元素唯一,不重复的元素),还可以将元素按照自然顺序排序
TreeSet排序的方式
有两种排序方式:
- 自然排序
public TreeSet<T>() : //默认的自然顺序排序
- 选择器排序
publlic TreeSet<T>(Comparator<T> com) : //自己定义的选择器排序,Comparator类中必须实现Comparable接口以及里面的compareTo方法以及实现排序
排序方式的选择取决于创建当前Set集合对象的时候的构造方法。
Map集合
java.util.Map<K,V>:接口
特点:
- 双列集合
- 一个键值对元素(一个键对应一个值,值可以重复,但键必须唯一,两者均可以为null),只针对键有效,跟值无关
- 遍历方式与Collection集合遍历方式不同
map的put()方法完成数据的插入,返回值为上次key对应的value值,第一次添加该key,则返回为null.
但是对于返回为null的情况有两种:
- 一种是第一次添加该key
- 一种是该key上次本身的值就是null
Map集合的功能
添加功能
1 |
|
自定义的对象存储在值的位置,是可以重复的!如果是在键的位置,不能重复
HashMap中的去重问题
对于Map存储的键如果是自定义对象:该自定义对象的所在类必须重写hashCode()和equals()方法,会依赖于HashMap的put方法
hash() —->依赖于hashCode():算出每个对象哈希码值
putValue() —->equals()方法:哈希码值一样,还有比较每一个成员信息是否相同
TreeMap
TreeMap的底层是红黑树结构,它在创建对象时会进行排序,它的排序方式有两种:
- public TreeMap():默认的自然排序
- public TreeMap(Comparator<? super K> comparator):是一种比较器排序(推荐)