Java基础 --- 面试实操

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关键字的作用?

  1. final变量:声明为final的变量表示它的值在初始化后不能更改(使用final static修饰),试图修改final变量,编译器会报错。
  2. final方法:方法被声明为final,则不允许在其子类中被覆盖。这对于静态方法尤其重要,因为它们不能被覆写,只能被重载。
  3. final类:一个类如果被声明为final,那么这个类不能被继承,它的属性和方法也不能被其他类继承。

注意:final关键字有助于保证程序的稳定性和防止意外的修改,注意区分final和static final,前者强调状态不可变,后者强调共享不变

6、ArrayList和LinkedList的优缺点和区别?

ArrayList:是数组实现的,查询某个元素的时间复杂度通常是O(1),而删除,某个元素的时间复杂度为O(n)。不适合频繁的元素添加和删除,但对于查询操作来说效率较高。
LinkedList:是链表实现的,查询某个元素的时间复杂度为O(n)。插入和删除操作非常快,特别是对于列表头部和尾部的操作,时间复杂度几乎接近O(1),因为只需要改变几个指针即可。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值