前言:这篇文章就是讲set集合的内容,跟上篇list刚加凑成一对

Set系列集合:添加的元素是无序,不重复,无索引

HashSet:无序,不重复,无索引

LinkedHashSet:有序,不重复,无索引

TreeSet:默认升序, 不重复,无索引

哈希值:是JDK根据对象的地址,按照某种规则算出来的int类型的数值

Object类的API:public int hashCode():返回对象的哈希值

对象的哈希值特点:

1.0同一个对象多次调用hashCode()方法返回的哈希值是相同的

2.0默认情况下,不同对象的哈希值是不同的

package Set_map;public class set1 {public static void main(String[] args) {String name="maria0";System.out.println(name.hashCode());System.out.println(name.hashCode());//输出的结果相同}
}

1.去重复

在向集合中存入元素的时候,为了保证结合正常工作,在存入元素的时候是需要重写Object类中的hashCode()和equals()方法,需要自己重写hashCode()和equals()方法,如果不重写这两种方法就可能会导致集合中出现重复的元素

具体操作:

package Set_map;import java.util.HashSet;
import java.util.Set;public class Set2 {public static void main(String[] args) {//Set集合去重复原因:先判断哈希值,再判断equalsSet<Student>sets=new HashSet<>();Student s1=new Student("小米",20);Student s2=new Student("小米",20);Student s3=new Student("小花",20);System.out.println(s1.hashCode());System.out.println(s2.hashCode());System.out.println(s3.hashCode());//s1和s2的返回的数值是一样的sets.add(s1);sets.add(s2);sets.add(s3);for(Student s:sets){System.out.println(s.toString());}}
}
package Set_map;import java.util.Objects;public class Student {private String name;private int age;public Student() {}public Student(String name, int age) {this.name = name;this.age = age;}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;}@Overridepublic boolean equals(Object o) {if (this == o) return true;if (o == null || getClass() != o.getClass()) return false;Student student = (Student) o;return age == student.age && Objects.equals(name, student.name);}@Overridepublic int hashCode() {return Objects.hash(name, age);}public String toString(){return name+":"+age;}
}

结果:

2.LinkedHashSet集合

LinkedHashSet:有序,不重复,无索引

原理:底层基于哈希表,使用双链表记录添加顺序

3.TreeSet集合

TreeSet:默认升序, 不重复,无索引

对于数值类型:Integer Double默认按照大小进行升序

对于字符串类型:按照首字符编号升序

对于自定义类型:无法直接排序//需要定义排序规则(两种方式)

方式一:让自定义的类(如学生类)实现Comparable接口重写里面的compareTo方法来指定规则

方式二:TreeSet集合有参构造器,可以设置Comparator接口对应的比较器对象,指定规则

两种方式中,关于返回值规则:

第一个元素>第二个元素 返回正整数

第一个元素<第二个元素 返回负整数

第一个元素=第二个元素 返回0,此时Treeset只会保留一个元素

注意:如果TreeSet集合存储对象有实现比较的规则集合也自带比较器,默认使用集合自带比较器

package Set_map;import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;public class Set3 {public static void main(String[] args) {
//方式二Set<Apple> apples=new TreeSet<>(new Comparator<Apple>() {@Overridepublic int compare(Apple o1, Apple o2) {return o1.getWeight()-o2.getWeight()>=0?1:-1;//升序}});apples.add(new Apple("红富士","红色",9.9,500));apples.add(new Apple("黄富士","黄色",10.9,400));apples.add(new Apple("粉富士","粉色",8.9,100));apples.add(new Apple("蓝富士","蓝色",9.2,500));System.out.println(apples);}
}
package Set_map;public class Apple implements Comparable<Apple>{private String name;private String color;private double price;private int weight;public Apple() {}public Apple(String name, String color, double price, int weight) {this.name = name;this.color = color;this.price = price;this.weight = weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}@Overridepublic String toString() {return "Apple{" +"name='" + name + '\'' +", color='" + color + '\'' +", price=" + price +", weight=" + weight +'}';}/*** //方式一:类定义比较规则* @param o the object to be compared.* @return*/@Overridepublic int compareTo(Apple o) {//按照重量return this.weight-o.weight>=0?1:-1;//这样两个500都能保存,如果只写this.weight-o.weight,则会过滤掉一个500}
}

总结:

1.0如果希望元素可重复,有索引,索引查询快?

用ArrayList集合,基于数组

2.0如果希望元素可重复,有索引,增删首尾操作快?

用LinkedList集合,基于链表

3.0如果希望增删查改都快,但元素不重复,无序,无索引?

用HashSet集合,基于哈希表

4.0如果希望增删查改都快,但元素不重复有序,无索引?

用LinkedHashSet集合,基于哈希表和双链表

 4.可变参数

格式:数据类型...参数名称

int...num1

作用:可以传1个/多个/不传/传输一个数组

package Set_map;import java.util.Arrays;public class kebiancans {public static void main(String[] args) {sum();//不传参数sum(10);//一个sum(10,20,30);//多个sum(new int[]{10,20,30,40,50});//传输一个数组}public static void sum(int ...nums){//可变参数在方法内部就是一个数组System.out.println("元素个数"+nums.length);System.out.println("元素内容"+ Arrays.toString(nums));}
}

注意事项:

1.0一个形参列表中可变参数只能有一个

2.0可变参数必须放在形参列表最后面public static void sum(int age,int ...nums)

5.工具类Collections

1.0给集合对象批量加元素   addAll

package Set_map;import java.util.ArrayList;
import java.util.Collections;
import java.util.List;public class kebiancans2 {public static void main(String[] args) {List<String> names=new ArrayList<>();//names.add("apple");//names.add("banana");//names.add("cat");//names.add("dog");//批量加元素,快!Collections.addAll(names,"apple","banana","cat","dog");System.out.println(names);}
}

<List>2.0打乱集合顺序:shuff

  Collections.shuffle(names);System.out.println(names);

<List>3.0将集合中元素按照默认/指定规则排序 sort

方式一:sort(List<T>list)将集合中元素按照默认规则排序

 List<Integer> sets=new ArrayList<>();Collections.addAll(sets,23,6,56);Collections.sort(sets);System.out.println(sets);

本方式不可以对自定义的List集合排序,除非自定义类型实现了比较规则Comparable接口

代码演示:

package System;import java.util.*;public class dd11 {public static void main(String[] args) {List<Apple>apples=new ArrayList<>();apples.add(new Apple("红富士","红色",9.9,500));apples.add(new Apple("黄富士","黄色",10.9,400));apples.add(new Apple("粉富士","粉色",8.9,100));apples.add(new Apple("蓝富士","蓝色",9.2,500));Collections.sort(apples);System.out.println(apples);//Apple类里面重写了规则}
}
package System;public class Apple implements Comparable<Apple>{private String name;private String color;private double price;private int weight;public Apple() {}public Apple(String name, String color, double price, int weight) {this.name = name;this.color = color;this.price = price;this.weight = weight;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getWeight() {return weight;}public void setWeight(int weight) {this.weight = weight;}@Overridepublic String toString() {return "Apple{" +"name='" + name + '\'' +", color='" + color + '\'' +", price=" + price +", weight=" + weight +'}';}@Overridepublic int compareTo(Apple o) {return this.weight-o.weight;//List集合中存储相同大小的元素 会保留}
}

 需要注意:list集合中存储相同大小的元素会保留,这点与TreeSet不同,需要注意

方式二:sort(List<T>list,Comparator<? super T>c)将集合中元素按照指定规则排序

不展示类,上面有

package System;import java.util.*;public class dd11 {public static void main(String[] args) {List<Apple>apples=new ArrayList<>();apples.add(new Apple("红富士","红色",9.9,500));apples.add(new Apple("黄富士","黄色",10.9,400));apples.add(new Apple("粉富士","粉色",8.9,100));apples.add(new Apple("蓝富士","蓝色",9.2,500));//Collections.sort(apples);//System.out.println(apples);//Apple类里面重写了规则//方式二Collections.sort(apples, new Comparator<Apple>() {@Overridepublic int compare(Apple o1, Apple o2) {return Double.compare(o1.getPrice(), o2.getPrice());}});System.out.println(apples);}
}

==================================================

Map集合体系下篇文章再说

暑假篇之每周两篇4.0(下)补充相关推荐

  1. 计算机博士两篇一区两篇会议,本科博士联手!西电陈渤团队两篇论文被顶级会议录用...

    第34届神经信息处理系统大会(Neural Information Processing Systems, NeurIPS,https://neurips.cc/)将于12月06日-12月12日,通过 ...

  2. 中科院自动化所目标跟踪论文整理!三篇综述、两篇ICCV 2019!

    点上方蓝字计算机视觉联盟获取更多干货 在右上方 ··· 设为星标 ★,与你不见不散 编辑:Sophia 计算机视觉联盟  报道  | 公众号 CVLianMeng 转载于 :会议之眼 一 单目标跟踪综 ...

  3. 传感器标定两篇顶会论文解析

    传感器标定两篇顶会论文解析 一.在城市环境中的多个3D激光雷达的自动校准 标题:Automatic Calibration of Multiple 3D LiDARs in Urban Environ ...

  4. 机器人导航两篇顶级会议论文解析

    机器人导航两篇顶级会议论文解析 一.一种用于四旋翼无人机室内自主导航的卷积神经网络特征检测算法 标题:A Convolutional Neural Network Feature Detection ...

  5. Facebook 田渊栋:NeurIPS 2020 中了两篇,感觉还算不错

    作者 | 田渊栋 编辑 | 陈大鑫 转自 | AI科技评论 做理论需要的基础知识多,困难,周期长,没有直接经济效益,还只能一两个人单打独斗且无法使用大量计算资源,每个因素都和现在的主流发展方向(强调团 ...

  6. 95后博士生曹原连发两篇Nature,均为一作,网友:这才是真正的后浪

    点击上方"AI遇见机器学习",选择"星标"公众号 重磅干货,第一时间送达 石墨烯研究领域的「巨浪」再次掀起! 当地时间 5 月 6 日,中科大 2010 级少年 ...

  7. 分享两篇Google Map API的介绍

    这两篇文章也不知道我是什么时候下载下来的,一直丢在桌面上没有看,但终于在年后无聊就看了一下,结果让我心潮澎湃,一起哈成了"都让Google做了我们还做什么?(WebMap方向)"一 ...

  8. affectnet数据集_处理表情识别中的坏数据:一篇CVPR 2020及两篇TIP的解读

    机器之心分析师网络 作者:周宇 编辑:Joni Zhong 本篇提前看重点关注 CVPR 2020 中的这篇「Suppressing Uncertainties for Large-Scale Fac ...

  9. 北航成AAAI 2021最大赢家,两篇一作斩获最佳论文、提名奖,研究皆与Transformer相关...

    杨净 发自 凹非寺 量子位 报道 | 公众号 QbitAI 当地时间2月4日,AAAI 2021最佳论文奖出炉! 由AAAI 2021程序委员会主席Mausam在开幕式上宣布,共有3篇论文获得了最佳论 ...

最新文章

  1. 安装python,如果让升级版本的话
  2. 一生中需要的10种人脉
  3. [MIPS汇编语言]InsertionSort插入排序
  4. ML之RFXGBoost:分别基于RF随机森林、XGBoost算法对Titanic(泰坦尼克号)数据集进行二分类预测(乘客是否生还)
  5. php拒绝服务,CVE-2015-7803
  6. linux lvm 查看,Linux LVM 详解
  7. CSUOJ修墙壁C语言,棋牌挂怎么编写 -棋牌挂怎么编写V6.1.16
  8. 在linux下磁盘挂在操作,linux下挂载磁盘操作
  9. php如何查看openssl扩展安装成功,php如何安装openssl扩展
  10. java语言定义一个具备栈功能的类_Java学习笔记 第二章 Java语言基础
  11. Ubuntu火狐浏览器无法输入简体中文的解决方案
  12. linux学习笔记:linux中查看文件内容的命令
  13. imindmap12新版本 思维导图软件
  14. 宽带波形测试软件,适用于5G时代的波形测试分析系统是怎样的? - 全文
  15. 软件项目管理1:开发计划和版本计划举例
  16. busboy文件上传遇到的坑,已解决
  17. 基于微信小程序的毕业设计题目(21)php电子商务购物商城小程序(含开题报告、任务书、中期报告、答辩PPT、论文模板)
  18. pcie数据反_理解PCIE链路反转和极性反转
  19. 小白如何入门单片机?几个建议助你提高学习效率,把握学习方向
  20. 1.Balls Bins

热门文章

  1. 【总结】Vue+arcgis
  2. 【HDOJ】4704 Sum_天涯浪子_新浪博客
  3. 读书笔记——上瘾:让用户养成使用习惯的四大产品逻辑
  4. 【精】LintCode领扣算法问题答案:316. 组合集
  5. Windows11 任务管理器的几种打开方式
  6. 谷粒商城-分布式基础篇-环境搭建
  7. 护卫神 主机大师 MySQL无法远程连接的解决方案
  8. 《共轭梯度法》读书笔记(一)——最速下降法
  9. 一文详解TDSQL PG版Oracle兼容性实践
  10. Android和iOS静态代码扫描工具