赋:开发项目中见到的代码


Java中Set集合是一个不包含重复元素的Collection,首先我们先看看遍历方法

  1. package com.sort;
  2. import java.util.HashSet;    // HashSet即是HashMap里面没有值,只有key,里面元素是无序的
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. /**
  6. * 一个不包含重复元素的 collection。更确切地讲,set 不包含满足 e1.equals(e2) 的元素对 e1 和 e2,
  7. * @author Owner
  8. *
  9. */
  10. public class SetTest2 {
  11. public static void main(String[] args) {
  12. Set<String> set = new HashSet<String>();
  13. set.add("a");
  14. set.add("b");
  15. set.add("c");
  16. set.add("d");
  17. set.add("e");
  18. set.add("e");//不能放入重复数据
  19. /**
  20. * 遍历方法一,迭代遍历
  21. */
  22. for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
  23. System.out.print(iterator.next()+" ");
  24. }
  25. System.out.println();
  26. System.out.println("********************");
  27. /**
  28. * for增强循环遍历
  29. */
  30. for(String value : set){    // map.keys()
  31. System.out.print(value+" ");
  32. }
  33. }
  34. }

注意:这里Set集合中放入的是String类型,假如我们放入一个自己定义的类实例的时候,比如Person类实例,这时候我们要自己重新hashcode和equal方法,用自己的关键字段来重写,因为当使用HashSet时,hashCode()方法就会得到调用,判断已经存储在集合中的对象的hash code值是否与增加的对象的hash code值一致;如果不一致,直接加进去;如果一致,再进行equals方法的比较,equals方法如果返回true,表示对象已经加进去了,就不会再增加新的对象,否则加进去。

下面分析一下Set集合的另外一个重要实现类TreeSet,

TreeSet使用元素的自然顺序对元素进行排序,或者根据创建 set 时提供的 Comparator 进行排序,具体取决于使用的构造方法。 

通俗一点讲,就是可以按照排序后的列表显示,也可以按照指定的规则排序

  1. Set<String> set = new TreeSet<String>();
  2. set.add("f");
  3. set.add("a");
  4. set.add("b");
  5. set.add("c");
  6. set.add("d");
  7. set.add("e");
  8. System.out.println(set);

输出:[a, b, c, d, e, f]

按照排序后输出

 

那么如果我们想让他倒序输出呢?当然方法很多。这里我采用指定一个规则让他倒序输出

  1. package com.sort;
  2. import java.util.Comparator;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. import java.util.TreeSet;
  6. public class TreeSetTest3 {
  7. public static void main(String[] args) {
  8. Set<String> set = new TreeSet<String>(new MyComparator());  //构造方法里面传入一个对象
  9. /**/
  10. set.add("a");
  11. set.add("b");
  12. set.add("c");
  13. set.add("d");
  14. set.add("e");
  15. set.add("A");
  16. for(Iterator<String> iterator = set.iterator();iterator.hasNext();){
  17. System.out.print(iterator.next()+" ");
  18. }
  19. }
  20. }
  21. class MyComparator implements Comparator<String>{
  22. @Override
  23. public int compare(String o1, String o2) {
  24. return o2.compareTo(o1);//降序排列
  25. }
  26. }

输出:e d c b a A 

/**

java.lang.String.compareTo() 方法比较两个字符串的字典。

比较是基于字符串中的每个字符的Unicode值。此String对象表示的字符序列的参数字符串表示的字符序列进行比较字典.

  • 其结果是负的整数,如果此String对象字典前面的参数字符串
  • 其结果是一个正整数,如果此String对象字典如下的参数字符串
  • 结果是零,如果两个字符串相等,CompareTo返回0时,equal(Object)方法将返回true。

*/

 

如果Set集合中放入的是我们自己定义的一个类类型呢?

 

注意:一定要定义一个排序规则类实现Comparator接口,与上面的方法类似

  1. package com.sort;
  2. import java.util.Comparator;
  3. import java.util.Iterator;
  4. import java.util.Set;
  5. import java.util.TreeSet;
  6. public class TreeSetTest2 {
  7. public static void main(String[] args) {
  8. Set<Person> set = new TreeSet<Person>(new PersonComparator());
  9. Person p1 =  new Person(10);
  10. Person p2 =  new Person(20);
  11. Person p3 =  new Person(30);
  12. Person p4 =  new Person(40);
  13. set.add(p1);
  14. set.add(p2);
  15. set.add(p3);
  16. set.add(p4);
  17. for(Iterator<Person> iterator = set.iterator();iterator.hasNext();){
  18. System.out.print(iterator.next().score+" ");
  19. }
  20. }
  21. }
  22. class Person{
  23. int score;
  24. public Person(int score){
  25. this.score = score;
  26. }
  27. public String toString(){
  28. return String.valueOf(this.score);
  29. }
  30. }
  31. class PersonComparator implements Comparator<Person>{
  32. @Override
  33. public int compare(Person o1, Person o2) {
  34. return o1.score - o2.score;
  35. }
  36. }


输出:10 20 30 40 

 

