黑马程序员——java集合框架之List,Set
集合框架
1.数组与集合的不同
数组长度是固定的,集合长度是可变的
数组中可以存储基本数据类型,集合只存储对象
集合可以存储不同类型的对象
2.java集合类中有两个顶层接口Collection和Map,下面是对Collection的一些总结:
集合中常用方法:
add方法的参数类型为Object,以便于接受任意类型的对象
集合中存储的都是对象的引用(或者说地址)
迭代器是集合取出元素的方式,此方法是定义在集合的内部,这样取出方式就可以直接访问集合内部的元素
而每一个容器的数据结构不同,所以取出的动作细节也不一样,但是都有共性内容:判断和取出
那么可以将共性抽取
这些内部类都符合一个规则,该规则是Iterator.
通过一个对对外提供的方法iterator()来获取集合的取出对象
方法:add(Object obj) 添加元素
remove(Object obj)删除元素
contains(Object obj)判断元素是否存在
isEmpty()判断集合是否为空
size()获取集合长度
retainAll()取交集,只保留于指定集合中元素相同的元素
iterator() 获取迭代器,用于取出集合中的元素
3. Collection下面的子接口:(List和Set)
- List:元素师有序的,元素可以重复,因为该集合体系有索引
LinkedList 链表数据结构
HashSet 底层数据结构是哈希表
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法hashCode 和equals来完成
如果元素的HashCode 值相同,才会判断equals是否为true
如果HashCode值不相同,才会进行equals
hashCode()和equals()是集合内部顶层自己调用的
判断元素是否存在,以及删除操,以来的方法是元素的hashCode和equals()方法。
一般开发用到HashSet时,一般都会复写hashCode()和equals()方法
(2)---TreeSet 底层数据结构是二叉树
保证元素唯一性的依据:compareTo()方法的返回值是否为0
TreeSet排顺序的第一种方式:让元素自身具备比较性,元素要实现Comparator接口,覆盖compareTo()方法
这种方式也成为元素的自然顺序,或者叫做默认顺序
TeeeSet的第二种排序方式:当元素自身不具备比较性时,或者具备的比较性不是所需要的
这时就需要让集合自身具备比较性
自己和初始化时,就赋予比较方式。
即定义一个比较器,将比较器对象作为参数传递给TreeSet集合的构造函数
当两种排序方式都存在时,以比较器为主,定义一个类实现Comparator接口,覆盖compare()方法