2019独角兽企业重金招聘Python工程师标准>>>

java提供的Arraylist本身不能对添加的元素进行去重,需要在添加后进行比较,如果相同就不添加

public static ArrayList single(ArrayList al) {ArrayList temp = new ArrayList();Iterator it = al.iterator();while(it.hasNext()){Object obj = it.next();if(!temp.contains(obj)){  //如果元素已经存在就不添加 确保不重复temp.add(obj);}}return temp;}

java里Hashset默认可以自动对字符型等简单对象进行去重复,如

public static void main(String[] args) {HashSet hs = new HashSet();hs.add("hehe");hs.add("xixii");hs.add("hehe");Iterator it = hs.iterator();while(it.hasNext()){System.out.println(it.next());}}

HashSet判断是否重复时,先判断HashCode是否一样,两个对象hashcode不相等,他们一定不equals。两个对象hashcode相等,他们不一定equals,还需要进一步判断。再重写equals方法,步骤

1.  判断传入的对象是否为空,如果为空,没有比较的必要 返回false

2.  判断当前对象是否和传入对象是同一个对象,如果是一个对象,没有必要比较,返回true

3.  判断当前对象是否和传入的对象类型相同,如果不同,没有比较的意义 返回false

4. 如果当前对象和传入对象类型相同(传入对象可以是相同或者子类),将传入的对象强制转换为当前对象类型

5. 逐个的来比较对象中的每一个属性值(对象的比较用equals()方法,基本类型用==,double,float 有精度损失的,可以将其转换成对应的Double,Float后在调用equals()进行比较)

public class Person {private String name;private int age;public Person(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic int hashCode() { return name.hashCode()+age*27;  //不同对象产生不同的hashcode 不会调用equals提高效率}@Override  public boolean equals(Object obj) {if(this == obj)   //判断是否为同一个对象 是返回 true 证明已经存在return true;if(!(obj instanceof Person))  //不是同一对象 判断是否 隶属于 person类对象throw new ClassCastException("类型错误"); //不是抛出异常Person p = (Person)obj;  //转换为 Person类型return this.name.equals(p.name) && this.age == p.age; //返回 是否存在}
}

排序有两种实现方式:comparable和Comparator

第一种 comparable 排序

TreeSet排序  实现comparable接口 只有TreeSet可以排序 HashSet不可以,所有的set都可以去重复

public class Person implements Comparable<Person> {................public int compareTo(Person p){int temp = this.age - p.age;  //按年龄排序return temp==0?this.name.compareTo(p.name):temp;   //年龄相同按姓名排序}}

例子

public static void main(String[] args) {TreeSet ts = new TreeSet();  //TreeSet对象ts.add(new Person("zhangsan",28));ts.add(new Person("lisi",21));ts.add(new Person("wangu",24));ts.add(new Person("zangu",24));Iterator it = ts.iterator();      while(it.hasNext()){Person p = (Person)it.next();System.out.println(p.getName()+":"+p.getAge());}}
先按年龄 相同年龄 再按姓名。
结果:lisi 21wanggu 24zangu  24zhangsan 28

第2种 comparator排序

public class ComparatorByName implements Comparator {@Overridepublic int compare(Object o1, Object o2) {Person p1 = (Person)o1;Person p2 = (Person)o2;int temp = p1.getName().compareTo(p2.getName());  //先按姓名  return temp==0?p1.getAge()-p2.getAge(): temp;     //再按年龄排}
}public static void main(String[] args) {TreeSet ts = new TreeSet(new ComparatorByName()); ts.add(new Person("zhangsan",28));ts.add(new Person("lisi",21));ts.add(new Person("zangu",24));ts.add(new Person("zangu",26));Iterator it = ts.iterator();while(it.hasNext()){Person p = (Person)it.next();           System.out.println(p.getName()+":"+p.getAge());}
}
结果:lisi 21zangu 24zangu 26zhangsan 28

map键值对  遍历值的获取

entrySet可以直接获取 key和value keySet() 先获得key 然后通过get(key)获得value值

public static void method(Map<Integer,String> map){Map<Integer,String> map = new HashMap<Integer,String>();    map.put(8,"zhaoliu");map.put(2,"zhaoliu");map.put(7,"xiaoqiang");map.put(6,"wangcai");Collection<String> values = map.values();  //获得value值Iterator<String> it2 = values.iterator();while(it2.hasNext()){System.out.println(it2.next());}Set<Map.Entry<Integer, String>> entrySet = map.entrySet();  //Iterator<Map.Entry<Integer, String>> it = entrySet.iterator();while(it.hasNext()){Map.Entry<Integer, String> me = it.next();Integer key = me.getKey();        //获得keyString value = me.getValue();     //获得valueSystem.out.println(key+"::::"+value);           }Set<Integer> keySet = map.keySet();Iterator<Integer> it = keySet.iterator();while(it.hasNext()){Integer key = it.next();String value = map.get(key);System.out.println(key+":"+value);     }
}

HashMap 每个key 只有一个value 最后一次key的value会重新以前的value。

keySet实现HashMap遍历

public static void main(String[] args) {HashMap<Student,String> hm = new HashMap<Student,String>();hm.put(new Student("lisi",38),"北京");hm.put(new Student("zhaoliu",24),"上海");hm.put(new Student("zhaoliu",24),"铁岭");Iterator<Student> it = hm.keySet().iterator();while(it.hasNext()){Student key = it.next();      //先得到keyString value = hm.get(key);   //根据key获得valueSystem.out.println(key.getName()+":"+key.getAge()+"---"+value);}
}

输出结果 lisi 38 北京

zhaoliu 24 铁岭   //替换了前面的 上海的那个

TreeMap也可以实现排列 Comparator,方式与TreeSet一样,这里就不介绍了

转载于:https://my.oschina.net/u/274829/blog/313405

Arraylist、HashSet去重复 treeSet排列实现方法 HashMap遍历取值相关推荐

  1. java 数组正则表达式_java正则表达式实现提取需要的字符并放入数组【ArrayList数组去重复功能】...

    本文实例讲述了java正则表达式实现提取需要的字符并放入数组.分享给大家供大家参考,具体如下: 这里演示java正则表达式提取需要的字符并放入数组,即arraylist数组去重复功能. 具体代码如下: ...

  2. numpy中方法参数axis取值理解

    numpy中方法参数axis取值理解 首先不要使用什么横纵轴去理解,因为时间长了就忘记了,而且如果a是一个三维数组就没法解释了. axis等于0时,在shape中表示的是二维数组.那么np.amin( ...

  3. 字符串去重复的几种方法

    // 字符串去重复 var str = 'assssdfasddddfaaaasdf' //1.将字符串转成数组去重后,再将所有元素拼接成字符串 // 将字符串转成数组 var arr = str.s ...

  4. java map去重复的数据_使用HashMap去重复数据.

    因为HashMap是键值对形式,所以一个键只对应一个Value,利用这个原理,我们就可以根据某列重复数据做键对重复数据进行处理啦~ 首先先看看我要处理 的数据 然后我最后想要的结果: 需求:根据gro ...

  5. EXCEL使用OFFSET方法进行隔行取值

    因为工作需要开始学习一点办公软件的使用,在这里记录下来给自己加深一下印象,也方便以后查找. 这次主要的问题是隔特定行数取值的问题,主要使用的是OFFSET方法. 首先介绍使用的方法OFFSET: OF ...

  6. 易语言组合框去重复到列表框

    在辅助开发时,我们需要通过组合框控制一些功能,或者获取一些数据,比如把组合框里 的值添加到列表框,这里就需要去除重复的,以下代码实现了这个功能. .版本 2 .支持库 spec .支持库 EDataS ...

  7. 关系数据库SQL之高级数据查询:去重复、组合查询、连接查询、虚拟表

    前言 接上一篇关系数据库SQL之基本数据查询:子查询.分组查询.模糊查询,主要是关系型数据库基本数据查询.包括子查询.分组查询.聚合函数查询.模糊查询,本文是介绍一下关系型数据库几种高级数据查询SQL ...

  8. c++ map取值的find、[]、at方法特性对比

    背景 项目中经常需要对std::map进行插入和取值操作,以前经常使用find和[]直接操作,c++11引入了at方法. 本文主要介绍它们的使用方法和不同之处. find 很直观的查找元素操作,如: ...

  9. java 两个数组去重复数据_Java实现数组去除重复数据的方法详解

    本文实例讲述了Java实现数组去除重复数据的方法.分享给大家供大家参考,具体如下: 前一段时间被面试问到:如果一个数组中有重复元素,用什么方法可以去重?一时间会想到用一种方法,但是后来查阅资料后发现, ...

最新文章

  1. 用C语言做的 一个整人的小程序
  2. 解决Dependency ‘xxxx‘ not found
  3. 史上最全的MSSQL笔记
  4. 致敬平凡的程序员--《SOD框架“企业级”应用数据架构实战》自序
  5. Spring简化Java开发_spring如何简化java开发
  6. Leetcode PHP题解--D68 283. Move Zeroes
  7. jQuery常用工具方法
  8. 阿里云服务器 ECS 部署lamp:centos+apache+mysql+php安装配置方法 (centos7)
  9. 28335scififo中断接收与发送
  10. AC自动机算法概述及习题
  11. Chrome浏览器安装Axure插件
  12. 通过Ubuntu16.04编译Android下的osip动态库
  13. 杭州地铁首末站周边停车场正酝酿停车收费优惠
  14. CSDN,hen hao,hen qiang da
  15. ATECC508A芯片开发笔记(二):开发准备之 CryptoAuthLib 库简介与移植
  16. mysql sus bench_susbench性能测试工具
  17. 信必优新技术–QA 的新机遇
  18. 【转】几毛钱的32768晶振,这也能写出一篇干货?
  19. (0091)iOS开发itms-services协议安装IPA安装包
  20. 【Polelink北汇信息】EV初创公司如何降低软件开发成本和风险

热门文章

  1. Uncaught TypeError: $(…).orgcharts is not a function
  2. 在LNMP或Nginx上配置NameCheap免费SSL证书
  3. leetcode第一刷_Construct Binary Tree from Inorder and Postorder Traversal
  4. oracle11G在linux环境下的卸载操作
  5. MSSQL表分区的创建
  6. 80后的网上创业生涯:想得到做得到
  7. Vue CLI3.0 中使用jQuery 和 Bootstrap
  8. 使用Eclipse PDT + Xampp搭建Php开发环境
  9. TP框架中内置查询IP函数
  10. zw版【转发·台湾nvp系列Delphi例程】HALCON RegionToBin1