比较重要,面试会比较多
面试题:
统计相同单词出现的次数
例如:“Hello lily luvy hello lily mondat sunday sunday”
public class Test3 {
public static void main(String[] args) {
//统计每个代词出现的次数
ArrayList list = new ArrayList();
list.add("tom");
list.add("lily");
list.add("sam");
list.add("angela");
list.add("hello");
list.add("hello");
list.add("angela");
//map(单词,次数)
HashMap map = new HashMap<>();
for (int i = 0; i < list.size(); i++) {
//判断是否是第一次
if (map.containsKey(list.get(i))) {//不是第一次
int count = (int)map.get(list.get(i));
count++;
map.put(list.get(i), count);
}else {
map.put((String)(list.get(i)), 1);
}
}
//使用for循环
Set set = map.keySet();
for (Object object : set) {
System.out.println("键:"+object+"\t\t值:" +map.get(object));
}
//使用toString
System.out.println(map.toString());
}
}
list set 的区别:
主要内容:三个接口 list set map
list
主要学习List的两个实现类 ArrayList 和LinkedList。最重要的是ArrayList。
ArrayList 是一个集合,是一个长度可变的数组。
已经有了数组,为什么还需要ArrayList?
数组是放数据的
ArrayList也是放数据的
数组和ArrayList最大的区别是:数组是固定的,ArrayList的长度是不可变的。
定义数组要指明长度,ArrayList长度默认是10。不需要指定长度。
数组有很大的局限性,例如保存新闻条数,数组空间要多大??
用数组不好,容易造成空间不够用或者空间浪费。
学过ArrayList 之后,数组基本就退出舞台了。
如何使用?
数组 int[] nums = new int[10];
集合 ArrayList list = new ArrayList();
List中的元素可以重复,元素是有序的。 重点
元素有序:先添加的元素在前,后添加的元素在后。 重要
作业:
**回顾:**ArraayList 实现了List接口、是长度可变的数组,空间是连续的
api 默认提供了很多操作arrayList 的方法,这些方法可以去api 或者源码中看
方法学习思路:
- 熟练使用常用方法
- 了解大概还有哪些方法
- 需要使用不确定的时候,查API
ArrayList / linkedList / vector / HashSet / HashMap(hashtable)
LinkedList
用法跟ArrayList是一样的
LinkedList 和 ArrayList 相同点:
- 都实现了List 接口
- 常用方法基本一样
不同点:
-
底层结构
arrayList是空间连续的
linkedList 空间是不连续的,用的是链表
什么时候用arrayList?
查询和修改次数多
什么时候用linkedList?
删除和增加次数多 -
arrayList:查询和修改效率高,删除和新增效率低。
查询和修改效率高因为空间连续,减少了寻址的时间,删除和新增效率低因为涉及到元素的移动。
-
linkedList:查询和修改效率低,删除和新增效率高。
LinkedList 比 ArrayList 多出四种方法,以及用ArrayList如何实现如下:
LinkedList | ArrayList |
---|---|
addFirst():在几何中的第0个位置插入元素 | add(0,Object) |
addList():在集合的最后一个位置插入元素 | add() |
getFirst():获得集合的以一个元素 | get(0) |
getList():获得集合的最后一个元素 | get(list.size()-1) |
list 是做什么的??
- 临时存储数据、操作数据
Set
Set跟List是一样的
- 都是临时保存数据,操作数据的,但是两者还是又区别的。
区别:
List:是用来存放有序的,不唯一的元素
- 有序:先添加的元素默认在前
- 不唯一:同一个对象可以添加多次
Set:存放无序的,唯一的元素。
- 无序:先添加的元素不一定在前
- 唯一:同一个对象只能添加成功一次
Set接口的实现类是HashSet
遍历set集合:
什么时候用set?什么时候用list?
- 大部个情况下用list,如果明确规定元素不能重复,最好用set。因为set可以自动过滤重复元素。
遍历Set集合方法:
- foreach
- iterator 专门用于输出无序的
常用的是:ArrayList HashSet HashMap
最常用的:ArrayList HashMap
最最常用的:HashMap
HashSet 底层就是用的 HashMap
HashMap
是什么?
是一个集合框架
是干什么的?
临时存放数据的。
hashmap 跟 set 和 list 有什么区别?
-
hashmap 存放键值对,set 和 list 是存放的元素
-
向map 中添加元素,key是不能重复的;如果key重复,那么后面的value值会覆盖前面的value值
-
value值可以重复,key值不能重复。
hashmap为什么用hash()算法确定存放位置,而不是先来的放前面那,后来的放后面?
- 假设是按顺序存放和按顺序查找,假设元素有2000个,平均查找一个元素要查找(1+2000)/2 = 1000次。每次查找都需要时间
- 入伙用hash()算法,当去找一个元素的时候,先对key做hash(),除以容量取余数,得到下标,直接根据下表从hashmap中查找。
经过对比,发现第二种速度更快:而且数据量越大,差距就越大。
例子:假设查找一条记录 1毫秒 计算需要10毫秒,hashmap中保存2000条记录
- 1s
- 0.01s
泛型
在实例化list set hashmap 的时候。要指定存放数据类型
HashSet<Emplyee> set = new HashSet<>();
public void abc(T t); //具有通用性
推荐:
看官方文档
java 编程思想
数据结构
23种设计模式
大话设计模式(C#)
鲸书 龙书 虎书
误区:盲目追求高大上、追求各种高端的框架。