1.单列集合
Collection
1.1 单列集合的两大派系
List:有序,可重复的
ArrayList 数组--> 查询快(有索引),底层连续,增删慢,数组长度不可变
LinkedList 双向链表 --> 查询慢,增删快
Set:无索引,不可重复
LinkedHashSet :有序,不可重复的集合
HashSet:底层哈希表 1.7 数组+ 链表 1.8 数组+链表+红黑树
HashSet:中无法存储重复元素的原因:(重点,菜J杀手)
1.调用HashCode 方法 --> 如果hashCode 元素的索引位置上有元素
有元素 :调eqauls
1.相等:不存
2.不相等:挂
没元素:放
TreeSet:
底层可以排序的不可重复的set 集合
自然排序和比较器排序 --> 左中右原则
1.2 为什么需要有迭代器这个东西 :编程思想:屏蔽底层不同
但是在迭代过程中,如果利用集合去修改集合长度,此时会发生并发修改异常
简单版:解决方案(listIterator)
复杂版: 底层有期望值和修改值 当调用了迭代方法后,那么就会进行期望值=修改值,
而在此过程中,如果使用集合修改了长度,修改值发生变化,所以发生了并发修改异常
2.双列集合
Map 底层是哈希表
无序的--> 存進去的顺序和取出来的顺序不一致
Map的key 是不能重复,Map 的value 无所谓
map中常见的方法
遍历
Map<String,String> hm = new HashMap();
Set<String> keySet = hm.keySet();
for(String key : keySet){
int value = hm.get(key)
}
遍历的第二种方式
Set<Map.Entry<String,String>> entrySet = hm.entrySet();
for( Map.Entry<String,String> entry : entrySet){
entry.getKey();
entry.getValue();
}
1.arrayList 中有HashMap
2.HashMap有 arrayList |
|