关键词:
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零基础学习集合框架
以前集合框架是面试的主要内容,但是现在因为考的太多,反而不会问太多,只要天南海北的说,说到面试官觉得你完全准备了解过,便不会再多问。这里有张自己画的图可以理解下。 查看详情