java零基础学习(set集合)(代码片段)

Jack+_+ Jack+_+     2022-11-29     560

关键词:

Java零基础学习(Set集合)

  • Set集合概述及特点

    概述及特点
    	一个不包含重复元素的Collection。更确切地讲,set不包含满足eq.equals(e2)的元素e1和e2,并且最包含一个null元素
    
    • HashSet存储字符串并遍历
    import java.util.HashSet;
    public class MyTest2 
        public static void main(String[] args) 
            HashSet<Integer> integers = new HashSet<>();
            integers.add(10);
            integers.add(12);
            integers.add(15);
            integers.add(null);
            integers.add(14);
            integers.add(10);
            integers.add(20);
            for (Integer integer : integers) 
                System.out.println(integer);
            
        
    
    因为Set集合有唯一性,所以就只存储了一个10,遍历的时候也只有一个10
    而且它是无序的存储的顺序和遍历的顺序并不一致
    
    • HashSet保证元素唯一性

      HashSet底层数据结构是哈希表。HashSet不是线程安全的,集合元素可以是null

      哈希表:是一个元素为链表的数组,综合了数组和链表的优点

    当向HashSet集合中存入一个元素是,HashSet会调用对象的hashCode()方法来得到该对象的hashCode值
    然后根据hashCode值决定对象在HashSet中的存储位置
    HashSet集合判断两个元素相等的标准:
    两个对象是通过hashCode()方法比较相等,并且两个对象的equals()方法的返回值也相等。
    结论:HashSet保证元素唯一性是靠元素重写hashCode()和equals()方法来保证的,如果不重写则无法保证。
    @Override
     public int hashCode() 
     // return 0;
     // 因为成员变量值影响了哈希值,所以我们把成员变量值相加即可
    	 // return this.name.hashCode() + this.age;
    	// 看下面
    	 //s1:name.hashCode()=40,age=30
    	 //s2:name.hashCode()=20,age=50
    	//尽可能的区分,我们可以把它们随变乘以一些整数
    	 return this.name.hashCode() + this.age * 15;
     
     // @Override
    // public boolean equals(Object obj) 
    // // System.out.println(this + "---" + obj);
    // if (this == obj) 
    // return true;
    // 
    //
    // if (!(obj instanceof Student)) 
    // return false;
    // 
    //
    // Student s = (Student) obj;
    // return this.name.equals(s.name) && this.age == s.age;
    // 
    //
    // @Override
    // public String toString() 
    // return "Student [name=" + name + ", age=" + age + "]";
    // 
    
    • HashSet存储自定义对象保证元素的唯一性
    1.存储自定义对象并保证元素的唯一性
    	如果两个对象的成员变量都相同就认为是同一个对象
    	
    自定义类:
    import java.util.Objects;
    public class Student 
        int age;
        String name;
        public Student()
    
        
        public Student(int age,String name)
            this.age=age;
            this.name=name;
        
    
        @Override
        public String toString() 
            return "Student" +
                    "age=" + age +
                    ", name=\'" + name + \'\\\'\' +
                    \'\';
        
    
        @Override
        public 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);
        
    
        @Override
        public int hashCode() 
            return Objects.hash(age, name);
        
    
    
    测试类:
    import java.util.HashSet;
    
    public class MyTest 
        public static void main(String[] args) 
            HashSet<Student> students = new HashSet<>();
            students.add(new Student(15,"张三"));
            students.add(new Student(15,"李四"));
            students.add(new Student(16,"张三"));
            students.add(new Student(15,"张三"));
            students.add(new Student(15,"王五"));
            students.add(new Student(15,"赵六"));
            for (Student student : students) 
                System.out.println(student);
            
        
    
    
    • HashSet存储自定义对象保证元素唯一性图解及代码优化

  • LinkedHashSet的概述和使用

1.概述
	元素有序且唯一
	数据结构有两个 链表和哈希表
	链表保证元素有序,哈希表保证元素唯一
