黑马程序员技术交流社区
标题:
【石家庄校区】JavaEE个人学习总结-day07集合
[打印本页]
作者:
sun2ice
时间:
2018-1-4 16:58
标题:
【石家庄校区】JavaEE个人学习总结-day07集合
本帖最后由 sun2ice 于 2018-1-4 23:07 编辑
#day7 集合
##常用的方法
*
Collection 接口
```
Collection: [kəˈlekʃn], 单列集合的顶层接口
boolean add(E e): 添加元素, 添加成功返回true, 否则false
boolean remove(Object o): 从集合中删除一个元素, 删除成功返回true, 否则false
void clear(): 清空集合中所有元素
boolean contains(Object o): 判断集合值中是否包含指定的元素
boolean isEmpty(): 判断集合中是否没有元素.有返回false 没有返回true 与null区分
int size(): 获取集合的长度(元素的数量)
Object[] toArray(): 将集合转换为Object[]数组
Iterator<E> iterator(): 获取集合的迭代器对象
```
* List 接口(有序的 可重复,有索引)
```
List list = new ArrayaList();
ListIterator lit = list.listIterator(): 获取List特有的迭代器对象
List: [lɪst], 有序单列集合的接口
void add(int index, E e): 添加元素到指定索引上
E remove(int index): 删除索引上的元素, 并返回
E set(int index, E e): 修改指定索引上的元素, 并返回被替换的元素
E get(int index): 获取指定索引上的元素
```
* LinkedList 实现类
```
ArrayList: [əˈreɪ][lɪst], 类(底层是数组, 查询快, 增删慢)
LinkedList: ['lɪŋkt][lɪst], 类(底层是链表, 查询慢, 增删快)
void addFirst(E e): 添加元素到集合的开头
void addLast(E e): 添加元素到集合的末尾
E getFirst(): 获取集合开头的元素
E getLast(): 获取集合末尾的元素
E removeFirst(): 删除开头的元素, 并返回
E removeLast(): 删除末尾的元素, 并返回
```
* Set: 无序单列集合的接口
```
boolean add(E e): 添加成功返回true; 添加失败(重复了)返回false
```
*
Map: [mæp], 双列集合的接口
* HashMap
```
V put(K key, V value)`: 添加/修改键值对,如有相同键,则覆盖其对应值,并返回被覆盖的值,没有则返回null
V get(Object key)`: 通过指定键获取值
int size()`: 获取集合长度
containsKey(Object key)`: 是否包含指定的键
containsValue(Object value)`: 是否包含指定的值
boolean isEmpty()`: 是否为空
void clear()`: 清空集合
V remove(Object key)`: 删除指定键的值(key和value都会删除)
Set<Map.Entry<K, V>> entrySet()`: 获取键值对的Set集合
Set<K> keySet()`: 获取所有键的Set集合
Collection<V> values()`: 获取所有值得Collection集合
```
*
Collections: [kəˈlekʃns], 操作单列集合的工具类
```
static int binarySearch(List list, T key)`: 使用二分查找来查找元素在指定列表的索引位置
static void copy(List dest, List src)`: 将源列表中的数据覆盖到目标列表
static void fill(List list, Object obj)`: 使用指定对象填充指定列表的所有元素
static void reverse(List list)`: 反转集合中的元素
static void shuffle(List list)`: 随机打乱集合中元素的顺序
static void sort(List list)`: 将集合中的元素按照元素的自然顺序排序
static void swap(List list, int i, int j)`: 将指定列表中的两个索引进行位置互换
```
*
Iterator 接口
```
Iterator: [ɪtə'reɪtə], 迭代器接口
boolean hasNext(): 判断是否有下一个元素
E next(): 获取下一个元素
void remove(): 删除迭代器返回的最后一个元素
```
* ListIterator接口
```
List list = new ArrayaList();
ListIterator lit = list.listIterator(): 获取List特有的迭代器对象
ListIterator: 用于List集合的迭代器接口
void add(E e): 使用迭代器添加元素到集合
void remove(): 使用迭代器删除元素
```
##集合体系结构
*
由于不同的数据结构(数据的储存方式),所以Java为我们提供了不同的集合
*
但是不同的集合功能相似,不断地向上抽取,将共性抽取出来,这就是集合体系结构形成的原因
*
体系结构
* 从最顶层开始学,因为顶层包含了所有共性
* 使用最底层,因为底层是具体的实现
##Collection(单列集合)
*
接口 不能实例化 需要创建子类对象来调用本类方法
*
`Collection<E> c = new ArrayList<>();`
##遍历集合
方式1:toArray() 转换数组再for循环遍历
方式2:iterator() 返回一个迭代器对象Iterator(可用来遍历集合)
方式3:foreach 增强for
##迭代器遍历集合
*
迭代器Iterator方法
```
boolean hasNext() 判断是否有元素可以获取
E next() 返回迭代的下一个元素。
注意:没有元素获取则出现 NoSuchElementException
```
*
遍历集合
```
Collection c= new ArrayList();
Iterator it = c.iterator();
while(it.hasNext()){
syso(it.next());
}
```
##并发修改异常
*
迭代器是依赖于,相当于集合的副本,当迭代器在操作时发现和集合不一样时则抛出异常
`ConcurrentModificationException`
*
避免以上异常 在迭代器进行遍历的时候,使用迭代器进行修改
```
List列表
//创建List对象l
List l = new ArrayList();
//创建ListIterator对象lit
ListIterator lit = l.ListIterator
//迭代时添加 此时同步集合;
lit.add();
```
##泛型的概述< E >
*
泛型出现的原因
* 由于集合可以储任何类型的对象,,当我们储存了不同类型的对象,就有可能在转型时出现转换类型异常
*
泛型
* 一种广泛的类型,把明确数据类型的工作提前到编译时期,借鉴数组的特点
*
泛型好处
* 避免了类型转换问题
* 可以减少黄色警告线
* 可以简化我们代码的书写
##增强for foreach
*
一般用于集合或者数组的遍历
*
格式
```
for(元素的类型 变量 : 集合或者数组对象){
//每次循环都会遍历出一个元素,,保存到变量名中
}
注意:在增强for循环使用中不能改变集合,否则会出现并发修改异常
ConcurrentModificationException
```
##栈&列队
*
栈
* 先进后出(弹夹)
*
队列
* 先进先出(单行道)
##List的特点
*
接口 不能创建对象 创建子类的对象
*
`List <E> l = new ArrayList<>();`
*
有整数索引
*
允许重复
*
有序的
##常见数据结构
*
数组 Array
* 特点
* 长度不可变
* 元素有对象应的整数索引
* 只能存储同一种数据类型
* 可以存基本数据类型,也可以存储引用数据类型
*
查找快,增删慢
##常见链表结构
*
链表 Link
* 由链子链接起来的一堆结点(火车箱)
* 结点: 地址值,值,下一个结点地址值
*
查找慢,增删快
##List的子类概述
*
ArrayList 底层数组结构
* 查询快,增删慢
*
LinkedList底层链表结构
* 查询慢,增删快
*
如果不确定什么操作多就用ArrayList
##Set的特点
*
接口 不能创建对象 创建子类的对象
*
`Set <E> s = new HashSet<>();`
*
无序(添加和读取顺序可能不一样)
*
不允许重复,元素唯一性
*
没有索引
##自定义对象去重
*
重写HashCoe()方法
*
重写equals()方法
*
快捷键生成
##Collections工具类
*
静态方法,类名调用
*
Collection 与 collections 的区别
* collection 单列集合体系的顶层,包含了所有集合的共性
* Collections 工具类,用来操作collection
##Map的特点(双列集合)
*
接口 不能创建对象 创建子类对象
*
`Map<K,V> m = new HashMap<>();`
*
将键映射到值得对象,每个键最多可以映射(对应)到一个值,
*
键不能重复,值可以
*
键时无序的
##可变参数
*
当参数数量不确定,类型要明确,
*
本质
* 长度可变的数组
*
格式
* 参数 数据类型...变量名
* `sum(int...arr)`
* 注意:后面不能追加参数
* 传值时可以多个,,也可以0个
```
List接口: 允许元素重复,记录先后添加顺序.
Set 接口: 不允许元素重复,不记录先后添加顺序.
需求: 不允许元素重复,但是需要保证先后添加的顺序.
LinkedHashSet:底层采用哈希表和链表算法.
哈希表:来保证唯一性,.此时就是HashSet,在哈希表中元素没有先后顺序.
链表:来记录元素的先后添加顺序.
```
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2