如果按照一个人的分数的倒序排列,只需要更改compare方法中的o2.score-o1.score

set集合的遍历(基于迭代器和增强for循环,没有一般的for循环)的更多相关文章

  1. Java之集合的遍历与迭代器

    集合的遍历 依次获取集合中的每一个元素 将集合转换成数组,遍历数组 //取出所有的学号, 迭代之后显示学号为1004-1009 Object[] c=map.keySet().toArray();// ...

  2. Java基础知识强化之集合框架笔记07:Collection集合的遍历之迭代器遍历

    1. Collection的迭代器: Iterator iterator():迭代器,集合的专用遍历方式 2. 代码示例: package cn.itcast_03; import java.util ...

  3. [Day18]集合框架Collection、迭代器、增强for循环以及泛型

    1.集合 1.1集合-本身是一个存储的容器 集合类的基本接口是Collection接口,这个接口有两个基本方法 (1)boolean add(E element) 用于向集合中添加元素,如果添加元素确 ...

  4. Java 中List 集合索引遍历与迭代器遍历

    package yzhou.iterator; import java.util.ArrayList; import java.util.HashSet; import java.util.Itera ...

  5. java关于集合的遍历与增强for循环(foreach)的使用

     java集合类的使用可以说是无处不在,总的我们可以将之分为三大块,分别是从Collection接口延伸出的List.Set和以键值对形式作存储的Map类型集合.      许多情况需要我们遍历出集合 ...

  6. 18_集合框架_第18天_集合、Iterator迭代器、增强for循环 、泛型_讲义

    今日内容介绍 1.集合 2.Iterator迭代器 3.增强for循环 4.泛型 01集合使用的回顾 *A:集合使用的回顾 *a.ArrayList集合存储5个int类型元素 public stati ...

  7. java基础(18):集合、Iterator迭代器、增强for循环、泛型

    1. 集合 1.1 集合介绍 集合,集合是java中提供的一种容器,可以用来存储多个数据. 在前面的学习中,我们知道数据多了,可以使用数组存放或者使用ArrayList集合进行存放数据.那么,集合和数 ...

  8. 对JAVA集合进行遍历删除时务必要用迭代器

    java集合遍历删除的方法: 1.当然这种情况也是容易解决,实现方式就是讲遍历与移除操作分离,即在遍历的过程中,将需要移除的数据存放在另外一个集合当中,遍历结束之后,统一移除. 2.使用Iterato ...

  9. day08 集合API | 遍历_ | 泛型 |增强For循环

    集合(续) 集合间的操作 集合提供了如取并集,删交集,判断包含子集等操作 package collection; import java.util.ArrayList; import java.uti ...

随机推荐

  1. 阿里云服务器上安装mysql的详细步骤

    阿里云安装mysql (1)下载mysql安装包,去mysql官网下载对应的包 mysql数据库官方下载网址:   https://downloads.mysql.com/archives/commu ...

  2. git-github-TortoiseGit综合使用教程(二)快速入门

    :建立版本库 在github网站上创建一个版本库,并复制clone地址. git@github.com:jackadam1981/Flask_Base.git https://github.com/j ...

  3. flask项目结构(三)使用蓝图

    简介: Flask中的蓝图旨在针对这些情况: 把一个应用分解成一系列的蓝图.对于大型的应用是理想化的:一个项目能实例化一个应用, 初始化一些扩展,以及注册一系列的蓝图. 以一个 URL 前缀和/或子域 ...

  4. Java作业四

    1.先在一个包中编写第一个类ClassA,要求该类中具有四种不同访问权限的成员,再在另一个包中编写第二个类ClassB,并在该类中编写一个方法以访问第一个类中的成员.总结类成员访问控制的基本规则. p ...

  5. 关于 数据库 my_slq的 安装及其卸载

    安装的时候 注意事项 自定后 根据电脑的系统版本 选择32  或者64  然后选择→方向键 密码默认是123456  或者  123123 查看装的数据库是否安装好了 如何完全卸载 mysql 数据库 ...

  6. <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 ...

  7. Bug03_SSM整合_mybatis result maps collection already contains value...

    这个问题是在映射文件,但是这个映射文件是自动生成的. 所以想起来可能是在自动生成映射文件,pojo类时操作有问题.第一次运行时,出现错误,没有删除已经生成的文件就直接运行了第二次. 解决办法:删除旧的 ...

  8. 前端笔记 (3.JavaScript 2)

    一般来说,js代码越来越庞大的时候,最好要把它存在一个js文件中, 通过src引入即可,这样具有维护性高,可缓存(加载一次,无需加载) 方便未来拓展的特性 正确写法: <script type= ...

  9. Tail Recusive

    1.尾递归 double f(double guess){ if (isGoodEnough(guess)) return guess; else return f(improve(guess)); ...

  10. 2.25 js处理多窗口

    2.25 js处理多窗口 前言在打开页面上链接的时候,经常会弹出另外一个窗口(多窗口情况前面这篇有讲解:Selenium2+python自动化13-多窗口.句柄(handle)),这样在多个窗口之间来 ...