集合
1.概述:
1.1概念:
对象的容器,定义了多个对对象进行操作的常用方法,可实现数组的功能。
1.2集合与数组的区别:
- 数组长度不可变,集合大小可以动态变化
- 数组中可以存放引用数据类型和基本数据类型,集合中只能存储引用数据类型(可以通过装箱操作将基本数据类型包装成引用数据类型存放在集合中)
2.Collection
2.1collection父接口
2.1.1特点:
代表一组任意类型的对象,无序,无下标,不能重复
2.1.2常用方法:
- boolean add(Object obj):添加一个对象
- boolean addAll(Collection c):将一个集合中的所有对象添加到此集合中
- void clear():清空当前集合中的所有对象
- boolean contains(Object obj):检查此集合中是否包含某个特定的对象obj
- boolean equals(Object obj):判断该集合是否与指定对象相等
- boolean isEmpty():判断该集合是否为空
- boolean remove(Object obj):从此集合中移除某个特定的对象obj
- boolean removeAll(Collection c):移除两集合的交集
- int size():该集合的大小
- Object[] toArray():将该集合转换成数组
List集合在没有向其中添加元素的时候,容量为0,在向其中添加了元素之后,如果没有超过默认容量10,那么它的容量就是10,大于10的话会按照1.5倍进行扩容,因为他有一个newsize = (oldsize>>2)+oldsize
hashSet的底层是通过hashMap来实现的
treeSet的底层是用treeMap来实现的
2.1.3迭代器(Iterator接口)
注意:在使用迭代器对元素进行遍历的时候,不能使用collection的remove只能使用Ierator的remove方法,不然会出现并发删除异常
Map
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class TestMap {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
//向map中存放元素的时候是乱序的
map.put("name","lkw");
map.put("age","19");
map.put("sex","male");
System.out.println(map.size());
System.out.println(map);
System.out.println("遍历集合元素");
//方法1:使用KeySet
Set<String> keys = map.keySet();
for(String key : keys){
System.out.println(key+"----"+map.get(key));
}
//方法2:使用entrySet
Set<Map.Entry<String,String>> maps = map.entrySet();
for(Map.Entry<String,String> map1 : maps){
System.out.println(map1);
}
}
}
hashMap的默认容量是16,默认加载因子是0.75,就是当map集合中的元素个数大于默认容量的75%,就会进行一次扩容,在没有添加元素的时候,大小也为0
hashTable 的默认默认初始容量为11,默认加载因子也是0.75
hashmap中底层是通过数组加链表的形式进行存储数据的,当数组链表的长度大于8并且数组长度大于等于64的时候,就会自动转换成红黑树的结构,当红黑树的长度小于6的时候,就又转换成链表的结构
在向map中添加元素的时候,如果键一样,那么后添加进来的键对应的值就会覆盖掉前一个键对应的值
TreeSet和TreeMap在对象进行比较的时候,必须对象必须实现Comparable接口或者在创建集合的时候添加比较器(Lambda表达式)