对 Java 集合的巧妙利用
对 Java 集合的巧妙利用
我们直接切入正题。首先大致介绍一下 Java 三大集合的一些特征:
①、ArrayList:底层采用数组结构,里面添加的元素有序可以重复。
②、HashSet:底层采用哈希表算法,里面添加的元素无序不可重复。
③、HashMap:底层也是采用哈希表算法,但是里面添加的元素是 key-value 的形式。key 不允许重复,value 可以。
那么我们在日常编程中就可以好好利用这些集合的原理,简化我们的编程思路。
一、如何统计一字符串中每个字符出现的次数?
解析:给定一串字符串,统计每个字符出现的次数。那么最后统计出来的格式应该如下:
a---num个
b---num个
...
j---num个等等
很明显,这种格式首先第一个统计的字符是不能重复的,而出现的个数我们可以不用管。那么很容易联想到 Map 的集合原理,key-value。我们将统计的字符放在 Map<Character,Integer>中是一种很好的实现方式。
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
|
public class CountCharTest {
public static Map<Character, Integer> countChar(Map<Character, Integer> map,String str){
//将所给的字符串解析为一个字符构造的数组
char [] chars = str.toCharArray();
for ( char c : chars){
if (map.containsKey(c)){
int oldCount = map.get(c);
map.put(c, oldCount+ 1 );
} else {
map.put(c, 1 );
}
}
return map;
}
public static void main(String[] args) {
String str = "afoiasfoffqefljflsda" ;
//定义一个 Map 集合,用来存放统计的 字符--个数
Map<Character, Integer> hashMap = new HashMap<>();
System.out.println(countChar(hashMap,str));
//{f=6, d=1, e=1, s=2, q=1, a=3, o=2, l=2, j=1, i=1}
}
}
|
补充:这里我们用来保存统计字符的是 HashMap 的实现类,这里打印出来的字符统计是无序的。如果我们想根据字符串给定的顺序有序的统计出来,可以使 LinkedHashMap
1
2
3
4
5
6
7
|
public static void main(String[] args) {
String str = "afoiasfoffqefljflsda" ;
//定义一个 Map 集合,用来存放统计的 字符--个数
Map<Character, Integer> linkedHashMap = new LinkedHashMap<>();
System.out.println(countChar(linkedHashMap,str));
//{a=3, f=6, o=2, i=1, s=2, q=1, e=1, l=2, j=1, d=1}
}
|
如果想用 uicode 的编码顺序打印给定的字符串,那么我们使用 TreeMap
1
2
3
4
5
6
7
|
public static void main(String[] args) {
String str = "afoiasfoffqefljflsda" ;
//定义一个 Map 集合,用来存放统计的 字符--个数
Map<Character, Integer> treeMap = new TreeMap<>();
System.out.println(countChar(treeMap,str));
//{a=3, d=1, e=1, f=6, i=1, j=1, l=2, o=2, q=1, s=2}
}
|
二、给定一个数组,如何去掉重复的数据?
解析:这个联想到集合的特定,我们就很容易想到用 Set 集合来解决。将数组中的元素都放到Set,然后将 Set 集合转变为数组就可以了。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
public class ClearRepeatTest {
public static Integer[] clearRepeat( int [] array){
Set<Integer> set = new HashSet<>();
for ( int i : array){
set.add(i);
}
Integer[] newArray = set.toArray( new Integer[set.size()]);
return newArray;
}
public static void main(String[] args) {
//创建一个数组,可以看出 2和4 是重复的
int [] array = { 1 , 2 , 3 , 4 , 8 , 2 , 5 , 4 };
Integer[] newArray = clearRepeat(array);
for (Integer i : newArray){
System.out.println(i);
}
//1 2 3 4 5 8
}
}
|
补充:同理我们可以 改变 Set 集合的实现类,hashSet 是无序的,我们可以会用 LinkedHashSet 保证既定顺序;TreeSet 保证自然顺序
转载于:https://www.cnblogs.com/123hll/p/6903344.html
对 Java 集合的巧妙利用相关推荐
- java集合源码分析
List,Set,Map都是接口,前两个继承Collection接口,Map为独立接口 Set的实现由HashSet,LinkedHashSet,TreeSet List下有ArrayList,Vec ...
- 利用java集合框架实现扑克牌比大小游戏
程序实现前提: 1.了解java集合框架 2.Collections工具类 3.Comparable,Comparator接口 游戏要求: 游戏有两个玩家,分别会得到两张纸牌,然后进行比较大小,拿到纸 ...
- java集合系列之18 spring boot程序员的必修课
Spring Boot 2.0 的推出又激起了一阵学习 Spring Boot 热,就单从我个人的博客的访问量大幅增加就可以感受到大家对学习 Spring Boot 的热情,那么在这么多人热衷于学习 ...
- Java集合排序及java集合类详解
Java集合排序及java集合类详解 (Collection, List, Set, Map) 摘要内容 集合是Java里面最常用的,也是最重要的一部分.能够用好集合和理解好集合对于做Java程序的开 ...
- 史上最全的集合框架讲解 ----- Java 集合框架(3)---- Map 相关类最全解析
引言 好了,步入正题,上篇文章Java 集合框架(2)---- List 相关类解析中我们一起看了一下 List 接口的相关具体类(ArrayList.LinkedList-.),这篇开始我们开始探索 ...
- Java集合包含面试题
Java集合 Java 所有的集合类都位于 java.util 包下 集合类和数组不一样,数组元素既可以是基本类型的值,也可以是对象(实际上保存的是对象的引用变量),而集合里只能保存对象(实际上只是保 ...
- Java 集合框架系列,总结性全文,解决你所有困惑
文章目录 集合接口 Collection Map 集合实现类 抽象类实现 通用实现 遗留实现 并发实现 特殊实现 适配器实现 包装器实现 便利实现 基础设施 算法和工具实现 定长/变长 可改/不可改 ...
- 问遍了身边的面试官朋友,我整理出这份 Java 集合高频面试题(2022年最新版)
微信搜索[程序员囧辉],关注这个坚持分享技术干货的程序员. 我的最新文章:百万级QPS,支撑淘宝双11商品浏览需要哪些技术 前言 大家好,我是囧辉,面试系列开篇:Java 基础高频面试题(2021年最 ...
- java集合总结_Java中集合总结
Java数组的长度是固定的,为了使程序能够方便地存储和操作数目不固定的一组数据,JDK类库提供了Java集合,这些集合类都位于java.util包中,但是与数组不同的是,集合中不能存放基本类型数据,而 ...
最新文章
- stream map方法_Java Stream中map和flatMap方法
- (21)页目录表,页表基址(XP系统 10-10-12分页模式)
- WCF热带鱼书学习手记 - Service Contract Overload
- linux+eth0+流量监控,linux流量监控脚本 | 旺旺知识库
- OPCDA通信--工作在透明模式下的CISCO ASA 5506-X防火墙配置
- .net解析传过来的xml_隧桥管廊BIM+GIS运维管理系统方案解析
- mysql主从复制-主库已有数据
- spring boot + swagger2
- 名字作诗,增添你的印象分
- 硬件和软件的32位与64位区别
- Hive误删除后,如何恢复数据
- java中poi搜索工程_爬取高德地图poi数据
- flutter学习笔记--传递信息
- 解决html5直播延迟大问题,SRS 直播系统使用中发现延迟过大
- uber奖励和账单详解
- 华硕h110m主板怎么样_华硕台式机主板怎么样 华硕台式机主板多少钱【详细介绍】...
- 基于射频RFID智能刷卡门禁系统设计(毕设课设)
- 人体姿态估计——PBN
- AD7799称重系统
- 抖音提取封面php,抖音解析php API现在能解析出图片视频不行了
热门文章
- AttributeError: module 'tensorflow' has no attribute 'sub'
- jvm内置锁synchronized不能被中断
- centos6系列版本防火墙图形化设置
- [BZOJ1097][POI2007]旅游景点atr
- ZED 相机 ORB-SLAM2安装环境配置与ROS下的调试
- ThinkPHP集成万象优图
- 内存管理之slab分配器
- Unity3D Editor 扩展
- (032) Linux之shell流控制for循环
- Android 4.1最终版SDK和ADT Plugin全线发布