java set遍历及效率_Java Set集合的遍历及实现类的比较
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集合的遍历及实现类的比较相关推荐
- 原生 遍历_迭代器模式统一集合的遍历方式
今天来介绍迭代器模式(Iterator Design Pattern),它还有另一个名字,叫作游标模式(Cursor Design Pattern). 1,遍历集合元素 现在的高级语言(比如 C++, ...
- java中list元素排序_java list集合元素根据某些字段排序
一.jdk1.6的环境下 新建ComparatorSort类,并实现Comparator接口,重写compare方法 降序排序:o1的元素>o2的元素,并返回-1:o1的元素小于o2的元素,并返 ...
- java list有序还是无序_java的集合框架
前言 使用java编程语言的开发人员,在日常开发过程中经常会使用到java的一些集合类,不过这些集合类太多,很多人对它们的特点和使用场景不是特别的了解,通过此文给大家总结一下这方面的知识,方便大家面试 ...
- java中集合类的转换_Java中的两个常用工具类及集合数组的相互转换
为了编程人员的方便及处理数据的安全性,Java特别提供了两个非常有用的工具类: 一.Collections 1.Collections类的特点: 集合框架的工具类.里面定义的都是静态方法. 2.Col ...
- java 遍历list 性能_java list三种遍历方法性能比較
从c/c++语言转向java开发,学习java语言list遍历的三种方法,顺便測试各种遍历方法的性能,測试方法为在ArrayList中插入1千万条记录,然后遍历ArrayList,发现了一个奇怪的现象 ...
- java io文件流序列化_Java——Properties集合,Object序列化流与反序列化流,打印流,commons-IO文件工具类...
一.properties集合 集合对象Properties类,继承Hashtable,实现Map接口,可以和IO对象结合使用,实现数据的持久存储. 特点: Hashtable的子类,map集合中的方法 ...
- java遍历树结构数据_Java数据结构——二叉树的遍历(汇总)
二叉树的遍历分为深度优先遍历(DFS)和广度优先遍历(BFS) DFS遍历主要有: 前序遍历 中序遍历 后序遍历 一.递归实现DFS Node.java: public class Node { pr ...
- java双重for循环 效率_Java优化for循环嵌套的高效率方法
前几天有人问过我一个问题,就是两个嵌套for循环执行效率的问题,问有什么好的办法替换.当时我想了想,实在想不起来,哎,惭愧!!! 请教了答案,恍然大悟. 比如:两个list中分别装有相同的对象数据. ...
- java list 取两条_java list集合中有多条数据随机两条一组
展开全部 public static void main(String[] args) { Random random = new Random(); ArrayList src = new Arra ...
最新文章
- Python培训教程分享:Python中选择结构是什么
- conda如何添加,删除镜像channel,以及其他常见使用方法。
- clipse3.2/3.3中指定第三方包(JAR)和类路径(CLASSPATH)的几个方法(转做笔记)
- java alsa 编程_搭建JavaWeb开发环境
- 计算机音乐刚好遇见你乐谱,刚好遇见你曲谱_刚好遇见你乐谱
- MATLAB绘制正弦波、方波、三角波、锯齿波的mif文件
- 一些有关使用EF的错误用法展开的思考
- Java RMI,Socket,HttpClient
- IBM收购Rational一年总结
- 高并发系统之降级特技
- 机器学习入门学习视频和书籍(笔记保存)
- Windows 10的成功能让苹果学到点什么?
- SEO实战密码阅读笔记
- awr报告 解读_十步解析awr报告
- 塔防游戏制作教程(一)
- phalapi做登录检测_欢迎使用PhalApi!
- Oracle表是Filtered状态,Explain中的filtered列
- 车辆网络安全ISO/SAE 21434解读(十)TARA分析
- lbs、agps流程
- 2020.9.23 金山云后台开发岗笔试 2道编程
热门文章
- [肖申克的救赎台词]:Red答假释官
- (软考中级--信息安全工程师)六、认证技术原理与应用
- 红米10android auto,红米手机发展史,共10代机型,其中你用过哪几代
- 关闭windows10 的防火墙方法——windows10 家庭版
- 30个酷毙的交互式网站(HTML5+CSS3)
- 光纤传输16路E1+4路千兆隔离以太网络光端机2M专网千兆以太网综合多业务PDH光端机
- 企业微信最直接有效的裂变玩法你了解吗?
- 有机元素分析基本构成及其工作原理
- HTML练习---新浪微博
- 且行且走(8月18,19日)