java 集合set,set是集合的意思吗

  java 集合set,set是集合的意思吗

  00-1010简介概念HashSet集合LinkedHashSet集合:TreeSet集合:实战场景

  00-1010在之前的内容中,我们先逐一介绍了集合集中有哪些种类的集合,并详细讲解了列表集中的相关知识。因此,今天,我们将详细解释收集组的另一个分支,——Set系列组。最后,我希望这篇文章可以帮助你在收集和Java的学习。好了,让我们言归正传吧。

  

目录

Set系类集合特点:

 

  乱序:访问顺序不一致,不重复:重复可以去掉,没有索引:没有带索引的方法,所以不能用普通的进行循环遍历,不能通过索引得到元素Set集合实现类特点:

  HashSet:无序、非重复、非索引。

  LinkedHashSet:有序、不重复、无索引。

  树集:已排序,不重复,无索引

  集合的功能和集合的API基本一致。

  

引言

哈希集合:

 

  SetString set=new HashSet();Set.add(石原聪美);Set.add(石原聪美);Set.add(工藤静香);Set.add(朱茵);system . out . println(set);Set.remove(朱茵);system . out . println(set);输出结果:

  通过上面的代码和运行结果,我们可以清楚的看到HashSet集合是乱序的,没有重复;

  结合上图可以看出,HashSet集合无法通过get()方法的索引来获取数据,在删除集合中的数据时,只能通过定向来删除数据。

  

概念

LinkedHashSet集合:

 

  SetString set=new linked hashset();Set.add(石原聪美);Set.add(石原聪美);Set.add(工藤静香);Set.add(朱茵);system . out . println(set);Set.remove(朱茵);system . out . println(set);输出结果:

  通过比较上面的代码和输出结果,我们可以看出无序和有序的区别。前者会打乱传入数据的顺序,后者仍然会按照输入数据的顺序存储数据,所以输出是有序的。

  

HashSet集合

树集集合:

 

  set integer set=new TreeSet();set . add(13);set . add(23);set . add(23);set . add(11);system . out . println(set);set . remove(23);system . out . println(set);输出结果:

  通过上面的代码和输出结果,我们可以从字面上理解为什么TreeSet的特点是排序,即按照Java默认的排序方式对存储的数据进行排序。

  但此时如果存储了People等自定义对象,TreeSet就不能直接排序,会报错!

  //People类:公共类people {私有字符串名;私人年龄;私人弦乐教室;public People(){ } public People(String name,int age,

  String classroom) { this.name = name; this.age = age; this.classroom = classroom; } 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 String getClassroom() { return classroom; } public void setClassroom(String classroom) { this.classroom = classroom; } @Override public String toString() { return "People{" + "name=" + name + + ", age=" + age + ", classroom=" + classroom + + }; }}//main方法:public static void main(String[] args) { Set<People> p = new TreeSet<>(); p.add(new People("张三",19,"智能")); p.add(new People("李四",18,"数据库")); p.add(new People("王五",20,"渗透")); System.out.println(p); }若想解决该问题,我们就需要为TreeSet集合自定义存储类型,现有两种方式可以解决该问题:一种是自定义类实现Comparable接口并重写里面的compareTo方法指定规则;另一种则是集合自带比较器对象进行规则定义。

  方式一:自定义类实现Comparable接口重写里面的compareTo方法指定比较规则(多余无关紧要的代码在此不再赘述了,只展示重要的那部分代码)

  

//改变的第一个地方:实现Comparable类public class People implements Comparable<People> {//改变的第二个地方:重写Comparable类中的compareTo方法 @Override public int compareTo(People o) { return this.age-o.age; }}

输出结果(根据年龄进行比较):

 

  

 

  在重写的方法中,return后面的代码决定了该对象将要根据什么准则进行比较,比较规则如下:

  如果认为第一个元素大于第二个元素返回正整数即可如果认为第一个元素小于第二个元素返回负整数即可如果认为第一个元素等于第二个元素返回0即可,此时Treeset集合只会保留一个元素,认为两者重复方式二:集合自带比较器对象进行规则定义

  

Set<People> p = new TreeSet<>(new Comparator<People>() { @Override public int compare(People o1, People o2) { return o1.getAge()-o2.getAge(); } });

在原来的基础之上对集合的创建作出改变,并且其比较准则与前面的定义方法类似,相对前面的方式,这种方式会更加方便快捷一些。在此,我们也可以回顾一些前面所学到的知识Lambda表达式,对给代码块进行化简。

 

  

Set<People> p = new TreeSet<>((o1, o2) -> o1.getAge()-o2.getAge());

如果没有学习过Lambda表达式,或者说是对Lambda表达式的知识不清晰,那么可以可以看Java中的lambda表达式如何理解——精简这篇文章的讲解,或许会对你有所帮助的。

 

  

 

  

 

  

实战场景

元素可以重复、又有索引、索引查询速度快使用ArrayList集合,基于数组

 

  元素可以重复、又有索引、增删首尾操作快使用LinkedList集合,基于链表

  增删查改快,但是元素不重复、无序、无索引使用HashSet集合,基于哈希表

  增删查改快,但是元素不重复、有序、无索引使用LinkedHashSet集合,基于哈希表和双链表

  需要对对象进行排序使用TreeSet集合,基于红黑树,后续也可以使用List集合实现

  到此这篇关于Java中的set集合是什么意思的文章就介绍到这了,更多相关javaset集合内容请搜索盛行IT以前的文章或继续浏览下面的相关文章希望大家以后多多支持盛行IT!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: