容器 collections + map

本文探讨了Java并发编程中的集合框架,从Vector到ConcurrentHashMap的发展,提到了不同集合在并发环境下的性能特点。重点介绍了CopyOnWriteArrayList和ConcurrentSkipListMap在读多写少场景下的优势,以及BlockQueue在多线程间的协同操作。同时,还讨论了阻塞队列的方法如offer、poll和put、take的使用。

collections + map

1. collections 包括 set list queue(为高并发 多线程准备put take)

安全 vector + hashtable 太重 自带锁   基本不用

hashtable(插入快 读慢)  hashMap Collections.synchronizedMap   concurrentHashMap(插入效率低  读效率高)   一路发展 。。升级

票超卖问题

vector

list   

Collections.synchronizedList(strs)

concurrentLinkedQueue (poll 拿取) 多线程

---------------------------------------------------------------------------------------

concurrentHashMap concurrentSkipListMap(跳表 高并发排序) 因为在treeMap中 cas操作 过于复杂所以 concurrentSkipListMap 替代 concurrentTreeMap

--------------------------------------------------

(读多写少)copyOnWriteArrayList / copyOnWriteSet 读的时候不加锁 效率高 写的时候加锁 写时复制

----------------------------------------------------------

blockQueue 阻塞队列

concurrentLinkedQueue

Queue 方法    offer  返回值   poll 取  remove掉  peek  取 不会remove      线程安全  原子性

blockQueue 阻塞队列 方法   put  take

### 关于 `map` 函数返回值与 `collections` 模块的关系 在 Python 中,`map` 是一种内置函数,用于将指定的函数应用到一个或多个可迭代对象中的每一个元素上,并返回一个新的迭代器[^2]。虽然 `map` 的返回值是一个迭代器而不是具体的集合类(如列表、元组等),但它可以通过进一步处理转换为其他数据结构。 #### `map` 函数返回值的特点 `map` 函数返回的是一个惰性求值的对象——即 `map object`,它本身并不是具体的数据容器,而是一种生成器形式的存在。这意味着只有当需要访问其中的内容时,才会真正执行映射操作并生成对应的值[^1]。 #### 将 `map` 结果转化为 `collections` 数据结构 Python 的 `collections` 模块提供了许多高级的数据结构实现方式,比如 `Counter`, `defaultdict`, 和 `ChainMap` 等。下面展示如何利用 `map` 函数配合这些工具来构建更复杂或者优化后的程序逻辑: ##### 使用 `map` 配合 `collections.Counter` 假设有一个字符串列表,想统计每个单词首字母出现次数的情况: ```python from collections import Counter words = ['apple', 'banana', 'avocado', 'blueberry'] first_letters = map(lambda word: word[0], words) # 提取每个词的第一个字符 letter_count = Counter(first_letters) print(letter_count) # 输出类似于:Counter({'a': 2, 'b': 2}) ``` 这里先用 `map()` 对原始序列做变换得到新的键流,再交给 `Counter` 来完成计数工作[^3]。 ##### 利用 `map` 创建默认字典 (`defaultdict`) 有时候我们需要初始化一些特殊类型的字典,在这种情况下就可以考虑使用 `defaultdict`: ```python from collections import defaultdict data_pairs = [('red', 1), ('blue', 2), ('red', 3)] grouped_data = defaultdict(list) for key, value in data_pairs: grouped_data[key].append(value) # 或者简化写法如下: grouped_data = defaultdict(list) list(map(grouped_data.__setitem__, *zip(*data_pairs))) print(dict(grouped_data)) # {'red': [1, 3], 'blue': [2]} ``` 上述例子展示了两种方法都可以达到相同效果,后者借助了 `map` 方法减少显式的循环语句。 #### 总结说明 尽管 `map` 不会直接创建属于 `collections` 下的具体实例化对象,但是它可以作为中间桥梁辅助构造那些复杂的自定义行为模式下的容器类型。通过巧妙组合两者功能特性,往往能写出更加简洁优雅且高效的解决方案出来[^1].
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值