迭代器中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中,通常将迭代器表示为函数.每调用一次函数,就返回集合中的“下一个”元素.每个迭代器都需要在每次成功调用之后保存一些状态,这样才能知道 ...
随机推荐
- JavaScript 构造树形结构的一种高效算法
引言 我们经常会碰到树形数据结构,比如组织层级.省市县或者动植物分类等等数据.下面是一个树形结构的例子: 在实际应用中,比较常见的做法是将这些信息存储为下面的结构,特别是当存在1对多的父/子节点关系时 ...
- DLC双端锁,CAS,ABA问题
一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会出现多个对象 public cla ...
- 小小知识点(二十)利用MATLAB计算定积分
一重定积分 1. Z = trapz(X,Y,dim) 梯形数值积分,通过已知参数x,y按dim维使用梯形公式进行积分 %举例说明1 clc clear all % int(sin(x),0,pi) ...
- 28.python操作excel表格(xlrd/xlwt)
python读excel——xlrd 这个过程有几个比较麻烦的问题,比如读取日期.读合并单元格内容.下面先看看基本的操作: 首先读一个excel文件,有两个sheet,测试用第二个sheet,shee ...
- forkjoin及其性能分析,是否比for循环快?
最近看了网上的某公开课,其中有讲到forkjoin框架.在这之前,我丝毫没听说过这个东西,很好奇是什么东东.于是,就顺道研究了一番. 总感觉这个东西,用的地方很少,也有可能是我才疏学浅.好吧,反正问了 ...
- linux死机解决办法
linux死机后不要长按电源建强制关机,容易对损坏系统配置或者电脑硬件,导致重启后产生不必要的麻烦 如果是在图形界面下死机的话,不要再依赖任何图形界面的工具,解决方法如下: 1.一种方式是进入终端界面 ...
- STM321的SPI驱动遇到的一个坑!!
最近在做项目要用到FATFS文件驱动和SD卡驱动,SD卡驱动我用的是SPI的通信方式,在挂载文件系统是总是挂在失败了,花了一天时间反复检查,才发现SPI在接收时候卡死: 为了寻找问题的原因,整个人都快 ...
- BFS - 求最短路径
Farmer John has been informed of the location of a fugitive cow and wants to catch her immediately. ...
- Node.js实操练习(一)之Node.js+MySQL+RESTful
前言 最近学习了一下node.js相关的内容,在这里初步做个小总结,说实话关于本篇博客的相关内容,自己很久之前就已经有过学习,但是你懂的,“好记性不如烂笔筒”,学过的东西不做笔记的话,很容易就会忘记的 ...
- Ogre源码学习-Image和Texture
以下文字来自源码注释: Image类:保存未压缩的图片数据,是唯一一个可以加载纹理的类.Image对象调用Codec对象来为图片数据解码. 通常,当在图片被加载前需要对它进行额外的处理,或者你想把它复 ...