1、创建一个用户类,用户有姓名和年龄两个属性,生成set和get方法
package com.entity;
public class User {
private String name;
private String age;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
这里需要注意两个地方,一是用户类创建是否规范,二是了解Idea的快捷键
ALT+Insert 快速生成set和get方法
2、如何使用lomback实用工具,通过注解实现上面的set和get以及lomback有哪些常用的注解
package com.entity;
import lombok.Data;
@Data
public class User {
private String name;
private String age;
}
//pom.xml 依赖导入
<dependencies>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.26</version>
<scope>provided</scope>
</dependency>
</dependencies>
@Data:包含@set、@get、@ToString、@EqualsAndHashCode
@NoArgsConstructor:自动生成无参构造方法
@AllArgsConstructor:自动生成有参构造方法
3、创建主函数入口,创建一个User对象的List集合,使用Lambda表达式将该List集合转为Map集合,其中姓名为键,年龄为值
package com.entity;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Data
@NoArgsConstructor
@AllArgsConstructor
public class User {
private String name;
private String age;
public static void main(String[] args) {
List<User> list = new ArrayList<>();
list.add(new User("张三","18"));
// 常用方法 遍历集合 集合转map
for(User user : list){
Map map = new HashMap();
map.put(user.getName(),user.getAge());
}
// 使用Lambda表达式 将List转为Map
Map<String, String> nameToAgeMap = list.stream()
.collect(Collectors.toMap(
User::getName,
User::getAge,
(age1, age2) -> { throw new IllegalStateException("重复的用户名: " + age1); },
HashMap::new
));
}
}
1、list.stream() 将List转换为Stream,以便使用Stream API进行操作。
2、collect() 是一个终端操作,用于将Stream中的元素收集到一个集合中。
3、User::getName 这是值映射函数,用于确定Map
中的键
4、User::getAge 这是值映射函数,用于确定Map
中的值
3、(age1,age2) -> { throw new IllegalStateException("重复的用户名: " + age1); }是一个lambda表达式,处理键冲突
4、 HashMap::new 是一个构造函数引用,用于创建一个新的HashMap对象。
稍后会写一篇Lambda表达式和Stream流的讲解,欢迎各位同好一起探讨
4、Java有哪几种基本数据类型,值传递和引用传递的区别?
四大类共八种:整形(byte、int、short、long)、浮点型(float、double)、布尔类型(boolean)、字符(char)
值传递:当你将整数传递给函数时,复制了一个新的整数值,函数内部操作的是这个复制的副本,对原本的值没有改变。
引用传递:函数接收实际变量的内存地址,也就是引用,可以直接修改该变量的值。
5、final关键字的作用?
- final变量:声明为final的变量表示它的值在初始化后不能更改(使用final static修饰),试图修改final变量,编译器会报错。
- final方法:方法被声明为final,则不允许在其子类中被覆盖。这对于静态方法尤其重要,因为它们不能被覆写,只能被重载。
- final类:一个类如果被声明为final,那么这个类不能被继承,它的属性和方法也不能被其他类继承。
注意:final关键字有助于保证程序的稳定性和防止意外的修改,注意区分final和static final,前者强调状态不可变,后者强调共享不变
6、ArrayList和LinkedList的优缺点和区别?
ArrayList:是数组实现的,查询某个元素的时间复杂度通常是O(1),而删除,某个元素的时间复杂度为O(n)。不适合频繁的元素添加和删除,但对于查询操作来说效率较高。
LinkedList:是链表实现的,查询某个元素的时间复杂度为O(n)。插入和删除操作非常快,特别是对于列表头部和尾部的操作,时间复杂度几乎接近O(1),因为只需要改变几个指针即可。