set集合的遍历(基于迭代器和增强for循环,没有一般的for循环)
赋:开发项目中见到的代码
Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法
- package com.sort;
- import java.util.HashSet; // HashSet即是HashMap里面没有值,只有key,里面元素是无序的
- 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<String> set = new HashSet<String>();
- set.add("a");
- set.add("b");
- set.add("c");
- set.add("d");
- set.add("e");
- set.add("e");//不能放入重复数据
- /**
- * 遍历方法一,迭代遍历
- */
- for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
- System.out.print(iterator.next()+" ");
- }
- System.out.println();
- System.out.println("********************");
- /**
- * for增强循环遍历
- */
- for(String value : set){ // map.keys()
- System.out.print(value+" ");
- }
- }
- }
注意:这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。
下面分析一下Set集合的另外一个重要实现类TreeSet,
TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator
进行排序,具体取决于使用的构造方法。
通俗一点讲,就是可以按照排序后的列表显示,也可以按照指定的规则排序
- Set<String> set = new TreeSet<String>();
- 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<String> set = new TreeSet<String>(new MyComparator()); //构造方法里面传入一个对象
- /**/
- set.add("a");
- set.add("b");
- set.add("c");
- set.add("d");
- set.add("e");
- set.add("A");
- for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
- System.out.print(iterator.next()+" ");
- }
- }
- }
- class MyComparator implements Comparator<String>{
- @Override
- public int compare(String o1, String o2) {
- return o2.compareTo(o1);//降序排列
- }
- }
输出:e d c b a A
/**
java.lang.String.compareTo() 方法比较两个字符串的字典。
比较是基于字符串中的每个字符的Unicode值。此String对象表示的字符序列的参数字符串表示的字符序列进行比较字典.
- 其结果是负的整数,如果此String对象字典前面的参数字符串
- 其结果是一个正整数,如果此String对象字典如下的参数字符串
- 结果是零,如果两个字符串相等,CompareTo返回0时,equal(Object)方法将返回true。
*/
如果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<Person> set = new TreeSet<Person>(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<Person> 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<Person>{
- @Override
- public int compare(Person o1, Person o2) {
- return o1.score - o2.score;
- }
- }
输出:10 20 30 40
如果按照一个人的分数的倒序排列,只需要更改compare方法中的o2.score-o1.score
set集合的遍历(基于迭代器和增强for循环,没有一般的for循环)的更多相关文章
- Java之集合的遍历与迭代器
集合的遍历 依次获取集合中的每一个元素 将集合转换成数组,遍历数组 //取出所有的学号, 迭代之后显示学号为1004-1009 Object[] c=map.keySet().toArray();// ...
- Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历
1. Collection的迭代器: Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util ...
- [Day18]集合框架Collection、迭代器、增强for循环以及泛型
1.集合 1.1集合-本身是一个存储的容器 集合类的基本接口是Collection接口,这个接口有两个基本方法 (1)boolean add(E element) 用于向集合中添加元素,如果添加元素确 ...
- Java 中List 集合索引遍历与迭代器遍历
package yzhou.iterator; import java.util.ArrayList; import java.util.HashSet; import java.util.Itera ...
- java关于集合的遍历与增强for循环(foreach)的使用
java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合. 许多情况需要我们遍历出集合 ...
- 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义
今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...
- java基础(18):集合、Iterator迭代器、增强for循环、泛型
1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...
- 对JAVA集合进行遍历删除时务必要用迭代器
java集合遍历删除的方法: 1.当然这种情况也是容易解决,实现方式就是讲遍历与移除操作分离,即在遍历的过程中,将需要移除的数据存放在另外一个集合当中,遍历结束之后,统一移除. 2.使用Iterato ...
- day08 集合API | 遍历_ | 泛型 |增强For循环
集合(续) 集合间的操作 集合提供了如取并集,删交集,判断包含子集等操作 package collection; import java.util.ArrayList; import java.uti ...
随机推荐
- 阿里云服务器上安装mysql的详细步骤
阿里云安装mysql (1)下载mysql安装包,去mysql官网下载对应的包 mysql数据库官方下载网址: https://downloads.mysql.com/archives/commu ...
- git-github-TortoiseGit综合使用教程(二)快速入门
:建立版本库 在github网站上创建一个版本库,并复制clone地址. git@github.com:jackadam1981/Flask_Base.git https://github.com/j ...
- flask项目结构(三)使用蓝图
简介: Flask中的蓝图旨在针对这些情况: 把一个应用分解成一系列的蓝图.对于大型的应用是理想化的:一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图. 以一个 URL 前缀和/或子域 ...
- Java作业四
1.先在一个包中编写第一个类ClassA,要求该类中具有四种不同访问权限的成员,再在另一个包中编写第二个类ClassB,并在该类中编写一个方法以访问第一个类中的成员.总结类成员访问控制的基本规则. p ...
- 关于 数据库 my_slq的 安装及其卸载
安装的时候 注意事项 自定后 根据电脑的系统版本 选择32 或者64 然后选择→方向键 密码默认是123456 或者 123123 查看装的数据库是否安装好了 如何完全卸载 mysql 数据库 ...
- <context:annotation-config/>和<mvc:annotation-driven/>及解决No mapping found for HTTP request with URI [/role/getRole] in DispatcherServlet with name 'springmvc-config'
1:什么时候使用<context:annotation-config> 当你使用@Autowired,@Required,@Resource,@PostConstruct,@PreDest ...
- Bug03_SSM整合_mybatis result maps collection already contains value...
这个问题是在映射文件,但是这个映射文件是自动生成的. 所以想起来可能是在自动生成映射文件,pojo类时操作有问题.第一次运行时,出现错误,没有删除已经生成的文件就直接运行了第二次. 解决办法:删除旧的 ...
- 前端笔记 (3.JavaScript 2)
一般来说,js代码越来越庞大的时候,最好要把它存在一个js文件中, 通过src引入即可,这样具有维护性高,可缓存(加载一次,无需加载) 方便未来拓展的特性 正确写法: <script type= ...
- Tail Recusive
1.尾递归 double f(double guess){ if (isGoodEnough(guess)) return guess; else return f(improve(guess)); ...
- 2.25 js处理多窗口
2.25 js处理多窗口 前言在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来 ...