2.演示
public class MyTest 
    public static void main(String[] args) 
        LinkedHashSet<Student> students = new LinkedHashSet<>();
        students.add(new Student(15,"张三"));
        students.add(new Student(15,"李四"));
        students.add(new Student(16,"张三"));
        students.add(new Student(15,"张三"));
        students.add(new Student(15,"王五"));
        students.add(new Student(15,"赵六"));
        for (Student student : students) 
            System.out.println(student);
        
    

输出的结果是去重之后按顺序打印
  • TreeSet存储Integer类型的元素并遍历

    1.TreeSet集合的特点
    	元素唯一,并且可以对元素进行排序
    	排序:
    		a.自然排序
    		b.使用比较器排序
    	到底使用哪一种构造方法取决于构造方法
    2.演示
    	TreeSet存储Integer类型的元素并遍历
    	存储下列元素:
    		20 , 18 , 23 , 22 , 17 , 24, 19 , 18 , 24
    public class MyTest3 
        public static void main(String[] args) 
            TreeSet<Integer> integers = new TreeSet<>();
            integers.add(20);
            integers.add(18);
            integers.add(23);
            integers.add(22);
            integers.add(17);
            integers.add(24);
            integers.add(19);
            integers.add(18);
            integers.add(24);
            for (Integer integer : integers) 
                System.out.println(integer);
            
        
    
    对元素进行了去重并且进行了排序
    
    • TreeSet保证元素唯一和自然排序的原理和图解
    原理:
    	TreeSet保证元素唯一和自然排序的原理和图解
    		是按照二叉树的数据结构,先存入一个树根,分两个叉
    		存储元素是,跟树根比较,小的放左边,大的放右边
    		如果相等就不存储
    		取得时候按照左中右的顺序来取
    

    图解:

    • TreeSet存储自定义对象并遍历练习
    创建学生类
    	让他们按照年龄排序
    	次要就是按照名字
    	
    自定义类:
    import java.util.Objects;
    public class Student implements Comparable<Student>
        int age;
        String name;
        public Student()
    
        
        public Student(int age,String name)
            this.age=age;
            this.name=name;
        
    
        @Override
        public String toString() 
            return "Student" +
                    "age=" + age +
                    ", name=\'" + name + \'\\\'\' +
                    \'\';
        
    
        @Override
        public 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);
        
    
        @Override
        public int hashCode() 
            return Objects.hash(age, name);
        
    
        @Override
        public int compareTo(Student student) 
            int a=this.age-student.age;
            int b=(a==0)?this.name.compareTo(student.name):a;
            return b;
        
    
    	
    	
    测试类:
    import java.util.TreeSet;
    public class MyTest 
        public static void main(String[] args) 
            TreeSet<Student> students = new TreeSet<>();
            students.add(new Student(15,"张三"));
            students.add(new Student(15,"李四"));
            students.add(new Student(16,"张三"));
            students.add(new Student(15,"张三"));
            students.add(new Student(18,"王五"));
            students.add(new Student(15,"赵六"));
            for (Student student : students) 
                System.out.println(student);
            
        
    
    
    • TreeSet保证元素唯一和比较其排序的原理
    import java.util.Comparator;
    import java.util.TreeSet;
    
    public class MyTest 
        public static void main(String[] args) 
            TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() 
                @Override
                public int compare(Student o1, Student o2) 
                    int a=o1.age-o2.age;
                    int b=(a==0)?o1.name.compareTo(o2.name):a;
                    return b;
                
            );
            students.add(new Student(15,"张三"));
            students.add(new Student(15,"李四"));
            students.add(new Student(16,"张三"));
            students.add(new Student(15,"张三"));
            students.add(new Student(18,"王五"));
            students.add(new Student(15,"赵六"));
            for (Student student : students) 
                System.out.println(student);
            
        
    
    
  • 产生10个1-20之间的随机数要求随机数不能重复

编写一个程序,获取10个1至20的随机数,要求随机数不能重复。
		  并把最终的随机数输出到控制台。
		  import java.util.HashSet;
import java.util.Random;

