|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2)` |
返回一个包含两个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3)` |
返回一个包含三个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4)` |
返回一个包含四个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5)` |
返回一个包含五个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5, E e6)` |
返回一个包含六个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5, E e6, E e7)` |
返回一个包含七个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8)` |
返回一个包含八个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9)` |
返回一个包含九个元素的不可变集合。
|
| `static <E> [Set]( )<E>` | `[of]( )(E e1, E e2, E e3, E e4, E e5, E e6, E e7, E e8, E e9, E e10)` |
返回一个包含十个元素的不可变集合。
|
| `boolean` | `[remove]( )([Object]( ) o)` |
如果存在,则从该集合中删除指定的元素(可选操作)。
|
| `boolean` | `[removeAll]( )([Collection]( )<?> c)` |
从此集合中删除指定集合中包含的所有元素(可选操作)。
|
| `boolean` | `[retainAll]( )([Collection]( )<?> c)` |
仅保留该集合中包含在指定集合中的元素(可选操作)。
|
| `int` | `[size]( )()` |
返回此集合中的元素数(其基数)。
|
| `default [Spliterator]( )<[E]( )>` | `[spliterator]( )()` |
在此集合中的元素上创建一个 `Spliterator` 。
|
| `[Object]( )[]` | `[toArray]( )()` |
返回一个包含此集合中所有元素的数组。
|
| `<T> T[]` | `[toArray]( )(T[] a)` |
返回一个包含此集合中所有元素的数组; 返回的数组的运行时类型是指定数组的运行时类型。
|
第二重境界:未尝见全牛也
============
HashSet
1、HashSet特点:
(1)底层数据结构是哈希表(查询速度快),使用HashCode哈希值
(2)对集合的迭代顺序不作任何保证,也就是说不保证存储和取出的元素顺序一致
(3)没有带索引的方法,所以不能使用普通for循环遍历
(4)由于是Set集合,所以是不包含重复元素的集合
2、HashSet集合添加一个元素的过程:
3、代码演示
package SetDemo;
import java.util.HashSet;
public class Set01 {
public static void main(String[] args) {
//导包创建对象HashSet
HashSet set=new HashSet();
//添加数据
set.add(“aaa”);
set.add(“bbb”);
set.add(“ccc”);
set.add(“ddd”);
//增强for循环遍历
for (String i:set){
System.out.println(i);
}
}
}
//代码输出结果
E:\develop\JDK\bin\java.exe "-javaagent:E:\IDEA\IntelliJ IDEA Community Edition
aaa
ccc
bbb
ddd
Process finished with exit code 0
4、注意事项(特殊之处,遍历无序的原因不是排序的无序,而是底层哈希值的存放地址的原因)
public static void main(String[] args) {
HashSet set=new HashSet();
set.add(“hello”);
set.add(“world”);
set.add(“java”);
//集合自带排序方式
System.out.println(set);
System.out.println(“--------”);
//迭代器方式
Iterator it = set.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println(“--------”);
//增强for循环
for (String s:set){
System.out.println(s);
}
}
//输出结果
[world, java, hello]
world
java
hello
world
java
hello
Process finished with exit code 0
上述代码是正常输出的结果,但是以下的代码的输出,请看:
public static void main(String[] args) {
HashSet set=new HashSet();
set.add(“6”);
set.add(“7”);
set.add(“8”);
set.add(“9”);
set.add(“10”);
//集合自带排序方式
System.out.println(set);
System.out.println(“--------”);
//迭代器方式
Iterator it = set.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println(“--------”);
//增强for循环
for (String s:set){
System.out.println(s);
}
}
//代码输出结果
[6, 7, 8, 9, 10]
6
7
8
9
10
6
7
8
9
10
Process finished with exit code 0
public static void main(String[] args) {
HashSet set=new HashSet();
set.add(“a”);
set.add(“b”);
set.add(“c”);
set.add(“d”);
set.add(“e”);
//集合自带排序方式
System.out.println(set);
System.out.println(“--------”);
//迭代器方式
Iterator it = set.iterator();
while (it.hasNext()){
String s = it.next();
System.out.println(s);
}
System.out.println(“--------”);
//增强for循环
for (String s:set){
System.out.println(s);
}
}
//代码输出结果
[a, b, c, d, e]
a
b
c
d
e
a
b
c
d
e
Process finished with exit code 0
上述两则代码结果,可以看到输出结果都是有序的,而HashSet特点有一,就是不保证迭代顺序。这不就是矛盾的一处地方吗?
原因:但并不是HashSet的自相矛盾,其原因就是底层实现的特点。哈希表实现,计算哈希值,通过哈希值代替索引的作用,查询存储的值。
而哈希值的计算,有一套自己的计算规则,当一串字符串计算哈希值时,哈希值的区别也许会很大,但如果是有规律的数字、字符进行计算哈希值时,其哈希值有会时有序的。
表现出来的结果就是在控制台输出有顺序有规律的单节字符时,输出也是有规律的。
5、LinkedHashSet集合概述和特点
(1)集合特点:
哈希表和链表实现的Set接口,具有可预测的迭代顺序。
由链表保证元素有序,也就是说元素的存储和取出顺序是一致的。
由哈希表保证元素唯一,也就是说没有重复的元素。
(2)代码案例
TreeSet
1、TreeSet集合特点
(1)元素有序,这里的顺序不是指存储和取出的顺序,而是按照一定的规则进行排序,具体排序方式取决于构造方法
TreeSet():根据其元素的自然排序进行排序
TreeSet(Comparator<? super E> comparator) :根据指定的比较器进行排序
(2)没有带索引的方法,所以不能使用普通for循环遍历
(3)由于是Set集合,所以不包含重复元素的集合
2、注意事项
用TreeSet集合存储自定义对象,无参构造方法使用的是自然排序对元素进行排序的
自然排序,就是让元素所属的类实现Comparable接口,重写compareTo(T o)方法
重点:如何重写方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
重点:主要条件与次要条件
用TreeSet集合存储自定义对象,带参构造方法使用的是比较器排序对元素进行排序的
比较器排序,就是让集合构造方法接收Comparator的实现类对象,重写compare(T o1,T o2)方法
重写方法时,一定要注意排序规则必须按照要求的主要条件和次要条件来写
3、代码展示(比较器排序)
package SetDemo;
import java.util.Comparator;
import java.util.HashSet;
import java.util.Set;
import java.util.TreeSet;
public class Set003 {
public static void main(String[] args) {
Set set=new TreeSet(new Comparator() {
@Override
public int compare(News n1, News n2) {
int num=n1.getTitle().compareTo(n2.getTitle());
return num;
}
});
News news1=new News(“中国多地遭雾霾笼罩空气质量再成热议话题”);
News news2=new News(“民进党台北举行“火大游行””);
News news3=new News(“春节临近北京“卖房热””);
News news4=new News(“春节临近北京“卖房热””);
System.out.println(“新闻一与新闻二的比较:”+news1.equals(news2));
System.out.println(“新闻三与新闻四的比较:”+news3.equals(news4));
System.out.println(“--------”);
set.add(news1);
set.add(news2);
set.add(news3);
set.add(news4);
for (int i = 0; i < set.size(); i++) {
}
Set set1=new HashSet();
set1.addAll(set);
for (News n:set1){
System.out.println(n);
}
System.out.println(“--------”);
System.out.println(“集合中新闻的长度为:”+set1.size());
}
}
第三重境界:官知止而神欲行
=============
1、哈希值(hashCode)
概念:
是Jdk根据对象的地址/String/数字算出来一串数字(int),hashCode()是Object类的方法,所以说Java的对象都可以调用这个hashCode方法返回哈希值。
特点:
(1)如果自定义类没有重写hashCode方法,那么自定义类的对象生成的哈希值是根据对象的内存地址值生成的,所以说即便两个对象的属性一样,哈希值也不一样。
(2)诉求:如果两个对象属性一样,那么两个对象哈希值也要一样,所以在自定义的类中重写了 hashCode方法(不调用Object类hashCode),是根据对象的属性生成哈希值。
(3)两个对象哈希值一样,不代表两个对象的属性一样.两个对象的属性一样,则两个对象的哈希值肯定一样。
(4)数字的哈希值是它本身。
代码展示:
public static void main(String[] args) {
//创建学生类对象,实例化
Student s1 = new Student02(“盘古大神”, 100, 100, 100,300);
Student s2 = new Student02(“女娲娘娘”, 100, 95, 90,285);
Student s3 = new Student02(“天皇伏羲”, 98, 100, 90,288);
Student s4 = new Student02(“地皇神农”, 99, 95, 90,284);
Student s5 = new Student02(“人皇轩辕”, 95, 98, 80,273);
//输出哈希值
System.out.println(s1.hashCode());
System.out.println(s2.hashCode());
System.out.println(s3.hashCode());
System.out.println(s4.hashCode());
System.out.println(s5.hashCode());
}
//输出结果
356573597
1735600054
21685669
2133927002
1836019240
Process finished with exit code 0
2、哈希表
概念:
散列表(Hash table,也叫哈希表),是根据键(Key)而直接访问在内存存储位置的数据结构。也就是说,它通过计算一个关于键值的函数,将所需查询的数据映射到表中一个位置来访问记录,这加快了查找速度。这个映射函数称做散列函数,存放记录的数组称做散列表。
自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。
深知大多数Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!
因此收集整理了一份《2024年Java开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/600eaa654257741c56b07bc2e1583d8d.jpeg)
学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
中高级Java开发面试高频考点题笔记300道.pdf
架构进阶面试专题及架构学习笔记脑图
Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!
LjY8c1aU-1713284760545)]
既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上Java开发知识点,真正体系化!
由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!
如果你觉得这些内容对你有帮助,可以扫码获取!!(备注Java获取)
![img](https://i-blog.csdnimg.cn/blog_migrate/600eaa654257741c56b07bc2e1583d8d.jpeg)
学习分享,共勉
这里是小编拿到的学习资源,其中包括“中高级Java开发面试高频考点题笔记300道.pdf”和“Java核心知识体系笔记.pdf”文件分享,内容丰富,囊括了JVM、锁、并发、Java反射、Spring原理、微服务、Zookeeper、数据库、数据结构等大量知识点。同时还有Java进阶学习的知识笔记脑图(内含大量学习笔记)!
资料整理不易,读者朋友可以转发分享下!
Java核心知识体系笔记.pdf
[外链图片转存中…(img-V6fA4RE3-1713284760545)]
中高级Java开发面试高频考点题笔记300道.pdf
[外链图片转存中…(img-Un62qKEp-1713284760545)]
架构进阶面试专题及架构学习笔记脑图
[外链图片转存中…(img-ljwSda22-1713284760545)]
Java架构进阶学习视频分享
《互联网大厂面试真题解析、进阶开发核心学习笔记、全套讲解视频、实战项目源码讲义》点击传送门即可获取!