第12章:随堂复习与企业真题(集合框架)
第12章:随堂复习与企业真题(集合框架)
一、随堂复习
1. 数组存储数据方面的特点和弊端
1 | 数组存储多个数据方面的特点: |
2. 集合框架概述
1 | java.util.Collection:存储一个一个的数据 |
1 | 学习的程度把握: |
3. Collection的常用方法
3.1 常用方法
1 | add(Object obj) |
1 | 向Collection中添加元素的要求: |
1 | 集合与数组的相互转换: |
3.2 迭代器接口
- 设计模式的一种
- 迭代器不负责数据的存储;负责对集合类的遍历
1 | 1. 如何获取迭代器(Iterator)对象? |
4. Collection的子接口:List
- 常用方法
1 | 小结: |
1 | List及其实现类特点 |
5. Collection的子接口:Set
- Set中的常用的方法都是Collection中声明的方法,没有新增的方法
- 常见的实现类的对比
1 | java.util.Collection:存储一个一个的数据 |
- 难点: Set中无序性、不可重复性的理解(以HashSet及其子类为例说明)
1 | >无序性: != 随机性。 |
1 | 添加到HashSet/LinkedHashSet中元素的要求: |
- 了解TreeSet的使用
6. Map接口
- 常用的方法
1 | 增: |
- 常用的实现类
1 | java.util.Map:存储一对一对的数据(key-value键值对,(x1,y1)、(x2,y2) --> y=f(x),类似于高中的函数) |
1 | HashMap中元素的特点: |
(了解)TreeMap的使用
(重要)Properties的使用
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30public class PropertiesTest {
public void test() throws IOException { //注意:因为设计到流的操作,为了确保流能关闭,建议使用try-catch-finally
//方式1:数据和代码耦合度高;如果修改的话,需要重写的编译代码、打包发布,繁琐
//数据
// String name = "Tom";
// String password = "abc123";
//代码:用于操作name,password
//...
//方式2:将数据封装到具体的配置文件中,在程序中读取配置文件中的信息。实现了
//数据和代码的解耦;由于我们没有修改代码,就省去了重新编译和打包的过程。
File file = new File("info.properties"); //注意,要提前创建好
// System.out.println(file.getAbsolutePath());
FileInputStream fis = new FileInputStream(file);
Properties pros = new Properties();
pros.load(fis); //加载流中的文件中的数据
//读取数据
String name = pros.getProperty("name");
String pwd = pros.getProperty("password");
System.out.println(name + ":" + pwd);
fis.close();
}
}
7. Collections工具类的使用
1 | 区分Collection 和 Collections |
- 熟悉常用的Collections中的方法即可。
二、企业真题
2.1 集合概述
1. List,Set,Map是否继承自collection接口?(北京中*译咨询、思*贸易)
Map不是。
2. 说说List,Set,Map三者的区别(民*银行)
1 | 类似问题: |
略
3. 写出list、map、set接口的实现类,并说出其特点(华**为)
1 | 类似问题: |
略
4. 常见集合类的区别和适用场景(饿**)
略
5. 集合的父类是谁?哪些安全的?(北京中**信)
略。 不安全:ArrayList、HashMap、HashSet ; 安全:Vector、Hashtable
6. 集合说一下哪些是线程不安全的(*科软)
略
7. 遍历集合的方式有哪些?(恒*电子)
迭代器Iterator用来遍历Collection,不能用来遍历Map!
增强for
一般的for:可以用来遍历List
2.2 List接口
1. List下面有哪些实现(软**力)
略
2. ArrayList与LinkedList区别?(O**O、滴*、汇*天下、拓*软件、博纳**软件、上海*进天下,北京永生**信息、*联、在*途游)
1 | 类似问题: |
略。 补充上第14章中的源码(底层的数据结构)
3. ArrayList与Vector区别呢?为什么要用ArrayList取代Vector呢?(湖**利软件)
Vector效率低。
4. Java.util.ArrayList常用的方法有哪些?(华**为)
略
5. Arraylist 是有序还是无序?为什么?(蜜*信息)
有序;底层使用数组:Object[]
2.3 Set接口
1. Set集合有哪些实现类,分别有什么特点?(拓*软件)
1 | 类似问题: |
略
2. List集合和Set集合的区别?(亚*科技、*海*翼科技,*华电*系统,达*贷)
略
3. Set里的元素是不能重复的,那么用什么方法来区分重复与否呢? 是用==还是equals()? 它们有何区别?(鸿*网络)
1 | 类似问题: |
hashCode() 、 equals()
4. TreeSet两种排序方式在使用的时候怎么起作用?(拓*软件)
在添加新的元素时,需要调用compareTo() 或 compare()
5. TreeSet的数据结构(*米)
红黑树
2.4 Map接口
1. 说一下Java的集合Map有哪些Map?(奥*医药)
略
2. final怎么用,修饰Map可以继续添加数据吗?(*深蓝)
final HashMap map = new HashMap();
map.put(“AA”,123);
可以!
3. Set和Map的比较(亚*科技)
HashSet底层就是HashMap
LinkedHashSet底层就是LinkedHashMap
TreeSet底层就是TreeMap
4. HashMap说一下,线程安全吗?(*米)
1 | 类似问题: |
不安全
5. HashMap和Hashbable的区别?(银*数据、阿**巴芝麻信用、*众银行、爱*信、杭州*智公司)
1 | 类似问题: |
略
6. Hashtable是怎么实现的,为什么线程安全?(迪*创新)
数组+单向链表;底层方法使用synchronized修饰
7. HashMap和LinkedHashMap的区别(北京*晨阳光)
略。
8. HashMap 和 TreeMap 的区别(*度,太极**、*线途游、阿*校招)
底层的数据结构截然不同。
9. HashMap里面实际装的是什么?(惠*)
JDK7:HashMap内部声明了Entry,实现了Map中的Entry接口。(key,value作为Entry的两个属性出现)
JDK8:HashMap内部声明了Node,实现了Map中的Entry接口。(key,value作为Node的两个属性出现)
10. HashMap的key存储在哪里?和value存储在一起吗?那么value存储在哪里?说具体点?(湖**利软件、天*伟业)
数组+链表+红黑树。 key、value作为Node的属性出现
11. 自定义类型可以作为Key么?(阿*)
可以! 要重写hashCode() 和equals()
Collections
1. 集合类的工具类是谁?用过工具类哪些方法?(顺*)
Collections。略
2. Collection 和 Collections的区别?(平*金服、*软)
略
3. ArrayList 如何实现排序(阿*)
Collections.sort(list) 或 Collections.sort(list,comparator)
4. HashMap是否线程安全,怎样解决HashMap的线程不安全(中*卫星)
1 | 类似问题: |
略