java学习笔记(集合框架)
一、集合的由来和数组的区别
集合的由来:为了方便多个对象的操作,所以有了集合;而要存储多个对象,就不能是一个基本变量,而应该是一个容器类型的变量,对象数组不能使用变化的的需求,因为他长度固定;
区别:A、长度区别:数组固定 集合可变
B、内容不同:数组存储的是同一类型 集合可以存储不同类型
C、元素的数据类型:数组可以存储基本数据类型 集合只能存储引用类型
二、Collection的功能概述:
1:添加 boolean add(E e):添加一个元素
boolean addAll(Collection c):添加一个集合的元素
2:删除 void clear():移除所有元素
boolean remove(E e)
boolean removeAll(Collection c)有一个被移除就返回true
3:修改 boolean contains(E e)判断是否包含指定元素
boolean containsAll(Collection c):判断是否包含指定集合元素 包含所有返回true
boolean isEmpty()判断是否为空
4:获取
Iterator<E> iterator()
5:长度
int size():元素个数
6:交集
boolean retainAll(Collection c) 交集返回至调用该方法的集合,返回的布尔值表示调用方法的集合是否发生改变
7:toArray() 返回数组,可以遍历
8:Iterator 迭代器
next() hasNext() remove()
通过集合获取迭代器对象(可理解为原来集合的一个复制)
三、List
特点:有序(存取有序),可重复
功能:
A、添加
void add(int index,E element)在指定位置添加 可在最后一个元素索引加1处添加
B、获取
Object get(int index) 获得指定那个索引元素
C、listIterator()列表迭代器 继承了Iterator
可以实现逆向遍历,但是需要先正向遍历
D、删除
E remove(int index)根据索引删除,返回被修改元素
E、修改
E set(int index ,Element e)修改索引元素,返回被修改
*****并发修改异常:产生原因:迭代器依赖集合存在,在判断成功后,集合中新添加了元素,而迭代器不知道,就报错了;即迭代器遍历过程中,集合不能修改元素;
解决:A、迭代器遍历,迭代器修改,元素跟在刚才迭代元素后面;普通迭代器Iterator没有add方法
B、集合遍历,集合修改
---------子类特点:
ArrayList:底层数据结构是数组,查询快,增删慢
线程不安全,效率高
Vector:底层数据结构是数组,查询快,增删慢
线程安全,效率低
LinkedList:底层数据结构是链表,查询慢,增删块
线程不安全,效率高
功能:有对第一个和最后一个元素操作的功能,包括增删查
四、数组: 查询快、增删慢
链表:增删块、查询慢
五、泛型
一种把类型明确的工作推迟到创建对象活着调用方法的时候才明确的特殊的类型
好处:把运行时的问题提前到了编译
避免了强制类型转换
优化了程序设计,解决了黄色警告线
1、 泛型类型必须是引用类型
2 、泛型方法 public <T> void fun(T t){}
3、 通配符:
?:表示任意类型都可以
?extends E:E及其子类
? super E:E及其父类
六、for-each:目标不能为null,使用前要先判断是否为null;
七、Arrays.asList:数组转换为集合; 虽然可转成集合,但是长度不能改变
八、Set集合概述及特点
十一、Map集合
最大特点:它可以存储键值对的元素,键值是唯一的;
Map和Collection集合的区别:
Map是双列的,Collection是单列的
Map的键唯一,Collection的子体系Set唯一
Map集合的数据结构值针对键有效,跟值无关,Collection的数据结构是针对元素有效
Map集合功能:
1:添加:
V put(K key,V value):添加元素,如果key不存在,直接添加,返回null,如果key存在,value替换,返回原value
2:删除:
void clear():移除所有的键值对元素
V remove(Object key):根据键删除键值对元素,并把值返回
3:判断:
boolean isEmpty()判断集合是否为空
boolean containsKey(Object key)判断集合是否包含指定的键
boolean containsValue(Object Value)判断集合是否包含指定的值
4:获取:
V get(Object key)根据键取值
Set<K>keySet()获取集合中所有键的集合
Set<Map.Entry<K,V>> entrySet 获取集合中键值对对象的集合
Collection<V> values()获取所有值的集合
5:长度:
int size():返回集合中键值对的对数
------Map集合的遍历:
A:键→值
1、获取所有的键
2、遍历键的集合
3、根据键去找值
B:
1、获取所有键值对对象
2、遍历键值对对象的集合,得到每一个键值对对象 entrySet方法 getKey();getValue()
3、根据键值对对象获取键和值
十二、HashMap:基于哈希表的Map接口实现
哈希表用于保证键的唯一性
十三、LinkedHashMap:是Map接口的哈希表和链表实现,具有可预知的迭代顺序,链表表示有序(存储和取出)
十四、TreeMap:基于红黑树的Map接口的实现
十五、HashMap和Hashtable的区别:HashMap线程不安全,效率低,不同步,允许null存在;
十六、Collections工具类(针对集合操作,都是静态方法,类似Arrays)
Collections和Collection的区别,前者是工具类,有排序和二分查找等方法,后者是单列集合顶层接口,有子接口List和Set
public static <T> void sort(List<T> list):排序:默认自认排序
public static <T> void sort(List<T> list,Comparator<T> c):比较器排序
public static void shuffle(List <?> list)随机置换