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


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. [HDU3726]Graph and Queries

    Problem 给你一张图,点的权值,边和几个操作: D x: 删除第x条边 Q x y: 询问包含x的联通块中权值第y大的权值 C x y: 将x这个点的权值改为y Solution 一看就要离线处 ...

  2. xml解析与生成的学习资料

    xml解析与生成的学习资料:http://blog.csdn.net/u012325167/article/category/6129813 ----------------------------- ...

  3. C++ STL string对象操作汇总

    string对象 C语言只提供了一个char类型用来处理字符,而对于字符串,只能通过字符串数组来处理,显得十分不便.C++STL提供了string基本字符系列容器来处理字符串,可以把string理解为 ...

  4. JavaScript+CSS+DIV实现下拉菜单示例

    <!DOCTYPE html> <html> <head> <title>下拉菜单示例</title> <script languag ...

  5. 关于这次安装Oracle

    前后大概经历了一个星期,今天下午(先是用的Navicat)当我尝试性的把用户名上方的复选项从服务名换成SID时,竟然瞬间连接成功了,整个人都是蒙B的,这样就好了? 之后我又用PLsql测试了一下,秒进 ...

  6. Androi开发 ---Fragment片段布局案例

    效果图: 1.MainActivity.java package com.example.android_activity; import android.app.Activity; import a ...

  7. Thread.join方法的解析(转)

    原文链接:https://www.cnblogs.com/huangzejun/p/7908898.html 1. join() 的示例和作用 1.1 示例 1 // 父线程 2 public cla ...

  8. 矩震级Mw与地震矩M0的换算关系

    矩震级实质上就是用地震矩来描述地震的大小.地震矩是震源的等效双力偶中的一个力偶的力偶矩,是继地震能量后的第二个关于震源定量的特征量,一个描述地震大小的绝对力学量,单位为N.m(牛.米),其表达式为: ...

  9. js 数组去重的几种方式及原理

    let arr = [1,1,'true','true',true,true,15,15,false,false, undefined,undefined, null,null, NaN, NaN,' ...

  10. day 26面向对象 的封装 接口 抽象

    大纲分析 # 面向对象# 类 :一类具有相同属性和方法的事物 #类的定义:class #类中可以定义的方法种类: #普通方法 self 对象 #类方法 cls @classmethod 类/对象 #静 ...