前言


目录

一、set的特点

1、不可重复

2、无序

注意:不重复必须是基本数据类型&String,引用数据不可,当你new一个String时该String是引用数据类型

二、set的遍历方式

1、foreach遍历

2、迭代器遍历

三、HashSet哈希表存储,重复元素存储底层探究

四、TreeSet

1、自然排序

2、比较器排序


一、set的特点

1、不可重复

2、无序


代码段(不重复):

package com.zwc.set;import java.util.HashSet;
import java.util.Iterator;/*** set集合的特点:* 不重复(基本数据类型&String)* 无序* @author Administrator**/
public class Demo1 {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();set.add("zs");set.add("ls");set.add("ww");set.add("老六");set.add("ls");System.out.println(set.size());}
}

 运行结果:

 注意:不重复必须是基本数据类型&String,引用数据不可,当你new一个String时该String是引用数据类型

二、set的遍历方式

        1、foreach遍历

        2、迭代器遍历

代码如下(foreach遍历):

package com.zwc.set;import java.util.HashSet;
import java.util.Iterator;/*** set集合的特点:* 不重复(基本数据类型&String)* @author Administrator**/
public class Demo1 {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();set.add("zs");set.add("ls");set.add("ww");set.add("laoliu");set.add("ls");//System.out.println(set.size());//      遍历方式System.out.println("--------------增强for------------");for (Object obj : set) {System.out.println(obj);}System.out.println("--------------迭代器------------");Iterator<Object> it = set.iterator();while(it.hasNext()) {System.out.println(it.next());}}
}

运行结果:

三、HashSet哈希表存储,重复元素存储底层探究

结论:set集合去重原理
                 1、set去重底层原理是与对象的hashCode以及equals方法相关
                 2、判断重复元素的时候,是比较hashCode值,在调用equals比较内容

代码如下:

package com.zwc.set;import java.util.HashSet;/*** set集合去重原理* 1、set去重底层原理是与对象的hashCode以及equals方法相关* 2、判断重复元素的时候,是比较hashCode值,在调用equals比较内容* @author Administrator**/
public class Demo2 {public static void main(String[] args) {HashSet<Object> set = new HashSet<>();set.add(new Person("zs", 18));set.add(new Person("ls", 18));set.add(new Person("ww", 18));set.add(new Person("老六", 18));set.add(new Person("zs", 18));System.out.println(set.size());}
}
class Person /*implements Comparable<Person>*/{private String name;private int age;private int level;public Person(String name, int age, int level) {super();this.name = name;this.age = age;this.level = level;}public int getLevel() {return level;}public void setLevel(int level) {this.level = level;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public Person() {// TODO Auto-generated constructor stub}public Person(String name, int age) {super();this.name = name;this.age = age;}@Overridepublic String toString() {return "Person [name=" + name + ", age=" + age + ", level=" + level + "]";}@Overridepublic int hashCode() {System.out.println("---------hashCode-------------");final int prime = 31;int result = 1;result = prime * result + age;result = prime * result + ((name == null) ? 0 : name.hashCode());return 1;}@Overridepublic boolean equals(Object obj) {System.out.println("---------equeals-------------");if (this == obj)return true;if (obj == null)return false;if (getClass() != obj.getClass())return false;Person other = (Person) obj;if (age != other.age)return false;if (name == null) {if (other.name != null)return false;} else if (!name.equals(other.name))return false;return true;}
//  @Override
//  public int compareTo(Person o) {
//      int levelRes = this.level - o.level;
//      return levelRes == 0 ? this.age - o.age : levelRes;
//  }
//  }

效果如下:

四、TreeSet

1、自然排序

2、比较器排序

  自然排序: java.lang.Comparable:自然排序 排序的规则是单一的,不能应对复杂的变化的需求

        比较器排序:java.util.comparator

        当你定义一个对象把它加到Treeset中,则该对象必须实现Comparable接口,不然会报异常:  ClassCastException类型转换接口

        案例:

