2022-8-6 第一小组 甘源册 学习笔记
目录
知识点掌握情况
List集合(理解) Set集合(了解) 比较接口(了解)Map接口(理解)
集合的遍历(了解)并发问题(了解)
学习心情
今天的学习的知识点掌握起来很轻松,没什么难点,很不错
1.List集合
- ArrayList:内部结构是数组
- 数据是有顺序(添加的先后顺序)的,数据可以重复
- 比较适合做高频率的查找,遍历。
1.1 LinkedList集合
- 双向链表
- 比较适合做高频率的新增和删除
2.Set集合
- Set其实是有顺序的,内部有一个专门的排序算法
- 无序不等于随机。
- 无序是指没有按照添加的先后顺序,其实内部是做了排序的。
- Set集合如何确保数据不重复
- 保证数据类型的类要重写hashCode和equals方法。
- LinkedHashSet:在添加数据的同时维护数据的先后顺序。
- 操作数据的效率率低于HashSet
2.1 TreeSet集合
- 默认排序
- Integer:从大到小排序
- String:ASCI码排序
- 排序规则——你要排序的对象的类必须实现Comparable接口
3.比较接口
-
Comparable:自然排序,排序规则是固定的
-
Comparator:临时排序
-
ArrayList<Person> people = new ArrayList<>(); people.add(new Person("大神",12222)); people.add(new Person("三大",122)); people.add(new Person("方式",1222)); people.sort((o1,o2)->{ if (o1.getId()<o2.getId()){ return -1; } if (o1.getId().equals(o2.getId())){ return 0; } return 1; }); // 结果: [Person{name='三大', id=122}, Person{name='方式', id=1222}, Person{name='大神', id=12222}]
-
4.Map接口
- 存储对值的K-V;key-value
- key不能重复,value是可以重复的
- 没有添加的先后顺序
4.1 HashMap
- 内部存储结构:
- JDK1.7之前:链表+二叉树
- JDK1.8及之后:链表+数组+红黑树
- HashMap面试上90%会问你原理
- LinkedHashMap
- 双向链表
4.2 Properties
- 属性
- Hashtable的子类,更多的是用来操作properties文件
5.集合的遍历
5.1List集合的遍历
-
for循环
-
for (int i = 0; i < list.size(); i++) { }
-
-
增强for循环
-
for (String s : list) { }
-
-
迭代器
-
// 生成Iterator类型的对象 Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { String next = iterator.next(); System.out.println(next); }
-
-
// list删除元素的问题解决办法: // 1.指针回调 // 2.逆序删除 // 3.使用迭代器----推荐
5.2Set集合的遍历
-
增强for循环
-
for (String s : set) { System.out.println(s); }
-
-
迭代器
-
Iterator<String> iterator = list.iterator(); while (iterator.hasNext()) { System.out.println(iterator.next()); }
-
5.3Map集合的遍历
-
增强for
-
// 先遍历key,根据key拿value Set<String> strings = map.keySet(); for (String string : strings) { System.out.println(string+"->"+map.get(string)); } -
// 用entrySet方法---增强for循环 Set<Map.Entry<String, String>> entries = map.entrySet(); for (Map.Entry<String, String> entry : entries) { // getKey 拿key getValue 拿value System.out.println(entry.getKey()+entry.getValue()); }
-
-
迭代器
-
Set<Map.Entry<String, String>> entries = map.entrySet(); Iterator<Map.Entry<String, String>> iterator = entries.iterator(); while (iterator.hasNext()) { Map.Entry<String, String> next = iterator.next(); System.out.println(next.getKey()+"+"+next.getValue()); }
-
-
其他的集合
- LinkedHashMap:在HashMap的基础上维护了一个双链表。
6.线程安全问题
- 迭代器是依赖于集合而存在的,在判断成功以后,集合中新增了元素,迭代器不知道,所以报错
- 解决
- 迭代器遍历元素,迭代器删除元素
- 普通for循环,集合删除
总结
- 集合需要掌握:
- 如何创建需要的集合。——多态
- 主要用到的是List和Map
- 各种区别?——必须知道
- 各种集合方法(API)的调用
- 两个比较接口
- 各种集合的特点【从接口到实现类层面】——必须知道
- 重点集合的内部结构——【ArrayList,HashSet,HashMap(两个)】
- 各种集合的遍历
- 线程并发问题——面试题
- 最重要的集合
- ArrayList
- 方法:add,remove,get
- HashMap
- 方法,put
- ArrayList
面试题:
- Collection和map接口的区别
- ArrayList和LinkedList的区别
- ArrayList内部结构是数组
- LinkedList内部结构是双向链表
- ArrayList和Vector的区别
- 和ArrayList几乎一模一样
- ArrayList是线程异步,线程不安全
- Vector是线程同步的,线程是安全
- List和Set的区别
- List:有顺序,元素可以重复,顺序指的是添加的先后顺序
- Set,没有顺序,元素不可以重复,顺序指的是添加的先后顺序
- HashSet与LinkedHashSet的区别和联系
- 联系:LinkedHashSet是HashSet的子类
- 区别:LinkedHashSet有添加顺序;HashSet没有添加顺序
- HashMap与Hashtable的区别
- 几乎一模一样
- HashMap:是线程异步,线程不安全;Hashtable:是线程同步,线程安全
- HashMap的key【键】可以为空,Hashtable的key【键】是不可以为空


浙公网安备 33010602011771号