J2EE基础之集合框架set
前言
目录
一、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相关推荐
- J2EE基础:集合框架—List
文章目录 本节总结知识网思维导图 一.特点 二.遍历 1.fori 2.foreach 3.iter ator(迭代器) 三.LinkedList 四.增长 因子论证 五.集合框架ArrayList中 ...
- Thinking in java基础之集合框架
Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...
- java把map值放入vector_Thinking in java基础之集合框架
Thinking in java基础之集合框架 大家都知道我的习惯,先上图说话. 集合简介(容器) 把具有相同性质的一类东西,汇聚成一个整体,就可以称为集合,例如这里有20个苹果,我们把每一个苹果当成 ...
- java list 差集_Java基础之集合框架
Java 集合框架概述 一方面, 面向对象语言对事物的体现都是以对象的形式,为了方便对多个对象的操作,就要对对象进行存储.另一方面,使用Array存储对象方面具有一些弊端,而Java 集合就像一种容器 ...
- 7.Java基础之集合框架+JDK8新特性
1.集合概述 1.1 为什么学集合 思考:数组有什么缺点? 长度一旦定义,不能改变!定义大了,浪费空间:小了,可能不够 ---->动态的数组 对于增删,需要移动位置 ->有人帮我们做这个事 ...
- java集合框架中抽象有序列表的接口是_JAVA基础接口集合框架
接口 -------------------------------------------------------------------------------- 一.接口(是一种规范) 1.接口 ...
- java基础复习-集合框架(1)
java集合概述 Java 集合, 也叫作容器,主要是由两大接口派生而来:一个是 Collection接口,主要用于存放单一元素:另一个是 Map 接口,主要用于存放键值对.对于Collection ...
- Java基础_集合框架1
一.集合框架(体系概述) 为什么会出现集合框架(集合类)? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,就对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合框架 ...
- Java基础(集合框架——Collection、List、Set、泛型)
为什么出现集合类? 面向对象语言对事物的体现都是以对象的形式,所以为了方便对多 个对象的操作,就对对象进行存储,集合就是存储对象常用的一 种方式. 数组和集合类同是容器,有何不同? 数组虽然也可以存储 ...
最新文章
- 一种新的攻击方式:使用Outlook 表单进行横向渗透和常驻
- Gartner 发布《2017 年新兴技术成熟度曲线图》
- C++中创建二维数组的几种方法
- Servlet基础(三) Servlet的多线程同步问题
- JavaScript instanceof 运算符深入剖析
- QT实现自定义3D材质
- php rdkafka实例,kafka 消息队列 php-rdkafka扩展示例
- CSS2-3常见的demo列子总结
- asp.net如何取得纯客户端控件的值
- 人工智能 - paddlepaddle飞桨 - 入门之安装教程
- 温升测试总结setllom解胶剂
- iOS开发-CocoaPods使用详细说明
- java接口参数类型为枚举_Spring MVC处理参数中的枚举类型通用实现方法
- .NET自动服务程序—C#
- 资源 | 邓力、刘洋等合著的这本NLP经典书籍之情感分析中文版
- latex 如何添加圆圈数字?
- fastgame文档
- the JDBC Driver has been forcibly unregistered;tomcat总是memory leak问题 ,为了防止内存泄漏,jdbc驱动程序已强制取消注册
- 乐器php毕业论文,打击乐器在音乐课堂教学中的应用
- 小米开发平台上架APP