public class MyTest4 
    public static void main(String[] args) 
        HashSet<Integer> integers = new HashSet<>();
        Random random = new Random();
        while (integers.size()<=10)
            integers.add(random.nextInt(20)+1);
        
        for (Integer integer : integers) 
            System.out.println(integer);
        
    

  • 键盘录入学生信息按照总分排序后输出在控制台

	需求:键盘录入3个学生信息(姓名,语文成绩,数学成绩,英语成绩),按照总分从高到低输出到控制台。
	
自定义类
public class Student implements Comparable<Student> 
    String name;
    int chinese;
    int math;
    int english;
    int add;
    public Student()

    

    @Override
    public String toString() 
        return name+"\\t"+chinese+"\\t"+math+"\\t"+english+"\\t"+add;

    

    public Student(String name, int chinese, int math, int english) 
        this.name = name;
        this.chinese = chinese;
        this.math = math;
        this.english = english;
        this.add =chinese+math+english;
    

    @Override
    public int compareTo(Student o) 
        int i=this.add-o.add;
        int a=(i==0)?(this.chinese-o.chinese):i;
        int b=(a==0)?(this.math-o.math):a;
        int c=(b==0)?(this.english-o.english):b;
        int d=(c==0)?(this.name.compareTo(o.name)):c;
        return d;
    


测试类
import java.util.Scanner;
import java.util.TreeSet;

public class MyTest1 
    public static void main(String[] args) 
        TreeSet<Student> students = new TreeSet<>();
        for (int i=0;i<5;i++)
            Scanner sc = new Scanner(System.in);
            System.out.println("请依次输入学生的姓名,语文成绩,数学成绩,英语成绩");
            String name=sc.nextLine();
            int chinese=sc.nextInt();
            int math=sc.nextInt();
            int english=sc.nextInt();
            Student student = new Student(name, chinese, math, english);
            students.add(student);
        
        for (Student student : students) 
            System.out.println(student);
        
    

总结

Set集合也是很重要的集合,它的存储是无序而且唯一的,它也有多个子类,每一个子类都有自己独特的属性

java零基础小白学习免费教程day14-set&hashmap(代码片段)

day14_JAVAOOP课程目标1.【理解】Set集合的特点2.【理解】Set集合不重复的原理3.【掌握】HaseSet集合的基本使用4.【理解】LinkedHashSet的特点5.【理解】Map集合的特点6.【掌握】HashMap的使用7.【理解】LinkedHashMap的特点8.【掌握】Map集合的... 查看详情

尚硅谷_java零基础教程(集合collection:list,set;map)--学习笔记(代码片段)

Java集合一、Java集合框架概述1.理解2.集合框架涉及到的API二、Collection接口中的方法三、Iterator迭代器接口1.理解2.主要方法3.foreach四、Collection子接口一:List接口1.概述2.List接口的常用实现类3.接口方法五、Collection子接口二ÿ... 查看详情

pythonset集合(代码片段)

...合简介二.set集合常用函数三.set集合运算符四.猜你喜欢零基础Python学习路线推荐: Python学习目录 >> Python基础入门在Python变量中除了以前文章所提到的整形int/浮点数float/布尔值bool/ 列表list / 字典dict ... 查看详情

java零基础小白学习免费教程day13-collection&数据结构(代码片段)

day13_JAVAOOP课程目标1.【理解】集合的体系结构2.【掌握】Collection集合中常用的方法3.【理解】Iterator迭代器4.【掌握】增强for的使用5.【理解】List集合的特点6.【掌握】List集合中特有的方法7.【理解】LinkedList集合的特点8.【理解】L... 查看详情

java零基础小白学习免费教程day13-collection&数据结构(代码片段)

day13_JAVAOOP课程目标1.【理解】集合的体系结构2.【掌握】Collection集合中常用的方法3.【理解】Iterator迭代器4.【掌握】增强for的使用5.【理解】List集合的特点6.【掌握】List集合中特有的方法7.【理解】LinkedList集合的特点8.【理解】L... 查看详情

pythonfrozenset集合(代码片段)

...thonfrozenset集合语法二.Pythonfrozenset集合使用三.猜你喜欢零基础Python学习路线推荐:Python学习目录>>Python基础入门在前一篇文章中我们对Pythonset集合做了详细的讲解,而本文讲解的frozenset集合其实和set集合类似!与Pythonset集合区... 查看详情

