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


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. git-github-TortoiseGit综合使用教程(二)快速入门

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

  2. 下载python中package的简便方法

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple xxx

  3. 某些material英文翻译

    chrome  铬,铬合金, 镀铬 matte  无光泽的,不光滑的 Decal   陶瓷的 duo color  双色 livery  (这个没找到什么吊意思,我看像是一个类似打logo的材质)

  4. Cracking The Coding Interview 1.2

    //原文: // // Write code to reverse a C-Style String. (C-String means that "abcd" is represe ...

  5. CreateThread和_beginthread区别及使用

    CreateThread 是一个Win 32API 函数, _beginthread 是一个CRT(C Run-Time)函数, 他们都是实现多线城的创建的函数,而且他们拥有相同的使用方法,相同的参数 ...

  6. DevExpress v18.1新版亮点——CodeRush for VS篇(一)

    用户界面套包DevExpress v18.1日前正式发布,本站将以连载的形式为大家介绍各版本新增内容.本文将介绍了CodeRush for Visual Studio v18.1 的新功能,快来下载试 ...

  7. 201621123001 《Java程序设计》第9周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 1.2 选做:收集你认为有用的代码片段 关于泛型 <T extends Comparable <T ...

  8. U盘如何去除写保护

    用一个简单而粗暴的方法去除U盘写保护: www.upantool.com/hfxf/xiufu//FormatTool.html#softdown 没有比这个更牛的软件了.

  9. 我有特殊的Windows激活姿势

    一直都在用的激活姿势,给大家分享下~ 保存为 .cmd 文件 右键->以管理员身份运行 @echo off setlocal EnableDelayedExpansion & cd /d ...

  10. PCMU G.711U/PCMA G.711A简介

    PCMA(G.711A) 类型:Audio 制定者:ITU-T 所需频宽:64Kbps(90.4) 特性:PCMU和PCMA都能提供较好的语音质量,但是它们占用的带宽较高,需要64kbps. 优点:语 ...