最后
分布式技术专题+面试解析+相关的手写和学习的笔记pdf
还有更多Java笔记分享如下:
//4.2想要遍历集合就需要获取集合的迭代器
Iterator it = keySet.iterator();
//4.3循环迭代集合中的所有元素
while(it.hasNext()){//判断是否有下一个元素可以迭代
Integer key = it.next();//拿到本轮循环中获取到的map的key
String value = map.get(key);
System.out.println(“{”+key+“,”+value+“}”);
}
/**方式二:
-
遍历map集合,需要把map集合先转成set集合
-
是把map中的一对键值对key&value作为一个Entry<K,V>整体放入set
-
一对K,V就是一个Entry*/
Set<Map.Entry<Integer, String>> entrySet = map.entrySet();
//获取迭代器
Iterator<Map.Entry<Integer, String>> it2 = entrySet.iterator();
while(it2.hasNext()){//判断是否有下一个元素可迭代
//本轮遍历到的一个Entry对象
Map.Entry<Integer, String> entry = it2.next();
Integer key = entry.getKey();//获取Entry中的key
String value = entry.getValue();//获取Entry中的value
System.out.println(“{”+key+“,”+value+“}”);
}
}
}
===============================================================================
HashMap的键要同时重写hashCode()和equlas()
hashCode()用来判定二者的hash值是否相同,重写后根据属性生成
equlas()用来判断属性的值是否相同,重写后,根据属性判断
–equlas()判断数据如果相等,hashCode()必须相同
–equlas()判断数据如果不等,hashCode()尽量不同
-
HashMap的结构是数组+链表 或者 数组+红黑树 的形式
-
HashMap底层的Entry[ ]数组,初始容量为16,加载因子是0.75f,扩容按约为2倍扩容
-
当存放数据时,会根据hash(key)%n算法来计算数据的存放位置,n就是数组的长度,其实也就是集合的容量
-
当计算到的位置之前没有存过数据的时候,会直接存放数据
-
当计算的位置,有数据时,会发生hash冲突/hash碰撞
解决的办法就是采用链表的结构,在数组中指定位置处以后元素之后插入新的元素
也就是说数组中的元素都是最早加入的节点
- 如果链表的长度>8且数组长度>64时,链表会转为红黑树,当链表的长度<6时,红黑树会重新恢复成链表
创建包: cn.tedu.map
创建类: TestHashMap.java
package cn.tedu.collection;
import java.util.HashMap;
/*本类用于HashMap的练习/
public class TestHashMap {
public static void main(String[] args) {
//创建HashMap对象
HashMap<Integer,String> map = new HashMap();
/**
-
源码摘抄:
-
static final int DEFAULT_INITIAL_CAPACITY = 1 << 4; // aka 16
-
初始容量为1<<4,相当于1*(2^4)=16
-
static final float DEFAULT_LOAD_FACTOR = 0.75f;
-
默认的加载因子是0.75,也就是说存到75%开始扩容,按照2的次幂进行扩容
*/
/*
-
达到容量的加载因子后,就会重新开辟空间,重新计算所有对象的存储位置,也叫做rehash
-
设置初始容量与加载因子要讲求相对平衡,如果加载因子过低,则rehash过于频繁,影响性能
-
如果初始容量设置太高或者加载因子设置太高,影响查询效率
*/
}
}
创建包: cn.tedu.map
创建类: TestMap.java
package cn.tedu.map;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
/*本类用于练习map案例:统计字符串中字符的个数
- 需求效果:用户输入aabbbcc,输出:a=2,b=3,c=2*/
public class TestMap2 {
public static void main(String[] args) {
//1.接收用户输入的字符串
System.out.println(“请您输入要统计的字符串:”);
String input = new Scanner(System.in).nextLine();
//2.准备一个map集合,用来存放出现的字符Character与字符的个数Integer
//为什么字符类型Character作为map中的KEY?因为key不允许重复,而次数是可以重复的
Map<Character,Integer> map = new HashMap<>();
//3.准备要存入map中的数据:K和V
//3.1 遍历用户输入的字符串,统计每个字符
for (int i = 0; i < input.length(); i++) {
//3.2获取本轮循环中遍历到的字符
char key = input.charAt(i);
//System.out.println(key);//打印查看每轮循环获取到的字符,没有问题
//3.2根据获取到的key拿到对应的value
Integer value = map.get(key);//根据字符,获取map中这个字符保存的次数
if(value == null){//之前这个字符没有出现过,次数还是Integer的默认值null
map.put(key,1);//没有出现过,次数就设置为1
}else {//value不是null走else
map.put(key,value+1);//之前这个字符出现过,次数变为之前的次数+1
}
}
System.out.println(“各个字符出现的次数为:”+map);
}
}
=============================================================================
-
Set是一个不包含重复数据的Collection
-
Set集合中的数据是无序的(因为Set集合没有下标)
-
Set集合中的元素不可以重复 – 常用来给数据去重
-
数据无序且数据不允许重复
-
HashSet : 底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K,存入内部的HashMap中。当然K仍然不许重复。
-
TreeSet : 底层是TreeMap,也是红黑树的形式,便于查找数据
学习Collection接口中的方法即可
3.4.1 概述
底层是哈希表,包装了HashMap,相当于向HashSet中存入数据时,会把数据作为K存入内部的HashMap中,其中K不允许重复,允许使用null.
创建包: cn.tedu.collection
创建类: TestSet.java
package cn.tedu.collection;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
/本类用于测试Set/
public class TestSet {
public static void main(String[] args) {
//1.创建对应的集合对象
Set set = new HashSet<>();
//2.存入数据
set.add(“紫霞仙子”);
set.add(“至尊宝”);
set.add(“蜘蛛精”);
set.add(“紫霞仙子”);
set.add(null);
/*1.set集合中的元素都是没有顺序的
-
2.set集合中的元素不能重复
-
3.set集合可以存null值,但是最多只有一个*/
System.out.println(set);//[蜘蛛精, null, 至尊宝, 紫霞仙子]
//3.常用方法测试
System.out.println(set.contains(“唐僧”));//false,判断是否包含指定元素
System.out.println(set.isEmpty());//false,判断是否为空
System.out.println(set.remove(null));//true,移除指定的元素
System.out.println(set);//[蜘蛛精, 至尊宝, 紫霞仙子]
System.out.println(set.size());//3,获取集合中元素的个数
System.out.println(Arrays.toString(set.toArray()));//[蜘蛛精, 至尊宝, 紫霞仙子],将集合转为数组
//4.1创建set2集合,并向集合中存入数据
Set set2 = new HashSet<>();
set2.add(“小兔纸”);
set2.add(“小脑斧”);
set2.add(“小海疼”);
set2.add(“小牛犊”);
System.out.println(set2);//[小兔纸, 小海疼, 小牛犊, 小脑斧]
System.out.println(set.addAll(set2));//将set2集合的所有元素添加到set集合中
System.out.println(set);//[蜘蛛精, 小兔纸, 小海疼, 至尊宝, 小牛犊, 小脑斧, 紫霞仙子]
System.out.println(set.containsAll(set2));//判断set2集合的所有元素是否都在set集合中
System.out.println(set.removeAll(set2));//删除set集合中属于set2集合的所有元素
System.out.println(set);//[蜘蛛精, 至尊宝, 紫霞仙子]
System.out.println(set.retainAll(set2));//只保留set集合中属于set和set2集合的公共元素
System.out.println(set);//[]
//5.集合的迭代
Iterator it = set2.iterator();//5.1获取集合的迭代器
while(it.hasNext()) {//5.2判断集合是否有下个元素
String s = it.next();//5.3如果有,进循环获取当前遍历到的元素
System.out.println(s);
}
}
}
创建包: cn.tedu.collection
创建类: Student.java
package cn.tedu.collection;
import java.util.Objects;
//1.创建自定义引用类型Student
public class Student {
//2.创建属性
String name;//姓名
int id;//学号
//3.提供本类的全参构造
public Student(String name, int id) {
this.name = name;
this.id = id;
}
//3.2提供学生类的toString()
@Override
public String toString() {
return “Student{” +
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!
g toString() {
return “Student{” +
最后
俗话说,好学者临池学书,不过网络时代,对于大多数的我们来说,我倒是觉得学习意识的觉醒很重要,这是开始学习的转折点,比如看到对自己方向发展有用的信息,先收藏一波是一波,比如如果你觉得我这篇文章ok,先点赞收藏一波。这样,等真的沉下心来学习,不至于被找资料分散了心神。慢慢来,先从点赞收藏做起,加油吧!
另外,给大家安排了一波学习面试资料:
[外链图片转存中…(img-h6mdHHvk-1714891233119)]
[外链图片转存中…(img-ijsnuNdp-1714891233120)]
以上就是本文的全部内容,希望对大家的面试有所帮助,祝大家早日升职加薪迎娶白富美走上人生巅峰!