7.24-25 集合

在这里插入图片描述

比较重要,面试会比较多

面试题:
统计相同单词出现的次数
例如:“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 或者源码中看

方法学习思路:

  1. 熟练使用常用方法
  2. 了解大概还有哪些方法
  3. 需要使用不确定的时候,查API

ArrayList / linkedList / vector / HashSet / HashMap(hashtable)

在这里插入图片描述
在这里插入图片描述

LinkedList

用法跟ArrayList是一样的

LinkedList 和 ArrayList 相同点

  1. 都实现了List 接口
  2. 常用方法基本一样

不同点

  • 底层结构
    arrayList是空间连续的
    linkedList 空间是不连续的,用的是链表
    什么时候用arrayList?
    查询和修改次数多
    什么时候用linkedList?
    删除和增加次数多

  • arrayList:查询和修改效率高,删除和新增效率低。

    查询和修改效率高因为空间连续,减少了寻址的时间,删除和新增效率低因为涉及到元素的移动。
    
  • linkedList:查询和修改效率低,删除和新增效率高。
    在这里插入图片描述

LinkedList 比 ArrayList 多出四种方法,以及用ArrayList如何实现如下

LinkedListArrayList
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集合方法

  1. foreach
  2. 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()算法确定存放位置,而不是先来的放前面那,后来的放后面?

  1. 假设是按顺序存放和按顺序查找,假设元素有2000个,平均查找一个元素要查找(1+2000)/2 = 1000次。每次查找都需要时间
  2. 入伙用hash()算法,当去找一个元素的时候,先对key做hash(),除以容量取余数,得到下标,直接根据下表从hashmap中查找。

经过对比,发现第二种速度更快:而且数据量越大,差距就越大。

例子:假设查找一条记录 1毫秒 计算需要10毫秒,hashmap中保存2000条记录

  1. 1s
  2. 0.01s

泛型

在实例化list set hashmap 的时候。要指定存放数据类型

HashSet<Emplyee> set = new HashSet<>();
public void abc(T t); //具有通用性

推荐:
看官方文档
java 编程思想
数据结构
23种设计模式
大话设计模式(C#)
鲸书 龙书 虎书

误区:盲目追求高大上、追求各种高端的框架。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值