基础
基本数据类型: byte, short, int, long, float, double, char, boolean
引用数据类型: 数组,类,接口 默认值(null)
int 最大 10位
数值方面: BigDecimal
类加载顺序
static final
String
String.format 支持替换同一个参数 位置参数 使用 %1$s
switch方法,可以支持byte,char,short,int ,不支持long
GC Roots
泛型
泛型方法
抽象类
文件,流
getPath() 得到的文件构造时参数中给出的路径
getAbsolutePath() 返回的是文件的绝对路径
getCanonicalPath() 返回文件的绝对路径,但会去掉..这样的符合,即返回的是标准的绝对路径
4个基本父类:
字节输入流 InputStream
字节输出流 OutputStream
字符输入流 Reader
字符输出流 Writer
Java代理
getResourceAsStream()
总结
类加载步骤
反射
注解
时间日期
其他
Property: System.getProperty("user.dir") #获取用户目录
移位运算符
<< 左移 相当于 乘以2
>> 右移 相当于 除以2
集合
Collection接口
交集: retainAll()
差集: removeAll()
合集: addAll()
通过数组经过Arrays.asList() 转化成List,它是继承AbstractList的子类,AbstractList不支持removeAll()和remove()操作,不支持增删改操作。如果希望能增删改,必须new一个ArrayList或LinedList。
Set<String> setA = new HashSet<String>(Arrays.asList(arrA));
Map没有继承Collection接口,提供的是key-value的映射
代码
// unmodifiableList
Collections.unmodifiableList
// singletonMap
Collections.singletonMap(k, v);
// list 去重
HashSet<> h = new HashSet(list1);
list2.addAll(h);
// LinkedHashSet 1)删除重复数据; 2)保持添加到其中的数据的顺序
// HashSet 不能添加重复数据,但不能保证添加顺序
LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(list);
// Java8 Stream进行去重
list.stream().distinct().collect(Collectors.toList());
HashMap
加载因子 0.75
为什么需要使用加载因子,为什么需要扩容?
因为如果填充比很大,说明利用的空间很多,如果一直不进行扩容的话,链表就会越来越长,这样查找的效率很低,扩容之后,将原来链表数组的每一个链表分成奇偶两个子链表分别挂在新链表数组的散列位置,这样就减少了每个链表的长度,增加查找效率
HashMap本身是以空间换时间,所以填充比没必要太大。太小又会导致空间浪费。如果关注内存,填充比可以稍大,如果关注查找性能,填充比可以稍小。
关键点:
Lambda
函数式编程
举例: 比如下厨做饭
函数式接口 Functional Interface
都有哪些函数式接口
除了Runnable,Comparator 还有 Function<T,R>, Predicate<T>, Consumer<T>,Supplier<T>
--
Java8对接口的语法进行了较大的调整,增加了默认方法, 比如Function接口里就定义了一个工厂方法 indentity()
和内部类一样,Lambda也可以访问外部变量(只要变量实际上不可变 effectively final)
---
虽然使用lambda表达式可以对某些接口进行简单的实现,但并不是所有的接口都可以使用Lambda表达式来实现。Lambda规定接口中只能有一个需要被实现的方法,不是规定接口中只能有一个方法。
Stream
定义在java.util.stream.Stream
// IntStream
IntStream.range(0, arr.length).mapToObj(x->arr[x]).collect(Collectors.toList());
// Collectors
xx.stream().collect(Collectors.groupingBy(x->x, Collectors.counting()));
// list 转 array
listStrings.stream().toArray(String[]::new);
// map 转 list
map.entrySet().stream().sorted(Map.Entry.comparingByKey()).map(e->new Person()).collect(Collectors.toList());