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


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. [HDU4585]Shaolin

    Problem 问你一个数的前驱和后继 Solution Treap模板题 Notice 注意输出那个人的编号 Code #include<cmath> #include<cstdi ...

  2. 每天CSS学习之transform-origin

    在上一篇中,我们学习了如何使用transform来进行2D变形.今天要讲述的transform-origin与这个变形有关. origin翻译过来的意思是原点.开端.transform-origin寓 ...

  3. Centos7部署kubernetes API服务(四)

    1.准备软件包 [root@linux-node1 bin]# pwd /usr/local/src/kubernetes/server/bin [root@linux-node1 bin]# cp ...

  4. Centos7部署kubernetes集群CA证书创建和分发(二)

    1.解压软件包 [root@linux-node1 ~]# cd /usr/local/src/ [root@linux-node1 src]# ls k8s-v1.10.1-manual.zip [ ...

  5. SQLite3 C/C++ 开发接口简介

    SQLite3 C/C++ 开发接口简介 1.0 总览 SQLite3是SQLite一个全新的版本,它虽然是在SQLite 2.8.13的代码基础之上开发的,但是使用了和之前的版本不兼容的数据库格式和 ...

  6. L308 New brain cells made throughout life

    People keep making new brain cells throughout their lives (well at least until the age of 97), accor ...

  7. JavaWeb:指令标识

    指令标识 一.介绍 指令标识主要用于设定完整的JSP页面范围内有效的相关的信息,它是被服务器解释并执行,但是它不会在页面中显示. 二.语法格式 <%@ 指令名 属性1=“属性值1” 属性2=“属 ...

  8. Windows 窗体设计器生成的代码

    namespace 窗体的浮动及隐藏{    partial class Form1    {        /// <summary>        /// 必需的设计器变量.      ...

  9. 简单的SpringWebFlow例子及遇到的问题

    这段时间在看<Spring 实战>里面有讲Spring Web Flow,觉得里面的例子过于复杂,不适合新手,于是在网上找了个例子,跟着写 以下是项目的目录,我是基于maven搭建项目的 ...

  10. 字体图标Font Awesome 的使用

    下载地址:http://fontawesome.dashgame.com/ 将下载下来的压缩包解压,然后解压,将下载的整个文件夹复制到你的项目中,在你需要用字体图标的html中引入“font-awes ...