`

Java实现将一个字符串转换成无重复的有序列表

阅读更多

        将一个字符串转换成无重复的有序列表,方法很多,但步骤应该主要就是先转换成String数组,再去重,最后转换成有序列表。

        而其实每步都有很多种方式,如去重可以直接用for循环,也可以用hashSet,当然如果用treeSet去重并排序,一步到位实现了,代码相当简洁。

String[] strs = str.split(",");
List<String> arlList = Arrays.asList(strs);
TreeSet treeSet = new TreeSet(arlList);
System.out.println(treeSet);

        当然,如果treeSet默认排序达不到要求,可以实现compare方法,实现排序逻辑。实例代码如下所示:

package com.bijian.study;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import java.util.TreeSet;

/**
 * 用Java集合实现将一个字符串转换成无重复的有序列表
 * 1.采用分隔符将字符串转换成String数组
 * 2.去重
 * 	a.treeSet去重并排序(一步到位),如果默认排序达不到要求,可以实现compare方法,实现排序逻辑
 *  b.hashSet去重
 * 3.转换成有序列表,用Collections.sort排序
 */
public class CollectionDemo {

	private final static String str = "张三,李四,王五,张三,李国中,陈小小,李新大,王五,王五,刘大姐,bijian,zhangshan,lisi";
	
	
	public static void processMethod0() {
		String[] strs = str.split(",");
		List<String> arlList = Arrays.asList(strs);
		TreeSet treeSet = new TreeSet(arlList);
		System.out.println(treeSet);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]
	}
	
	public static void processMethod1() {
		String[] strs = str.split(",");
		List<String> arlList = Arrays.asList(strs);
		//TreeSet treeSet = new TreeSet(arlList);
		TreeSet<String> treeSet = new TreeSet<String>(arlList){
			public int compare(String str1, String str2) {
				return str1.compareTo(str2);
			}
		};
		
		List<String> resList = new ArrayList<String>();
		resList.addAll(treeSet);
		System.out.println(resList);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]
	}
	
	public static void processMethod2() {
		String[] strs = str.split(",");
		List<String> arlList = Arrays.asList(strs);
		Set<String> hashSet = new HashSet<String>(arlList);
		/* 将Set集合转为List,这样获得的list并不能有序排列*/
		List<String> resList = new ArrayList<String>(hashSet);
		
		/*将list有序排列*/
		Collections.sort(resList, new Comparator<String>() {
			public int compare(String str1, String str2) {
				return str1.compareTo(str2);
			}
		});
		
		System.out.println(resList);//[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]
	}
	
	public static void main(String[] args) {
		
		System.out.println("processMethod0:");
		processMethod0();
		
		System.out.println("processMethod1:");
		processMethod1();
		
		System.out.println("processMethod2:");
		processMethod2();
	}
}

运行结果:

processMethod0:
[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]
processMethod1:
[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]
processMethod2:
[bijian, lisi, zhangshan, 刘大姐, 张三, 李四, 李国中, 李新大, 王五, 陈小小]

 

0
3
分享到:
评论

相关推荐

    java面试题

    答:String是不可变的对象,每次对String类型进行改变都相当于产生了一个新的对象,StringBuffer是可变的字符序列,所以如果要经常改变某个字符串的话建议使用StringBuffer。 list、set、map问题? 答:set 不允许...

    oracle学习文档 笔记 全面 深刻 详细 通俗易懂 doc word格式 清晰 连接字符串

    角色是一组权限的集合,将角色赋给一个用户,这个用户就拥有了这个角色中的所有权限。  系统预定义角色 预定义角色是在数据库安装后,系统自动创建的一些常用的角色。下面我们就简单介绍些系统角色:  CONNECT...

    leetcode双人赛-leetcodeSolution:Leetcode一站式解决方案(JAVA版,持续更新)

    leetcode双人赛Java 中的 Leetcode 解决方案 1 二和 2 两个数相加 3 无重复字符的最长子串 4 两个有序数组的中位数 5 最长回文子串 6 之字形转换 7 反转整数 8 字符串到整数 (atoi) 9 回文数 10 正则表达式匹配 11 ...

    java面试题,180多页,绝对良心制作,欢迎点评,涵盖各种知识点,排版优美,阅读舒心

    【基础】一个".java"源文件中是否可以包含多个类(不是内部类)?有什么限制? 30 【基础】Anonymous Inner Class(匿名内部类)是否可以继承其它类?是否可以实现接口? 30 【基础】Java 中的final关键字有哪些用法?...

    丢失的最小正整数leetcode-LeetCode:力码

    无重复字符的最长子串 4 寻找两个正序数组的中位数 7 整数反转 9 回文数 13 罗马数字转整数 14 最长公共前缀 15 三数之和 16 最接近的三数之和 20 有效的括号 21 合并两个有序链表 26 删除排序数组中的重复项 27 ...

    leetcode和oj-leetcode-java:力扣在线裁判解决方案

    字符串到整数 (atoi) 14 最长公共前缀20 个有效括号28 实现 strStr() 43 乘法字符串 二分查找 列表/链表 19 从列表末尾删除第 N 个节点21 合并两个排序列表24个交换节点对27 删除元素61 轮换名单 树 排序 4 两个有序...

    leetcode周赛有原题吗-leetcode:leetcodepractice(Java),包含《剑指offer》和少量《leetbook》

    字符串转换整数 (atoi) 中等 盛最多水的容器 中等 罗马数字转整数 简单 0014 最长公共前缀 简单 三数之和 中等 0020 有效的括号 简单 0021 合并两个有序链表 简单 0026 删除排序数组中的重复项 简单 0027 移除元素 ...

    leetcode18java-Leet:我对LeetCode挑战问题的解决方案。语言因问题而异

    字符串到整数 (atoi) 中等的 Ruby 9. 回文数 简单的 Python 3 10. 正则表达式匹配 难的 Java 11. 盛水最多的容器 中等的 C++ 12. 整数转罗马 中等的 Python2 13. 罗马到整数 简单的 C 14. 最长公共前缀 简单的 ...

    leetcode2sumc-leetcode:我在LeetCode上解决的所有问题的集合

    字符串到整数 (atoi) 9 回文数 10 正则表达式匹配 11 盛水最多的容器 12 整数转罗马 13 罗马到整数 14 最长公共前缀 15 3总和 16 3和最近 17 电话号码的字母组合 18 4总和 19 从列表末尾删除第 N 个节点 20 有效括号...

    leetcode285-leetcode:leetcode

    字符串转换整数(atoi) 中等 C++ 11 盛最多水的容器 中等 C++ 双指针法 :star: 15 三数之和 中等 C++ 17 电话号码的字母组合 中等 C++ 19 删除链表的倒数第N个节点 中等 C++ 20 有效的括号 简单 C++ 21 合并两个有序...

    javalruleetcode-leetcode:力扣算法题解

    字符串转换整数 盛水最多得容器 括号生成 搜索旋转排序数组 全排列 跳跃游戏 合并区间 LRU缓存机制 翻转字符串里的单词 二叉树的右视图 岛屿数量 数字范围按位与 生命游戏 设计推特 水壶问题 两数相加II 01矩阵 单词...

    leetcode:记录自己的leetcode刷题日常

    P1两数之和P2两数相加P3无重复字符的最长子串P4寻找两个正序整数的中位数P5最长回文子串P6 Z字形变换P7整数反转P8字符串转换整体(atoi) P9回文数P11盛最多水的容器P12整体转罗马数字P13罗马数字转整数P14最高公共...

    javalruleetcode-leetcode-diary:leetcode刷题记录

    字符串转换整数 (atoi) #8 回文数 #9 *正则表达式匹配 #10 回溯 dp 盛最多水的容器 #11 整数转罗马数字 #12 罗马数字转整数 #13 最长公共前缀 #14 *三数之和 #15 双指针 最接近的三数之和 #16 电话号码的字母组合 #...

    learn_code

    LeetCode LeetCode编程题集第二题:两数相加中等第三题:无重复字符的最长子串中等第四题:寻找两个有序分段的中位数困难第五题:最长回文子串中等第六题:Z字形变换中等第七题:二次反转简单第八题:字符串转换整体...

    leetcode1185-leetcode:leetcode

    字符串到整数 (atoi) 中等的 9 回文数 简单的 11 盛水最多的容器 中等的 12 整数转罗马 中等的 13 罗马到整数 简单的 14 最长公共前缀 简单的 15 3总和 中等的 16 3和最近 中等的 17 电话号码的字母组合 中等的 18 4...

    javalruleetcode-leetcode:leetcode问题的解决方案

    字符串转整数 9 回文数 10 正则表达式匹配 11 盛水最多的容器 ///// 12 整数转罗马 13 罗马转整数 14 最长公共前缀 //// 15 3总和 //// 16 3和最近 //// 17 电话号码的字母组合 18 4总和 /// 19 从列表末尾删除第 N ...

    javalruleetcode-leetcode-solutions:leetcode-解决方案

    字符串转换整数 (atoi) - 0009 回文数 - 0011 盛最多水的容器 - 0013 罗马数字转整数 - 0014 最长公共前缀 - 0015 三数之和 - 0017 电话号码的字母组合 - 0019 删除链表的倒数第N个节点 - 0020 有效的括号 - 0021 ...

    LeetCode

    字符串到整数(atoi) 回文数 装满水的容器 整数到罗马 罗马到整数 最长的公共前缀 3和 3Sum最近 电话号码的字母组合 4和 从列表末尾删除第N个节点 有效括号 合并两个排序列表 产生括号 成对交换节点 k组中的反向...

    leetcode分类-tq-leetcode:LeetCode算法刻意练习

    字符串转换整数 Java Easy 字符串 3 只出现一次的数字 Java Easy 数组 4 Solution 合并两个有序数组 Java Easy 排序和搜索 5 删除排序数组中的重复项 Java Easy 数组 6 存在重复元素 Java Easy 数组 No Title Title2...

    javalruleetcode-My-LeetCode:我的Leetcode大全

    字符串到整数 (atoi) 13.5% 简单的 9 回文数 31.5% 简单的 10 正则表达式匹配 21.9% 难的 11 盛水最多的容器 34.4% 中等的 12 整数转罗马 38.6% 中等的 13 罗马到整数 39.1% 简单的 14 最长公共前缀 28.0% 简单的 15...

Global site tag (gtag.js) - Google Analytics