Java Set集合的遍历及实现类的比较

Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法

package com.sort;

import java.util.HashSet;

import java.util.Iterator;

import java.util.Set;

/**

* 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,

* @author Owner

*

*/

public class SetTest2 {

public static void main(String[] args) {

Set set = new HashSet();

set.add("a");

set.add("b");

set.add("c");

set.add("d");

set.add("e");

set.add("e");//不能放入重复数据

/**

* 遍历方法一,迭代遍历

*/

for(Iterator iterator = set.iterator();iterator.hasNext();){

System.out.print(iterator.next()+" ");

}

System.out.println();

System.out.println("********************");

/**

* for增强循环遍历

*/

for(String value : set){

System.out.print(value+" ");

}

}

}

注意:这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。

下面分析一下Set集合的另外一个重要实现类TreeSet,

TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。

通俗一点讲,就是可以按照排序后的列表显示,也可以按照指定的规则排序

Set set = new TreeSet();

set.add("f");

set.add("a");

set.add("b");

set.add("c");

set.add("d");

set.add("e");

System.out.println(set);

输出:[a, b, c, d, e, f]

按照排序后输出

那么如果我们想让他倒序输出呢?当然方法很多。这里我采用指定一个规则让他倒序输出

package com.sort;

import java.util.Comparator;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

public class TreeSetTest3 {

public static void main(String[] args) {

Set set = new TreeSet(new MyComparator());

set.add("a");

set.add("b");

set.add("c");

set.add("d");

set.add("e");

set.add("A");

for(Iterator iterator = set.iterator();iterator.hasNext();){

System.out.print(iterator.next()+" ");

}

}

}

class MyComparator implements Comparator{

@Override

public int compare(String o1, String o2) {

return o2.compareTo(o1);//降序排列

}

}

输出:e d c b a A

如果Set集合中放入的是我们自己定义的一个类类型呢?

注意:一定要定义一个排序规则类实现Comparator接口,与上面的方法类似

package com.sort;

import java.util.Comparator;

import java.util.Iterator;

import java.util.Set;

import java.util.TreeSet;

public class TreeSetTest2 {

public static void main(String[] args) {

Set set = new TreeSet(new PersonComparator());

Person p1 = new Person(10);

Person p2 = new Person(20);

Person p3 = new Person(30);

Person p4 = new Person(40);

set.add(p1);

set.add(p2);

set.add(p3);

set.add(p4);

for(Iterator iterator = set.iterator();iterator.hasNext();){

System.out.print(iterator.next().score+" ");

}

}

}

class Person{

int score;

public Person(int score){

this.score = score;

}

public String toString(){

return String.valueOf(this.score);

}

}

class PersonComparator implements Comparator{

@Override

public int compare(Person o1, Person o2) {

return o1.score - o2.score;

}

}

输出:10 20 30 40

如果按照一个人的分数的倒序排列,只需要更改compare方法中的o2.score-o1.score

感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!

java set遍历及效率_Java Set集合的遍历及实现类的比较相关推荐

  1. 原生 遍历_迭代器模式统一集合的遍历方式

    今天来介绍迭代器模式(Iterator Design Pattern),它还有另一个名字,叫作游标模式(Cursor Design Pattern). 1,遍历集合元素 现在的高级语言(比如 C++, ...

  2. java中list元素排序_java list集合元素根据某些字段排序

    一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...

  3. java list有序还是无序_java的集合框架

    前言 使用java编程语言的开发人员,在日常开发过程中经常会使用到java的一些集合类,不过这些集合类太多,很多人对它们的特点和使用场景不是特别的了解,通过此文给大家总结一下这方面的知识,方便大家面试 ...

  4. java中集合类的转换_Java中的两个常用工具类及集合数组的相互转换

    为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类: 一.Collections 1.Collections类的特点: 集合框架的工具类.里面定义的都是静态方法. 2.Col ...

  5. java 遍历list 性能_java list三种遍历方法性能比較

    从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便測试各种遍历方法的性能,測试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...

  6. java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...

    一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...

  7. java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)

    二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...

  8. java双重for循环 效率_Java优化for循环嵌套的高效率方法

    前几天有人问过我一个问题,就是两个嵌套for循环执行效率的问题,问有什么好的办法替换.当时我想了想,实在想不起来,哎,惭愧!!! 请教了答案,恍然大悟. 比如:两个list中分别装有相同的对象数据. ...

  9. java list 取两条_java list集合中有多条数据随机两条一组

    展开全部 public static void main(String[] args) { Random random = new Random(); ArrayList src = new Arra ...

最新文章

  1. Python培训教程分享:Python中选择结构是什么
  2. conda如何添加,删除镜像channel,以及其他常见使用方法。
  3. clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)
  4. java alsa 编程_搭建JavaWeb开发环境
  5. 计算机音乐刚好遇见你乐谱,刚好遇见你曲谱_刚好遇见你乐谱
  6. MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件
  7. 一些有关使用EF的错误用法展开的思考
  8. Java RMI,Socket,HttpClient
  9. IBM收购Rational一年总结
  10. 高并发系统之降级特技
  11. 机器学习入门学习视频和书籍(笔记保存)
  12. Windows 10的成功能让苹果学到点什么?
  13. SEO实战密码阅读笔记
  14. awr报告 解读_十步解析awr报告
  15. 塔防游戏制作教程(一)
  16. phalapi做登录检测_欢迎使用PhalApi!
  17. Oracle表是Filtered状态,Explain中的filtered列
  18. 车辆网络安全ISO/SAE 21434解读(十)TARA分析
  19. lbs、agps流程
  20. 2020.9.23 金山云后台开发岗笔试 2道编程

热门文章

  1. [肖申克的救赎台词]:Red答假释官
  2. (软考中级--信息安全工程师)六、认证技术原理与应用
  3. 红米10android auto,红米手机发展史,共10代机型,其中你用过哪几代
  4. 关闭windows10 的防火墙方法——windows10 家庭版
  5. 30个酷毙的交互式网站(HTML5+CSS3)
  6. 光纤传输16路E1+4路千兆隔离以太网络光端机2M专网千兆以太网综合多业务PDH光端机
  7. 企业微信最直接有效的裂变玩法你了解吗?
  8. 有机元素分析基本构成及其工作原理
  9. HTML练习---新浪微博
  10. 且行且走(8月18,19日)