零基础学习mongodb——集合操作(代码片段)

零基础学习MongoDB(四)——集合操作一、创建集合使用db.createCollection()方法来创建集合语法格式:db.createCollection(name,options)参数说明:name:要创建的集合名称options:可选参数,指定有关内存大小及索引的选项options可... 查看详情

零基础学习mongodb——集合操作(代码片段)

零基础学习MongoDB(四)——集合操作一、创建集合使用db.createCollection()方法来创建集合语法格式:db.createCollection(name,options)参数说明:name:要创建的集合名称options:可选参数,指定有关内存大小及索引的选项options可... 查看详情

零基础学pythonday7python基本数据类型之set(代码片段)

...n基本数据类型之Number,没学的兄弟姐妹们看这里【零基础学Python】Day6Python基本数据类型之Tuple,今天让我们开始学习Python基本数据类型集合Set吧。需注意的是,【零基础学Python】此系列都使用Python3。Python3中有6个基... 查看详情

零基础学pythonday7python基本数据类型之set(代码片段)

...n基本数据类型之Number,没学的兄弟姐妹们看这里【零基础学Python】Day6Python基本数据类型之Tuple,今天让我们开始学习Python基本数据类型集合Set吧。需注意的是,【零基础学Python】此系列都使用Python3。Python3中有6个基... 查看详情

25python基础学习-集合(代码片段)

1#!/usr/bin/envpython2#__author:hlc3#date:2019/6/145#set集合6#集合把不同的元素组成一起形成集合,集合时python的基础类型7#组成集合的成员不可重复8#a=[1,2,3,4,5,1,2,3,4,5,"a","a","a","b","b""b","c"]9#b=set(a)#通过set关键字定义集合10#print(a)#[1,2,3,4, 查看详情

尚硅谷_java零基础教程(泛型generics)--学习笔记(代码片段)

Java泛型一、为什么要有泛型1、为什么要有泛型(Generic)2、泛型的概念二、在集合中使用泛型三、自定义泛型结构1、自定义泛型结构1.1、泛型类、泛型接口1.2、泛型方法2、自定义泛型demo四、泛型在继承上的体现五、通配符的使用... 查看详情

韩顺平循序渐进学java零基础第14章集合(代码片段)

第14章集合499.集合介绍500.集合体系图Set集合体系图List集合体系图Map集合体系图501.Collection方法Collection接口没有直接的实现子类,是通过它的子接口Set和List来实现的//只要是Collection接口的是实现类都可以做实参booleanaddAll(Colle... 查看详情

spark基础-scala学习(集合)(代码片段)

集合scala的集合体系结构ListLinkedListSet集合的函数式编程函数式编程综合案例:统计多个文本内的单词总数scala的集合体系结构scala中的集合体系主要包括:Iterable、Seq、Set、Map。其中Iterable是所有集合trait的根trait。这个结构与java... 查看详情

集合的学习(代码片段)

...集合a_set=1print(a_set)type(a_set)a_set=1,2print(a_set)#2、以列表为基础创建集合a_list=[‘a‘,‘b‘,‘sicpio‘,‘ice‘,‘knight‘]#(1)创建列 查看详情

零基础学java—collection集合(三十八)(代码片段)

二、Collection常用功能Collection是所有单列集合的父接口,因此在Collection接口中定义了单列集合(List和Set)通用的一些方法,这些方法可以操作于所有的单列集合。方法如下:publicclassdemoCollectionpublicstaticvoidmain(... 查看详情

19701android零基础入门03java常用工具类04java集合03set集合01set概述

19701Android零基础入门03Java常用工具类04Java集合03Set集合01Set概述本文知识点:Set概述说明:因为时间紧张,本人写博客过程中只是对知识点的关键步骤进行了截图记录,没有对截图步骤进行详细的文字说明(后面博主时间充裕了... 查看详情

java零基础学习集合框架

  以前集合框架是面试的主要内容,但是现在因为考的太多,反而不会问太多,只要天南海北的说,说到面试官觉得你完全准备了解过,便不会再多问。这里有张自己画的图可以理解下。   查看详情