迭代器中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中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道 ...
随机推荐
- 20191121-10 Scrum立会报告+燃尽图 06
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/10070 一:组名: 组长组 组长:杨天宇 组员:魏新 罗杨美慧 王歆 ...
- Linux三剑客之sed的基本用法介绍
[介绍] sed是一款强大的非交互式的文本编辑器,可以对文件文本进行增删改查的相关操作,本文主要是讲解以下sed的基本用法. [常用选项] -e 下一个参数为一个sed指令,一般只会用于同一行有多个s ...
- linux(raspbian)下mysql的安装,权限设置和用户管理
一 MySQL安装:(1) 使用apt-get安装, 由于raspbian是基于Debian的自由操作系统,debian默认自带apt-get指令安装应用因此可以使用来安装 sudo apt-get ...
- [Abp vNext 源码分析] - 14. EntityFramework Core 的集成
一.简要介绍 在以前的文章里面,我们介绍了 ABP vNext 在 DDD 模块定义了仓储的接口定义和基本实现.本章将会介绍,ABP vNext 是如何将 EntityFramework Core 框 ...
- nginx 负载均衡的配置
首先搭建好三台nginx,我是用VM搭建的 nginx搭建,https://www.cnblogs.com/liubaoqing/p/10507962.html 这里的三台nginx ,ip分别是 1 ...
- 低副瓣阵列天线综合2 matlab HFSS
接着继续研究阵列天线设计,得到了电流幅度分布或功率分布之后,就可以进行阵列设计或馈电网络设计了,之前利用HFSS仿真过单列的串馈天线,后面会继续复习熟悉一下,本次我找了一篇硕士论文利用威尔金森功分器来 ...
- ODBC连接时报错不可识别的数据库格式
报这个错误是因为Acess的版本不同. 2003版本的Acess的数据连接字符串: string dataBasePath = @"C:/Users/user/Documents/Test. ...
- 从头学pytorch(二十):残差网络resnet
残差网络ResNet resnet是何凯明大神在2015年提出的.并且获得了当年的ImageNet比赛的冠军. 残差网络具有里程碑的意义,为以后的网络设计提出了一个新的思路. googlenet的思路 ...
- 《C# 爬虫 破境之道》:第一境 爬虫原理 — 第一节:整体思路
在构建本章节内容的时候,笔者也在想一个问题,究竟什么样的采集器框架,才能算得上是一个“全能”的呢?就我自己以往项目经历而言,可以归纳以下几个大的分类: 根据通讯协议:HTTP的.HTTPS的.TCP的 ...
- WordPress使用PHPMailer发送gmail邮件
wordpress使用phpmailer发送gmail邮件 0.保证用于gmail账号已经开启imap服务,且你能正常访问到gmail的smtp服务.(需要climb over the wall) 1 ...