面试编程题3:元素去重
来源:互联网 发布:log4j sql日志级别 编辑:程序博客网 时间:2024/06/17 05:19
编程第三题:元素去重。基本上集中在数组或者List去重。前面我们介绍了两个数组合并,一般来说,合并后可能存在重复的元素,所以,我们还需要实现把重复的元素给去掉。Java常见的元素去重有4到5中,基本上都是用上了集合的知识。因为数组是没有添加和删除元素的方法,但是集合类一般都有。看来很多面试编程的题目,范围都集中在Java的集合框架方面,也就是经常说的数据结构和算法的范畴。
1. 普通数组嵌套循环实现
package test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class StringContaisTest {public static void main(String[] args) {// TODO Auto-generated method stubString[] A = {"a","dc","a","56","ab","a","56","ba","NBA","b"};//新建一个list,用来存储不重复的元素List<String> list1 = new ArrayList<String>();//嵌套循环,判断数组A相邻两个元素是否相等for(int i=0; i<A.length; i++){//第二层循环,从i+1范围开始for(int j=i+1; j<A.length; j++){if(A[i] == A[j]){j = ++i;}}list1.add(A[i]);}System.out.println(list1.toString());}}
运行结果:
[dc, ab, a, 56, ba, NBA, b]
这个方法是实现了元素去重,但是没有保留之前元素的排序位置。而且,嵌套循环,性能不好,关键是读代码,读起来费劲,费脑子。
2.利用List实现
接下来这个方法,代码和逻辑看起来更清晰,方便他人读懂,也很好记住这段代码。原理就是,先创建一个空的list集合,然后拿空的list去和数组元素没一个进行对比,如果发现list里不包含的元素,那么就把这个元素丢进list。
package test;import java.util.ArrayList;import java.util.Arrays;import java.util.List;public class StringContaisTest {public static void main(String[] args) {// TODO Auto-generated method stubString[] A = {"a","dc","a","56","ab","a","56","ba","NBA","b"};//新建一个list,用来存储不重复的元素List<String> list1 = new ArrayList<String>();for(int i=0; i<A.length; i++){if(!list1.contains(A[i])){// 把不包含的元素添加进Listlist1.add(A[i]);}}System.out.println(list1.toString());}}
运行结果
[a, dc, 56, ab, ba, NBA, b]这个方法逻辑和思路清晰,而且输出结果可以最大保留原数组元素的相对位置关系。如果有保留位置关系的需求,这个方法更适合。
3.TreeSet或者HashSet实现
这里TreeSet元素支持自动排序并去重输出,直接来看代码。
package test;import java.util.TreeSet;public class StringContaisTest {public static void main(String[] args) {// TODO Auto-generated method stubString[] A = {"a","dc","a","56","ab","a","56","ba","NBA","b"};//创建一个treeset对象TreeSet<String> ts = new TreeSet<String>();for(int i=0; i<A.length; i++){ts.add(A[i]);}System.out.println(ts);}}
运行结果:
[56, NBA, a, ab, b, ba, dc]
可以看到,我们在代码中实际上把原数组A的全部元素都添加到了TreeSet中,但是输出确实去重并排序,这个就是TreeSet的特点。HashSet也有类似效果。
package test;import java.util.HashSet;public class StringContaisTest {public static void main(String[] args) {// TODO Auto-generated method stubString[] A = {"a","dc","a","56","ab","a","56","ba","NBA","b"};//创建一个Hashset对象HashSet<String> hs = new HashSet<String>();for(int i=0; i<A.length; i++){hs.add(A[i]);}System.out.println(hs);}}
运行结果:
[a, 56, ab, b, NBA, dc, ba]
这里看到HashSet和TreeSet都实现了去重,但是打印出来的排序效果不同。所以,这里顺便记住下HashSet和TreeSet的区别。区别就是:TreeSet 是二差树实现的,Treeset中的数据是自动排好序的,不允许放入null值。HashSet 是哈希表实现的,HashSet中的数据是无序的,可以放入null,但只能放入一个null,两者中的值都不能重复,就如数据库中唯一约束。
4.List和Set实现
第一步,把数组元素全部添加到List集合中,但是这个时候相当于拷贝,元素没有去重,所以,还需要借助Set的特点来去重。具体代码如下。
package test;import java.util.ArrayList;import java.util.HashSet;import java.util.List;import java.util.Set;public class StringContaisTest {public static void main(String[] args) {// TODO Auto-generated method stubString[] A = {"a","dc","a","56","ab","a","56","ba","NBA","b"};//新建一个ArrayList对象List<String> list1 = new ArrayList<String>();for(String i : A){list1.add(i);}//前面步骤实现了把元素添加到arraylist,但是没有去重复,所以,需要引入setSet<String> set1 = new HashSet<String>();//把list1集合元素全部添加到set1对象中set1.addAll(list1);System.out.println(set1.toString());}}
运行结果:
[a, 56, ab, b, NBA, dc, ba]
所以,数组元素去重掌握了,List元素去重也是一样道理。先把list元素添加到一个ArrayList对象,然后利用set对象的addall方法把arrarylist的元素添加到hashset,然后打印出来,自然就去重后的元素。
阅读全文
0 0
- 面试编程题3:元素去重
- NSArray元素去重
- 数组元素去重
- NSArray元素去重
- 元素去重
- 数组元素去重
- 网易实习生笔试编程题1:对序列去重,只保存最后出现的元素
- JS数组元素去重
- js数组元素去重
- vecor元素排序去重
- python列表元素去重
- matlab 数组元素去重
- js数组元素去重
- 对列表元素去重
- golang -- slice元素去重
- 每日一题【二】-数组元素去重
- Python 列表元素去重的3种方法
- c++ 数组Vector元素去重
- SpringMVC实现文件上传下载
- JZ2440 第6章 存储控制器
- ajax提交表单和文件上传
- tensorflow之可视化工具tesorboard的简单使用
- ACM学习总结之A+B问题
- 面试编程题3:元素去重
- IDENTITY_INSERT
- 浅谈JavaScript异步加载的三种方式——async和defer、动态创建script
- Single Image Haze Removal(图像去雾)-CVPR’09 Best Paper
- 洛谷U14200 Changing 题解 【杨辉三角】
- 作业
- LA4670 AC自动机
- Mysql查询
- 计算机的色彩表示——十六进制颜色码