资讯专栏INFORMATION COLUMN

JAVA 知识点整理

RyanQ / 3127人阅读

摘要:基于链表,增删快,查询满。散列算法通过散列算法获取下标,冲突且为时存入链表。当为的次方时,可以最大程度减小冲突。

泛型
本质 类型参数化,作用就是将类型转换问题从运行时转移到编译期
语法 1 定义在类上 class ClassName{}
2 定义在方法上 void methodName(T t){}
3 通配符 可限制传入参数,但无法使用 泛型参数 需类型转换
4 上限 接受 T及任意子类
5 下限 接受 T及任意父类
集合

存放数据的集合,JAVA中实现Collection和Map的都是集合

Vector:线程安全,基于动态数组,增长率为100%,ArrayList为50%
ArrayList:基于动态数组,查询快,增删慢。
LinkedList:基于链表,增删快,查询满。

PS : Hash散列算法 hash & (length-1) 通过Hash散列算法获取下标,HashCode冲突且equals为false时存入链表。当length为2的N次方时,可以最大程度减小HashCode冲突。

HashSet:底层由HashMap实现,允许null,唯一,无序
LinkedHashSet:底层由LinkedHashMap实现(适配器模式),不允许null,唯一,按插入顺序排序
TreeSet:底层由TreeMap实现,不允许null,唯一,按排序规则排序

映射集合(键值对)
HashMap:基于Hash散列算法,键唯一,允许null,无序
LinkedHashMap:继承HashMap,键唯一,不允许null,按插入顺序排序
TreeMap:键唯一,不允许null,按排序规则排序,底层基于红黑树

HashTable:线程安全
ConcurrentHashMap:线程安全,锁分离

IO
本质 数据传输
分类 数据类型 字节流
字符流
数据流向 输入流
输出流
输入流 字节流 InputStream 字节输入流接口
ByteArrayInputStream 字节数组输入流
FileInputStream 文件输入流
BufferedInputStream 高级流 缓存输入流
字符流 Reader 字符输入流接口
InputStreamReader 转换流 字符输入流 可指定字符集
BufferedReader 高级流 缓存字符输入流
输出流 字节流 outputStream 字节输出流接口
ByteArrayOutputStream 字节数组输出流
FileOutputStream 文件输出流
BufferedOutputStream 高级流 缓存输出流
字符流 Writer 字符输出流接口
OutputStreamWriter 转换流 字符输出流 可指定字符集
BufferedWriter 高级流 缓存字符输出流
PrintWriter 高级流 缓存字符输出流 自动行刷新
多线程
多线程 并发,合理使用可以提高效率,CPU给每个线程分配时间片(几十ms),线程有创建与上下文切换的开销
线程状态 新建 NEW
就绪 RUNNABLE
运行 RUNNING
阻塞 BLOCKED
死亡 DEAD
创建线程 1 继承Thread
2 实现Runnalbe接口
3 实现Callable接口
线程池
线程并发 三大特性 原子性
有序性
可见性
同步方案 1 volatile 类型修饰符 保证可见性
2 Synchronized 同步代码块,可修饰方法 代码块
3 ReentrantLock 显示获取/释放锁
线程操作 1 sleep() 使线程进入阻塞,可指定毫秒值,不释放锁
2 wait()/notify()/notifyAll() 等待(阻塞)唤醒(就绪)机制,可指定毫秒值,释放锁
3 yield() 使线程进入就绪,不释放锁
4 join() 当前线程进入阻塞,直到join线程执行结束,进入就绪,释放锁
反射
反射 反射(Reflection)是Java 程序开发语言的特征之一,它允许运行中的 Java 程序获取自身的信息,并且可以操作类或对象的内部属性。
主要功能 1 在运行时判断一个对象所属的类
2 在运行时构造任意一个类的对象
3 在运行时判断任意一个类所具有的成员变量和方法(通过反射甚至可以调用private方法)
4 在运行时调用任意一个对象的方法
语法 注意: 调用私有属性时,需setAccessible(True)跳过java语言访问检查,否则抛出IllegalAccessException
获取Class 1 Class.forName(className)
2 类名.class
3 对象.getClass()
对象 无参构造器 newInstance() 调用无参构造器创建对象并返回
未定义无参构造器时,抛出InstantiationException
获取构造器 1 getConstructor([types]) 获取指定参数类型列表的公有构造器
2 getConstructors() 获取所有公有构造器
3 getDeclaredConstructor([types]) 获取指定参数类型列表的构造器
4 getDeclaredConstructors() 获取所有构造器
调用构造器 构造器对象.newInstance([params]) 创建对象,调用私有构造器时, 请注意
方法 获取方法 1 getMethod(name[,types]) 获取指定方法名,参数类型列表的公有方法
2 getMethonds() 获取所有公有方法,包括继承类的公有方法
3 getDeclaredMethod(name[,types]) 获取指定方法名,参数类型列表的方法,但不包括继承方法
4 getDeclaredMethods() 获取所有方法,但不包括继承方法
调用方法 方法对象.invoke(obj[,params]) 调用指定对象方法,调用私有方法时, 请注意
字段 获取字段 1 getField(name) 获取指定字段名的公有字段
2 getFields() 获取所有公有字段,包括继承类的公有方法
3 getDeclaredField(name) 获取指定字段名的字段,但不包括继承字段
4 getDeclaredFields() 获取所有字段,但不包括继承字段
操作字段 字段对象.set(obj,val) 设置指定对象字段属性
字段对象.get(obj) 获取指定对象字段属性
操作私有字段时,请注意

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/76347.html

相关文章

  • 我的阿里之路+Java面经考点

    摘要:我的是忙碌的一年,从年初备战实习春招,年三十都在死磕源码,三月份经历了阿里五次面试,四月顺利收到实习。因为我心理很清楚,我的目标是阿里。所以在收到阿里之后的那晚,我重新规划了接下来的学习计划,将我的短期目标更新成拿下阿里转正。 我的2017是忙碌的一年,从年初备战实习春招,年三十都在死磕JDK源码,三月份经历了阿里五次面试,四月顺利收到实习offer。然后五月怀着忐忑的心情开始了蚂蚁金...

    姘搁『 评论0 收藏0
  • Java基础知识整理之操作Redis(二)

    摘要:操作之连接以及简单操作下载对应的驱动包下载创建一个连接类连接主机地址端口号登录密码连接服务器权限认证连接完成会返回缓存链接错误查询所有中的查询所有的为通配符清除所有的中的是清除所有的的命令如果清理完成,会返回完整的代码声明对象测试地址端口密 Java操作Redis之连接以及简单操作 1.下载对应的驱动包 下载 jedis.jar :https://mvnrepository.com/a...

    mingde 评论0 收藏0
  • Java基础知识整理之操作Redis(一)

    摘要:是一个由写的存储系统。是一个开源的使用语言编写遵守协议支持网络可基于内存亦可持久化的日志型数据库,并提供多种语言的。它通常被称为数据结构服务器,因为值可以是字符串哈希列表集合和有序集合等类型。 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵...

    honhon 评论0 收藏0
  • Java基础知识整理之操作Redis(一)

    摘要:是一个由写的存储系统。是一个开源的使用语言编写遵守协议支持网络可基于内存亦可持久化的日志型数据库,并提供多种语言的。它通常被称为数据结构服务器,因为值可以是字符串哈希列表集合和有序集合等类型。 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统。Redis是一个开源的使用ANSI C语言编写、遵...

    2shou 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<