Java最新Java泛型,那些年我们一起踩过算法与数据结构的坑

线程、数据库、算法、JVM、分布式、微服务、框架、Spring相关知识

一线互联网P7面试集锦+各种大厂面试集锦

学习笔记以及面试真题解析

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

public Person() {

}

public Person(String name, int age) {

this.name = name;

this.age = age;

}

@Override

public int compareTo(Person person) {

int temp = this.age - person.age;

return temp == 0 ? this.name.compareTo(person.name) : temp;

}

public String getName() {

return name;

}

public void setName(String name) {

this.name = name;

}

public int getAge() {

return age;

}

public void setAge(int age) {

this.age = age;

}

@Override

public String toString() {

return “Person{” +

“name='” + name + ‘’’ +

“, age=” + age +

‘}’;

}

}

2、泛型方法


public class Tool {

private T t;

public T getType() {

return t;

}

public void setType(T t) {

this.t = t;

}

/**

  • 将泛型定义在方法上

  • @param str

  • @param

*/

public void show(W str) {

System.out.println("show: " + str);

}

public void print(T str) {

System.out.println("print: " + str);

}

/**

  • 当方法静态时,不能访问类上定义的泛型。如果静态方法使用泛型,只能将泛型定义在方法上

  • @param str

  • @param

*/

public static void method(Y str){

System.out.println("method: " + str);

}

}

public class GenericDemo5 {

public static void main(String[] args) {

Tool tool = new Tool<>();

tool.show(4);

tool.print(“haha”);

Tool.method(“hehehe”);

Tool.method(88);

}

}

3、泛型接口


public class GenericDemo6 {

public static void main(String[] args) {

InterImpl inter = new InterImpl();

inter.show(“abc”);

InterImpl2 inter2 = new InterImpl2();

inter2.show(“abc222”);

}

}

interface Inter {

void show(T t);

}

class InterImpl implements Inter {

@Override

public void show(String s) {

System.out.println(“show:” + s);

}

}

class InterImpl2 implements Inter {

@Override

public void show(T t) {

System.out.println(“show:” + t);

}

}

4、通配符的体现


public class GenericDemo7 {

public static void main(String[] args) {

ArrayList arrayList = new ArrayList<>();

arrayList.add(“abc”);

arrayList.add(“haha”);

ArrayList arrayList2 = new ArrayList<>();

arrayList2.add(111);

arrayList2.add(222);

printCollection(arrayList);

printCollection(arrayList2);

}

/**

  • 泛型的通配符:?

  • @param collection

*/

private static void printCollection(Collection<?> collection) {

Iterator<?> iterator = collection.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

}

}

5、泛型限定


? extends E:接受E类型或者其子类型对象 上限!

? super E: 接受E类型或者其父类型对象  下限!

一般存储元素的时候都是用上限,因为这样取出的都是按照上限类型来运算的,不会出现类型安全隐患。

public class GenericDemo8 {

public static void main(String[] args) {

ArrayList arrayList = new ArrayList<>();

arrayList.add(new Worker(“张三”,27));

arrayList.add(new Worker(“李四”,30));

ArrayList arrayList2 = new ArrayList<>();

arrayList2.add(new Student(“小明”,17));

arrayList2.add(new Student(“小芳”,18));

printCollection(arrayList);

printCollection(arrayList2);

}

/**

  • 泛型的通配符:?

  • 泛型的高级应用:泛型限定

  • @param collection

*/

private static void printCollection(Collection<? extends Person> collection) {

Iterator<?> iterator = collection.iterator();

while (iterator.hasNext()) {

System.out.println(iterator.next());

}

}

}

public class Student extends Person {

public Student() {

}

public Student(String name, int age) {

super(name, age);

}

@Override

public String toString() {

return “Student{” +

“name='” + getName() + ‘’’ +

“, age=” + getAge() +

‘}’;

}

}

public class Worker extends Person {

public Worker() {

}

public Worker(String name, int age) {

super(name, age);

}

@Override

public String toString() {

return “Worker{” +

“name='” + getName() + ‘’’ +

“, age=” + getAge() +

‘}’;

}

}

五、查阅集合的一些技巧:

============

需要唯一吗?

需要:set

需要指定顺序吗?

需要:TreeSet

不需要:HashSet

但是想要一个和存储一致的顺序(有序):LinkedHashSet

不需要:List

需要频繁增删吗?

需要:LinkedList
不需要:ArrayList
看到array:就要想到数组,查询快,有角标。
看到link:就要想到链表,就要想到增删快,就要想到add,get,remove+first last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法
看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

三面蚂蚁金服成功拿到offer后,他说他累了

三面蚂蚁金服成功拿到offer后,他说他累了

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

first last的方法
看到hash:就要想到哈希表,就要想到唯一性,就要想到元素需要覆盖hashcode方法和equals方法
看到tree:就要想到二叉树,就要想到排序,就要想到两个接口Comparable,Comparator

总结

总的来说,面试是有套路的,一面基础,二面架构,三面个人。

最后,小编这里收集整理了一些资料,其中包括面试题(含答案)、书籍、视频等。希望也能帮助想进大厂的朋友

[外链图片转存中…(img-x0iiPiiS-1715402984798)]

[外链图片转存中…(img-dM5wv8uL-1715402984799)]

本文已被CODING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】收录

需要这份系统化的资料的朋友,可以点击这里获取

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值