 代码如下:

package com.zwc.set;import java.util.Comparator;
import java.util.TreeSet;public class Demo3 {public static void main(String[] args) {/*** 需求1:从xxx公司,拿到用户数据,需要根据用户的级别,进行会议的排序* 需求2:* 按年龄进行升序,打印出人员信息* 需求3:* 按照用户首字母排序*/
//      ClassCastException类型转换接口
//      Exception in thread "main" java.lang.ClassCastException:
//      com.zwc.set.Person cannot be cast to java.lang.Comparable//按年龄排序
//      TreeSet set  = new TreeSet<>(new levelCompartor());//按名字排序
//  TreeSet<Person> set  = new TreeSet<>((x,y)->x.getName().compareTo(y.getName()));                      //按年龄排序TreeSet<Person> set  = new TreeSet<>((x,y)->{int ageRes = x.getAge() - y.getAge();int levelRes = 0;if(ageRes==0) {levelRes = x.getLevel() - y.getLevel();}else {return ageRes;}return levelRes;});set.add(new Person("zs", 18, 1));set.add(new Person("ls", 24, 4));set.add(new Person("ww", 26, 2));set.add(new Person("laoliu", 20, 3));set.add(new Person("bajie", 18, 3));for (Object object : set) {System.out.println(object);}}public static void main2(String[] args) {/*** 需求1:从xxx公司,拿到用户数据,需要根据用户的级别,进行会议的排序* 张三 部门经理 1* 李四 普通员工 3* 王五 部门经理 2* * 现象:* 1、String默认是能够排序* 2、自定义的对象无法排序 ,报类型转换异常* * 需求2:* 按年龄进行升序,打印出人员信息* * 需求3:* 按照用户首字母排序*/TreeSet set1  = new TreeSet<>();set1.add("2");set1.add("4");set1.add("6");set1.add("7");set1.add("8");set1.add("1");for (Object object : set1) {System.out.println(object);}//       ClassCastException类型转换接口
//      Exception in thread "main" java.lang.ClassCastException:
//      com.zwc.set.Person cannot be cast to java.lang.ComparableTreeSet set  = new TreeSet<>();set.add(new Person("zs", 18, 1));set.add(new Person("ls", 24, 4));set.add(new Person("ww", 26, 2));set.add(new Person("laoliu", 20, 3));set.add(new Person("bajie", 18, 3));for (Object object : set) {System.out.println(object);}}
}
class levelCompartor implements Comparator<Person>{@Overridepublic int compare(Person o1, Person o2) {int levelRes = o1.getLevel() - o2.getLevel();return levelRes==0? o1.getAge() - o2.getAge():levelRes;}}

运行结果


                                                                                        今天的内容分享结束!

J2EE基础之集合框架set相关推荐

  1. J2EE基础:集合框架—List

    文章目录 本节总结知识网思维导图 一.特点 二.遍历 1.fori 2.foreach 3.iter ator(迭代器) 三.LinkedList 四.增长 因子论证 五.集合框架ArrayList中 ...

  2. Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  3. java把map值放入vector_Thinking in java基础之集合框架

    Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...

  4. java list 差集_Java基础之集合框架

    Java 集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器 ...

  5. 7.Java基础之集合框架+JDK8新特性

    1.集合概述 1.1 为什么学集合 思考:数组有什么缺点? 长度一旦定义,不能改变!定义大了,浪费空间:小了,可能不够 ---->动态的数组 对于增删,需要移动位置 ->有人帮我们做这个事 ...

  6. java集合框架中抽象有序列表的接口是_JAVA基础接口集合框架

    接口 -------------------------------------------------------------------------------- 一.接口(是一种规范) 1.接口 ...

  7. java基础复习-集合框架(1)

    java集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素:另一个是 Map 接口,主要用于存放键值对.对于Collection ...

  8. Java基础_集合框架1

    一.集合框架(体系概述) 为什么会出现集合框架(集合类)? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合框架 ...

  9. Java基础(集合框架——Collection、List、Set、泛型)

    为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多 个对象的操作,就对对象进行存储,集合就是存储对象常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储 ...

最新文章

  1. 一种新的攻击方式:使用Outlook 表单进行横向渗透和常驻
  2. Gartner 发布《2017 年新兴技术成熟度曲线图》
  3. C++中创建二维数组的几种方法
  4. Servlet基础(三) Servlet的多线程同步问题
  5. JavaScript instanceof 运算符深入剖析
  6. QT实现自定义3D材质
  7. php rdkafka实例,kafka 消息队列 php-rdkafka扩展示例
  8. CSS2-3常见的demo列子总结
  9. asp.net如何取得纯客户端控件的值
  10. 人工智能 - paddlepaddle飞桨 - 入门之安装教程
  11. 温升测试总结setllom解胶剂
  12. iOS开发-CocoaPods使用详细说明
  13. java接口参数类型为枚举_Spring MVC处理参数中的枚举类型通用实现方法
  14. .NET自动服务程序—C#
  15. 资源 | 邓力、刘洋等合著的这本NLP经典书籍之情感分析中文版
  16. latex 如何添加圆圈数字?
  17. fastgame文档
  18. the JDBC Driver has been forcibly unregistered;tomcat总是memory leak问题 ,为了防止内存泄漏,jdbc驱动程序已强制取消注册
  19. 乐器php毕业论文,打击乐器在音乐课堂教学中的应用
  20. 小米开发平台上架APP

热门文章

  1. 学IT什么培训机构比较好?
  2. 关于怎样把普通usb摄像头图像发布到ros的topic
  3. Q2净利同比下降50%,英伟达股价为何反涨?
  4. wowtroll是什么种族_计算机是种族主义者是我们的错
  5. (附源码)计算机毕业设计ssm服装创意定制管理系统
  6. 2021上半年计算机技术与软件专业技术资格考试——中级软件设计师 经验分享
  7. Editplus同步阅览两个文件
  8. 医学配准软件ants和相关python库antspy的介绍和安装
  9. 人力资源管理五项工具
  10. hdu 4396 More lumber is required