迭代器中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中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道 ...
随机推荐
- 「2015南阳CCPC D」金砖 解题报告
金砖 Problem 有一个长度为L的板凳,可以放一排金砖,金砖不能重叠.特别的,摆放的金砖可以超出板凳,前提是必须保证该金砖不会掉下去,即该金砖的重心必须在板凳上. 每块金砖都一个长度和价值,且金砖 ...
- 使用Rancher Server部署本地多节点K8S集群
当我第一次开始我的Kubernetes之旅时,我一直在寻找一种设置本地部署环境的方式.很多人常常会使用minikube或microk8s,这两者非常适合新手在单节点集群环境下进行操作.但当我已经了解了 ...
- Time、Date拼接成TimeStamp
Time.Date拼接成TimeStamp 有关于Time类型.Date类型的数据这里不再赘述,本文旨在讲解如何将数据库中的Time.Date类型取出来并转换成TimeStamp类型,话不多说,先看代 ...
- (01)大话设计模式-简单工厂-java实现
1.运算接口 public interface Operation { public double getResult(double NumberA , double NumberB); } 2.加减 ...
- Java中枚举类型与for、switch语句
1.枚举类型的声明 格式为: enum 枚举类型名{ 常量1,常量2,常量3 } 如: enum Number{ one,two,three,four,five //常量} 注意:enum内装的 ...
- Redis 高可用之"持久化"
Redis高可用概述 在Redis中,实现高可用的技术主要包括:持久化.复制(读写分离).哨兵.集群. 持久化: 持久化是最简单的高可用方法(有时甚至不被归为高可用手段),主要作用是数据备份,即将数据 ...
- Vue中echarts的基本用法
前言:同大多数的前端框架一样,先读官网的使用方法.学会基本使用后,在实例中找到自己想要demo.拿过来改一改,一个echarts图表就形成,毕竟人家做就是为了方便使用. 我是在vue中下面直接使用的e ...
- Flutter兼容AndroidX
参考官方文档:https://flutter.dev/docs/development/packages-and-plugins/androidx-compatibility 第一步 distribu ...
- 树 dfs暴力判环 题意转化
以后还是要多做题啊 这一道题我把题目想的太简单了 用并查集做了一波 但是忘了一种情况 就是同一个树上可能会有环 这就不太对了 而且还不要忘了 一棵树的根节点是一个自环 也就是说这一题的答案就是 ...
- 倍增笔记ST表
https://noip-1253948194.cos.ap-beijing.myqcloud.com/%E5%80%8D%E5%A2%9E-ST%E7%AE%97%E6%B3%95.mp4 1123 ...