当前位置: 首页 > news >正文

java-Collection集合-Set集合

Set集合

public class demo1 {public static void main(String[] args) {//set集合的特点://Set<String> set = new HashSet<>();//经典代码。无序,不重复,无索引Set<String> set = new LinkedHashSet<>();//有序(加入时的顺序),不重复,无索引set.add("hello");set.add("world");set.add("java");set.add("hello");set.add("elysia");set.add("elysia");set.add("bronya");System.out.println(set);//TreeSet集合:排序(升序排序),无重复,无索引Set<Double> set1 = new TreeSet<>();set1.add(40.0);set1.add(10.0);set1.add(30.0);set1.add(20.0);set1.add(10.0);System.out.println(set1);}
}

HashSet集合的底层原理

  • 哈希值
    一个int类型的随机值,Java中每个对象都有一个哈希值
    java中所有对象都可调用Object类提供的hashCode方法返回对象自己的哈希值
  • 对象哈希值特点:
    同一对象多次调用hashCode()方法返回的哈希值是相同的
    不同对象的哈希值大概率不相等,也可能相等(哈希碰撞)

基于哈希表存储数据的

  • JDK8之前:哈希表=数组+链表
    1、创建一个默认长度16的数组,默认装载因子0.75,数组名table
    2、用对应元素的哈希值对数组长度做运算,计算出对应位置
    3、判断当前位置是否为null,是的话直接存入
    4、若不为null,调用equals方法比较:相等,则不存;不同,则存入

JDK8开始,当链表长度超过8,且数组长度>=64时,自动将链表转成红黑树

  • JDK8之后:哈希表=数组+链表+红黑树

LinkedHashSet

有序(加入顺序)、不重复、无索引
仍是基于哈希表实现的
每个元素都额外多了一个双链表机制记录其前后元素的位置

TreeSet

可排序,不重复,无索引
底层基于红黑树实现排序

注意
数值类型Integer,Double默认按数值本身大小进行升序排序
对字符串类型:默认按首字母编号升序排序
对自定义对象:TreeSet默认无法直接排序

自定义排序规则

//1、对象类实现Comparable接口,并重写compareTo方法,制定比较规则
public class People implements Comparable<People>{private String name;private int age;private double salary;@Overridepublic String toString() {return "People{" +"name='" + name + '\'' +", age=" + age +", salary=" + salary +'}';}//t2.compareTo(t1)//t2==this,t1==o//规定:你认为左边>右边,返回正整数;// 你认为左边<右边,返回负整数;// 你认为左边等于右边,返回0//默认就是升序@Overridepublic int compareTo(People o) {//按年龄升序return this.getAge()-o.getAge();}
}
public class demo2 {public static void main(String[] args) {//TreeSet集合对自定义对象的排序TreeSet<People> ts = new TreeSet<>(new Comparator<People>() {@Overridepublic int compare(People o1, People o2) {//return o2.getAge()-o1.getAge();/*if(o1.getSalary()>o2.getSalary()){return 1;}else if(o1.getSalary()<o2.getSalary()){return -1;}return 0;*/return Double.compare(o1.getSalary(),o2.getSalary());}});//排序,无索引,无重复//简化形式//TreeSet<People> ts = new TreeSet<>((o1,o2)->Double.compare(o1.getSalary(),o2.getSalary()));ts.add(new People("bronya", 18, 5000));ts.add(new People("elysia", 19, 6000));ts.add(new People("kiana", 20, 3000));ts.add(new People("Mae", 20, 9999));System.out.println(ts);//结论:TreeSet集合默认不能给自定义对象排序//解决://1、对象类实现Comparable接口,并重写compareTo方法,制定比较规则//2、public TreeSet(Comparator c)集合自带比较器对象,制定比较规则}
}
http://www.dtcms.com/a/400405.html

相关文章:

  • 明亮的夜晚
  • 内江建网站广州公司注册需要哪些资料
  • 仙居网站建设网络搭建是什么工作
  • 设计网站公司咨询亿企邦影视文化网站建设
  • 苏州网站推广搭建小程序要钱吗
  • 石家庄网站开发与优化html网页制作房地产页面
  • 网站怎么做二维码链接地址建筑网站建设需要注意哪些
  • 如何把怎己做的网页放到网站上开放平台模式
  • 建设项目网站wordpress还有价值么
  • 网站开发 php python公司建立网站的好处
  • 新手制作网站工具删除wordpress.org
  • 网站备案 公司wordpress注册开启邮件验证
  • 5分钟快速校准!Franka Research 3机械臂解锁科研新速度
  • 【java实现用户编辑上传图片功能】
  • 工业设计灵感网站黄石建设工程信息网
  • 职教集团网站建设方案网页编辑pdf
  • 做创意ppt网站湖南百度推广开户
  • 深圳网站建站建设公司地址美化wordpress后台
  • 网站建设的总体设计自媒体怎么注册
  • 成都市微信网站建电子商务平台网站建设方式
  • 网站浏览器图标怎么做外包活一般是怎么接的
  • 使用DLLM框架对Dream 7B模型在S1K数据集上进行有监督微调
  • linux下gcc升级
  • 卓越职业院校建设专题网站舆情管理
  • 网站建设公司擅自关闭客户网络建立网站定制
  • Python实现手榴弹爆炸算法(Grenade Explosion Method, GEM)(附完整代码)
  • 做wap网站django网站开发规范
  • 百度云网站建设视频甘肃兴城建设有限公司网站
  • 动态分配的UDP_TEST_EQUIPMENT_REQUEST端口
  • todesk远程时出现提示“正在等待对方手动授权”,需要关掉什么设置