---------------------- android培训、java培训、期待与您交流! ----------------------
集合2-Set集合
Set集合的功能和Collection是一致的。
|--Set:元素是无序(存入和取出的顺序不一定一致),元素不可以重复。、
|--HashSet:底层数据结构是哈希表。是线程不安全的。不同步。
HashSet是如何保证元素唯一性的呢?
是通过元素的两个方法,hashCode和equals来完成。
如果元素的HashCode值相同,才会判断equals是否为true。
如果元素的hashcode值不同,不会调用equals。
注意,对于判断元素是否存在,以及删除等操作,依赖的方法是元素的hashcode和equals方法。
|--TreeSet:可以对set集合中的元素进行排序。
底层数据结构是二叉树。
保证元素唯一性的依据:
compareTo方法相同return 0.
TreeSet排序的第一种方式:让元素自身具备比较性。
元素需要实现Comparable接口,覆盖compareTo方法。
也种方式也成为元素的自然顺序,或者叫做默认顺序。
TreeSet的第二种排序方式。
当元素自身不具备比较性时,或者具备的比较性不是所需要的。
这时就需要让集合自身具备比较性。
在集合初始化时,就有了比较方式。
import java.util.*; class HashSetDemo { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { HashSet hs = new HashSet();//创建set集合 sop(hs.add("java01"));//在集合中添加元素 sop(hs.add("java01")); hs.add("java02"); hs.add("java03"); hs.add("java03"); hs.add("java04"); Iterator it = hs.iterator();//使用迭代器对集合元素进行获取 while(it.hasNext()) { sop(it.next()); } } }
往hashSet集合中存入自定对象
姓名和年龄相同为同一个人,重复元素。
import java.util.*; class HashSetTest { public static void sop(Object obj) { System.out.println(obj); } public static void main(String[] args) { HashSet hs = new HashSet();//创建一个集合 hs.add(new Person("a1",11));//在集合中添加若干元素 hs.add(new Person("a2",12)); hs.add(new Person("a3",13)); hs.add(new Person("a2",12)); hs.add(new Person("a4",14)); //sop("a1:"+hs.contains(new Person("a2",12))); hs.remove(new Person("a4",13)); Iterator it = hs.iterator();//获取迭代器 while(it.hasNext()) { Person p = (Person)it.next();//因为要使用集合中元素的特有方法,要进行强转 sop(p.getName()+"::"+p.getAge());//打印元素的属性 } } } class Person//创建一个person类 { private String name;//类中有若干成员属性 private int age; Person(String name,int age) { this.name = name; this.age = age; } //因存入到hashset中,所以覆盖hashcode和equals方法 public int hashCode() { System.out.println(this.name+"....hashCode"); return name.hashCode()+age*37;//哈希值根据姓名和年龄计算 } public boolean equals(Object obj) { if(!(obj instanceof Person))//判断是否是同一类型 return false; Person p = (Person)obj; System.out.println(this.name+"...equals.."+p.name); return this.name.equals(p.name) && this.age == p.age;//如果姓名和年龄相同,视为同一个人 } //定义获取属性的方法 public String getName() { return name; } public int getAge() { return age; } }
Treeset:
需求:
往TreeSet集合中存储自定义对象学生。
想按照学生的年龄进行排序。
记住,排序时,当主要条件相同时,一定判断一下次要条件。
当元素自身不具备比较性,或者具备的比较性不是所需要的。
这时需要让容器自身具备比较性。
定义了比较器,将比较器对象作为参数传递给TreeSet集合的构造函数。
当两种排序都存在时,以比较器为主。
定义一个类,实现Comparator接口,覆盖compare方法。
class TreeSetDemo { public static void main(String[] args) { TreeSet ts = new TreeSet();//创建一个treeSet集合 ts.add(new Student("lisi02",22));//在集合中添加若干元素 ts.add(new Student("lisi007",20)); ts.add(new Student("lisi09",19)); ts.add(new Student("lisi08",19)); //ts.add(new Student("lisi007",20)); //ts.add(new Student("lisi01",40)); Iterator it = ts.iterator();//获取迭代器 while(it.hasNext()) { Student stu = (Student)it.next();//强转 System.out.println(stu.getName()+"..."+stu.getAge());//获取元素的成员属性 } } } class Student implements Comparable//该接口强制让学生具备比较性。 { private String name; private int age; Student(String name,int age) { this.name = name; this.age = age; } //覆盖compareTo方法,是该类具有一定的比较规则 public int compareTo(Object obj) { if(!(obj instanceof Student))//判断比较的是否是同类对象 throw new RuntimeException("不是学生对象"); Student s = (Student)obj; System.out.println(this.name+"....compareto....."+s.name); if(this.age>s.age)//比较年龄 return 1; if(this.age==s.age) { return this.name.compareTo(s.name);//如果年龄相同按照姓名排序 } return -1; /**/ } public String getName() { return name; } public int getAge() { return age; } }
---------------------- android培训、java培训、期待与您交流! ----------------------
相关推荐
day03_List、Set、数据结构、Collections day04_Map,斗地主案例 day05_异常,线程 day06_线程、同步 day07_等待与唤醒案例、线程池、Lambda表达式 day08_File类、递归 day09_字节流、字符流 day10_缓冲流、转换流、...
Set1∪Set2="aegimnprz",Setl ∩Set2="ae",Set1-Set2="gimnz"。 (2)Set1= " 012oper4a6tion89",Set2="error data", Set1∪Set2="adeinoprt",Setl ∩Set2="aeort",Set1-Set2="inp"。 【实现提示】 以有序...
set1 -- 必需,要查找相同元素的集合 set2 -- 必需,可以是任何序列,可以多个,多个使用逗号 , 隔开 若是字典,按键比较 返回值:返回一个新的集合 set1={1,2,3} set2={3,4,5,2} list1=[2,3] dict1={2:9,'b':10} ...
Java-Java集合体系-List-Set 内容概要:总结了Java集体体系中的三大集合接口LIst、Set、Map,本文对LIst、Set做出了详细、简要的分析,没有冗长的文章,全是干货,下载即用,其中涉及了其底层实现,面试题必备。 ...
JavaSE专题-Set集合
例如,我们有一个列表,其中包含重复的元素: ``` lst = [1, 2, 3, 4, 1, 2, 5, 6, 3, 4] ``` 我们可以使用集合来去重: ``` s = set(lst) ``` 这将创建一个集合,其中包含不重复的元素: python-集合使用场景全文共...
离线安装包,亲测可用
P-集合是由内 P-集合XF(internal packet set XF)与外P-集合XF(outer packet set XF)构成的集合对;或者,(XF,XF)是P-集合。P-集合具有动态性,在一定条件下,P-集合被还原成有限普通集合X。P-集合是一类动态信息...
glucose-PPG-data-set-main.zip
java集合类list-set-map.doc
Domas-Breaking-The-x86-Instruction-Set-wp.pdf
-- 报错 不支持 oracle-character-set-852 pstmt.setArray(1, array); pstmt.executeUpdate(); 将10g版本配套的3个文件集中到一起, orai18n.jar classes12.jar nls_charset12.jar 防止下载的文件版本不一样,仍...
Java集合,Map,Set,List,相关对比和比较等概念,自己总结,希望能帮助到大家, Java集合,Map,Set,List,相关对比和比较等概念,自己总结,希望能帮助到大家
第11周-第12章节-Python3.5-Redis 集合set 和有序集合操作.mp4
三菱PLC FX2N-1RM-E-SET资料PDF,三菱PLC FX2N-1RM-E-SET资料
\Santosa_A-level-set-approach-for-inverse-problems-involving-obstacles.pdf
图 1 中,有 2 个集合,分别为 set1={1,2,3} 和 set2={3,4,5},它们既有相同的元素,也有不同的元素。以这两个集合为例,分别做不同运算的结果 Set(集合)——交集 1、交集 1)运算符 & 2)intersection() 方法 3)...
Set(集合)——对称差集 Set(集合)——对称交集 对称差集:取集合 A 和 B 中不属于 A&B 的元素 1)运算符 ^ 2) symmetric_ difference() 方法 3) symmetric_ difference_update() 方法 Set(集合)——对称差集...
美敦力(Medtronic)的呼吸机PB560设计资料,含有代码、原理图、机械件、生产资料、BOM等,文件共3部分,这是第1部分。
Set(集合)——并集Set(集合)——并集2、并集:取两集合全部的元素1)运算符 |2)union() 方法set1={1,2,3}set2={3,4,5}set3=set1 | set2print(set3){1, 2, 3, 4, 5}Set(集合)——并集2) union() 方法:返回两...