迭代器中set的使用
今天对迭代器中的set方法进行了一下简单的使用,由于之前使用过list方法,所以将他与list进行了一下对比。
list中加入对象时不会进行查重,也就是只要是一个符合的对象就可以加到list中,而对于set来说他是一个不能有重复的集合,会对其进行一个查重。另外两种集合对排序的方法也是不一样的,对于list来说,你可以先将其存在集合中,然后调用方法,对list进行一次排序,而对于set来说,他是在用TreeSet集合在向集合的添加的过程中就做了一个简单的排序,第一次使用这种方法,对其中的具体原理还是不太了解,感觉在使用过程中主要就是这些区别。
以下是两种方法的使用
package iterator; import java.util.ArrayList; import java.util.Collections;
import java.util.Comparator; import java.util.List;
import java.util.Set;
import java.util.TreeSet; import javax.net.ssl.SNIHostName;
public class Client { public static void main(String[] args) { List<Student> list = listStudent(); System.out.println("使用list进行遍历");
listASC(list);
listDESC(list);
setASC();
setDESC(); } //将数组存储在set中
public static void setASC()
{
System.out.println("使用set进行顺序输出");
Set<Student> set = new TreeSet<Student>(new setCompare()) ;
set.add(new Student(3, "李四", 19));
set.add(new Student(2, "张", 18));
set.add(new Student(5, "李", 19));
set.add(new Student(1, "王五", 18));
set.add(new Student(6, "赵柳", 19)); for(Student stu: set)
{
System.out.println("学号:" + stu.getId() + " 姓名:" + stu.getName() + " 年龄:" + stu.getAge());
} } //将数组存储在set中
public static void setDESC()
{
System.out.println("使用set进行逆序输出");
Set<Student> set = new TreeSet<Student>(new setCompareDESC()) ;
set.add(new Student(3, "李四", 19));
set.add(new Student(2, "张", 18));
set.add(new Student(5, "李", 19));
set.add(new Student(1, "王五", 18));
set.add(new Student(6, "赵柳", 19)); for(Student stu: set)
{
System.out.println("学号:" + stu.getId() + " 姓名:" + stu.getName() + " 年龄:" + stu.getAge());
} } //将数组存储在List容器中
public static List<Student> listStudent()
{
List<Student> list = new ArrayList<Student>();
list.add(new Student(3, "李四", 19));
list.add(new Student(2, "张", 18));
list.add(new Student(5, "李", 19));
list.add(new Student(1, "王五", 18));
list.add(new Student(6, "赵柳", 19));
return list;
} public static void listASC(List<Student> list)
{
System.out.println("按照学号顺序输出");
Collections.sort(list,new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
// TODO 自动生成的方法存根
if (o1.getId() > o2.getId()) {
return 1;
}
if (o1.getId() == o2.getId()) {
return 0;
}
return -1;
} }); for(Student stu: list)
{
System.out.println("学号:" + stu.getId() + " 姓名:" + stu.getName() + " 年龄:" + stu.getAge());
} } public static void listDESC(List<Student> list)
{
System.out.println("按照学号逆序输出");
Collections.sort(list,new Comparator<Student>() { @Override
public int compare(Student o1, Student o2) {
// TODO 自动生成的方法存根
if (o1.getId() < o2.getId()) {
return 1;
}
if (o1.getId() == o2.getId()) {
return 0;
}
return -1;
}
}); for(Student stu: list)
{
System.out.println("学号:" + stu.getId() + " 姓名:" + stu.getName() + " 年龄:" + stu.getAge());
}
} }
class setCompare implements Comparator<Student>{ @Override
public int compare(Student o1, Student o2) { return o1.getId() - o2.getId();
} } class setCompareDESC implements Comparator<Student>{ @Override
public int compare(Student o1, Student o2) { return o2.getId() - o1.getId();
} }
其中用到的Student类
package iterator;
public class Student {
int id;
String name;
int age;
public Student(int id,String name,int age) {
// TODO 自动生成的构造函数存根
this.id = id;
this.name = name;
this.age = age;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
}
由于没有具体的数据,所以在处理过程中,我就直接使用了固定的赋值格式了。

迭代器中set的使用的更多相关文章
- Day07_39_集合中的remove()方法 与 迭代器中的remove()方法
集合中的remove()方法 与 迭代器中的remove()方法 深入remove()方法 iterator 中的remove()方法 collection 中的remove(Object)方法 注意 ...
- 关于迭代器中IEnumerable与IEnumerator的区别
首先是IEnumerable与IEnumerator的定义: 1.IEnumerable接口允许使用foreach循环,包含GetEnumerator()方法,可以迭代集合中的项. 2.IEnumer ...
- 迭代器中next()的用法
>>> g = (x ** 2 for x in range(10)) >>> next(g) 0 >>> next(g) 1 >>& ...
- golang中的那些坑之迭代器中的指针使用
今天在编写代码的时候,遇到了一个莫名其妙的错误,debug了半天,发现这是一个非常典型且易犯的错误.记之 示例代码: package main import "fmt" type ...
- Php-SPL库中的迭代器类详解(转)
SPL提供了多个迭代器类,分别提供了迭代访问.过滤数据.缓存结果.控制分页等功能.,因为php总是在不断壮大,我尽可能列出SPL中所有的迭代类.下面其中一些迭代器类是需要php5.4,另外一些如Sea ...
- C#中foreach语句的迭代器实现机制
C#中的foreach语句可用于循环遍历某个集合中的元素,而所有的只要支持了IEnumerable或IEnumerable<T>泛型接口的类型都是可以 用foreach遍历的.其具体的遍历 ...
- ES6中的迭代器(Iterator)和生成器(Generator)
前面的话 用循环语句迭代数据时,必须要初始化一个变量来记录每一次迭代在数据集合中的位置,而在许多编程语言中,已经开始通过程序化的方式用迭代器对象返回迭代过程中集合的每一个元素 迭代器的使用可以极大地简 ...
- 深入理解Java中的迭代器
迭代器模式:就是提供一种方法对一个容器对象中的各个元素进行访问,而又不暴露该对象容器的内部细节. 概述 Java集合框架的集合类,我们有时候称之为容器.容器的种类有很多种,比如ArrayList.Li ...
- Lua中的迭代器与泛型for
[前言] 迭代器就是一种可以遍历一种集合中所有元素的机制,在Lua中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道 ...
随机推荐
- $Noip2016/Luogu2822$ 组合数问题
$Luogu$ 看这题题解的时候看到一个好可爱的表情(●'◡'●)ノ♥ $Sol$ 首先注意到这题的模数是$k$.然而$k$并不一定是质数,所以不能用$C_n^m=\frac{n!}{m!(n-m)! ...
- JS进阶——this绑定了谁?
一.this的意义 二.寻找this绑定对象 经常听到这么一句话,找this只需要看谁是调用方.当函数被调用时会记录函数调用调用方式.传参包括this等各种属性.有时候this绑定对象情况太抽象,找到 ...
- .NET Core 3.1和WorkerServices构建Windows服务
介绍 ASP.NET Core 3增加了一个非常有意思的功能Worker Service.他是一个ASP.NET Core模板,他允许我们创建托管长期的运行的后台服务,这些服务具体实现IHostedS ...
- 不懂Neo4j?没关系,先学增删改查
从上篇文章中我们了解到了什么是Neo4j.为什么要用Neo4j.什么场景使用 以及怎么安装,如果您还不想熟悉,点击此处,传送过去哦~ 既然Neo4j是一个图数据库,那么毫无疑问,增删改查是必不可少的, ...
- 15.Python文本转化语音方法
1.用pywin32模块来将文本转化为语音 通过pip install pywin32安装模块,pywin32是个万金油的模块,太多的场景使用到它,但在文本转语音上,它却是个青铜玩家,简单无脑但效果不 ...
- BigInteger&BigDecimal类
BigInteger类 当需要处理超过 long 数值范围的大整数时,java.math 包中的 BigInteger 类提供任意精度的整数运算. 构造方式 //构造方法,将BigInteger的十进 ...
- 高效测试框架推荐之Ginkgo
自2015年开始,七牛工效团队一直使用Go语言+Ginkgo的组合来编写自动化测试用例,积累了大约5000+的数量.在使用和维护过程中,我们觉得Ginkgo的很多设计理念和功能非常赞,因此特分享给大家 ...
- MySQL 基础 SQL 操作
MySQL 用户 --登录 mysql -u<用户名> -p[密码] --修改密码 mysqladmin -u<用户名> -p[密码] password <new_pas ...
- springboot +fastdfs 上传文件到到云服务器
fastdfs在云服务器的搭建和配置:https://blog.csdn.net/qq_41592652/article/details/104006289 springboot结构如下: appli ...
- bzoj_1036 树链剖分套线段树
bzoj_1036 ★★★★ 输入文件:bzoj_1036.in 输出文件:bzoj_1036.out 简单对比时间限制:1 s 内存限制:162 MB [题目描述] 一棵树上有n个节 ...