硬核干货!系统盘点Android开发者必须掌握的Java知识体系,收藏这一篇就够了(1)

最后

分布式技术专题+面试解析+相关的手写和学习的笔记pdf

还有更多Java笔记分享如下:

image

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

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


}

看到上面代码Node里面的next,是一个单链表结构,而结合table是一个Node数组,可以判断出HashMap是一个数组加链表的结构。下面我总结一下HashMap的结构图:

2、HashMap 排序题

已知一个HashMap<Integer,User>集合, User 有name(String)和age(int)属性。请写一个方法实现
对HashMap 的排序功能,该方法接收HashMap<Integer,User>为形参,返回类型为HashMap<Integer,User>,要求对HashMap 中的User 的age 倒序进行排序。排序时key=value 键值对不得拆散。

Tips:要做出这道题必须对集合的体系结构非常的熟悉。HashMap 本身就是不可排序的,但是该道题偏偏让给HashMap 排序,那我们就得想在API 中有没有这样的Map 结构是有序的,LinkedHashMap,对的,就是他,他是Map 结构,也是链表结构,有序的,更可喜的是他是HashMap 的子类,我们返回LinkedHashMap<Integer,User>即可,还符合面向接口(父类编程的思想)。但凡是对集合的操作,我们应该保持一个原则就是能用JDK 中的API 就有JDK 中的API,比如排序算法我们不应该去用冒泡或者选择, 而是首先想到用Collections 集合工具类。

public class HashMapTest {
public static void main(String[] args) {
HashMap<Integer, User> users = new HashMap<>();
users.put(1, new User(“张三”, 25));
users.put(3, new User(“李四”, 22));
users.put(2, new User(“王五”, 28));
System.out.println(users);
HashMap<Integer,User> sortHashMap = sortHashMap(users);
System.out.println(sortHashMap);
/**

  • 控制台输出内容
  • {1=User [name=张三, age=25], 2=User [name=王五, age=28], 3=User [name=李四,
    age=22]}
    {2=User [name=王五, age=28], 1=User [name=张三, age=25], 3=User [name=李四,
    age=22]}
    */
    }
    public static HashMap<Integer, User> sortHashMap(HashMap<Integer, User> map) {
    // 首先拿到map 的键值对集合
    Set<Entry<Integer, User>> entrySet = map.entrySet();
    // 将set 集合转为List 集合,为什么,为了使用工具类的排序方法
    List<Entry<Integer, User>> list = new ArrayList<Entry<Integer,
    User>>(entrySet);
    // 使用Collections 集合工具类对list 进行排序,排序规则使用匿名内部类来实现
    Collections.sort(list, new Comparator<Entry<Integer, User>>() {
    @Override
    public int compare(Entry<Integer, User> o1, Entry<Integer, User> o2) {
    //按照要求根据User 的age 的倒序进行排
    return o2.getValue().getAge()-o1.getValue().getAge();
    }
    });
    //创建一个新的有序的HashMap 子类的集合
    LinkedHashMap<Integer, User> linkedHashMap = new LinkedHashMap<Integer,
    User>();
    //将List 中的数据存储在LinkedHashMap 中
    for(Entry<Integer, User> entry : list){
    linkedHashMap.put(entry.getKey(), entry.getValue());
    }
    //返回结果
    return linkedHashMap;
    }
    }
3、HashMap 和HashTable 有什么区别?

1.HashMap 是线程不安全的,HashMap 是一个接口,是Map 的一个子接口,是将键映射到值得对象,不允许键值重复,允许空键和空值;由于非线程安全,HashMap 的效率要较HashTable 的效率高一些.

2.HashTable 是线程安全的一个集合,不允许null 值作为一个key 值或者Value 值;

3.HashTable 是sychronize,多个线程访问时不需要自己为它的方法实现同步,而HashMap 在被多个线程访问的时候需要自己为它的方法实现同步;


Android进阶必备Java高阶知识点

一、深入理解Java泛型

1、泛型的作用与定义
2、通配符与嵌套
3、泛型的上下边界
4、RxJava中深入理解泛型

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

二、注解

  • 注解(ANNOTATIONS)概念、什么是注解
  • 元注解;什么是元注解、元注解的使用
  • 自定义注解
  • 默认参数值(DEFAULT PARAMETER VALUES)
  • 什么是APT,如何在Android Studio中构建一个APT项目?
  • 插桩
  • 反射
  • Retrofit中的注解

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

三、并发编程

1、基础概念

1)CPU核心数、线程数
2)CPU时间片轮转机制

####2、线程之间的共享
1)synchronized内置锁
2)volatile 关键字
3)线程私有变量 ThreadLocal

3、线程间的协作

1)什么是CAS?
2)CAS(Compare And Swap)导致的ABA问题

4、线程池的使用

1)Java中的ThreadPoolExecutor类
2)深入剖析线程池实现原理
3)如何合理配置线程池的大小

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

四、数据传输与序列化

1、Serializable原理

1.概念

  • 序列化:把Java对象转换为字节序列的过程。
  • 反序列化:把字节序列恢复为Java对象的过程。

2.用途 对象的序列化主要有两种用途:
1)把对象的字节序列永久地保存到硬盘上,通常存放在一个文件中。
2)在网络上传送对象的字节序列。

2、Parcelable的原理和使用方法
  • Android源码中的Parcelable
3、Json

一种数据传输格式,与开发语言无关,轻量级。
一开始是javaScript的,但是后面比较流传,几乎所有语言都有相应的使用API。

五、Java虚拟机原理

1、垃圾回收

1)如何判断对象已“死”
2)回收方法区
3)垃圾回收算法

2、内存分配策略

1)对象优先在Eden分配
2)大对象直接进入老年代
3)长期存活的对象将进入老年代
4)动态对象年龄判定
5)空间分配担保

3、Dalvik虚拟机

1)Dalvik指令
2)Dalvik启动过程
3)Dalvik上的垃圾回收

六、反射与类加载

1、反射

1)反射基本概念与三种获取Class对象的方式
2)获取构造器实例化对象与属性信息
3)Android 配置打包签名信息的两种方法
4)Hook动态注入代码

2、类加载

1)动态代理模式
2)Android 中的Dalvik和ART
3)ClassLoader 的构造函数
4)双亲委派机制

七、高效IO

1、基于字节的IO操作
2、基于字符的IO操作

最后

光给面试题不给答案不是我的风格。这里面的面试题也只是凤毛麟角,还有答案的话会极大的增加文章的篇幅,减少文章的可读性

Java面试宝典2021版

最常见Java面试题解析(2021最新版)

2021企业Java面试题精选

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

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

DING开源项目:【一线大厂Java面试题解析+核心总结学习笔记+最新讲解视频+实战项目源码】](https://bbs.csdn.net/forums/4f45ff00ff254613a03fab5e56a57acb)收录**

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值