前言
读源码,写代码
基本的包lang的基本情况
1.java.lang.Object
java.util.Objects
Object:
01.hashCode() equals() toString()
02.clone() :Object类的clone()方法是一个native方法
clone方法首先会判对象是否实现了 Cloneable 接口,若无则抛出CloneNotSupportedException
public boolean equals(Object obj) { return (this == obj);}
shallow copy" of this object, not a "deep copy" operation.
03.getClass notify() notifyAll() wait() finalize()
2.java.lang.Cloneable
public interface Cloneable {}
说明: 实现此接口的类应当重写 Object.clone方法 (被保护)带有public
深度拷贝
用instanceof关键字运算符来进行类型查询 if (obj instanceof Cloneable) {
3.java.lang.Comparable
public interface Comparable<T> { int compareTo(T o)}
要用Comparable接口,则必须实现这个接口,并重写comparaTo()方法;确定该类对象的排序方式
java.util.Comparator
Comparator{ compare()}
Comparable 更像是一个内部排序接口,一个类实现了Comparable比较器,就意味着它本身支持排序;
可以用Collections.sort() 或者 Arrays.sort() 进行排序
compare() 方法的用法和Comparable 的 compareTo() 用法基本一样,这个方法不允许进行null值比较,会抛出空指针异
对于一些自定义类,它们可能在不同情况下需要实现不同的比较策略,我们可以新创建 Comparator 接口,
然后使用特定的 Comparator 实现进行比较
4.java.lang.Iterable
public interface Iterable<T> {Iterator<T> iterator();}
只是返回了一个Iterator对象
实现了Iterable的类可以再实现多个Iterator内部类
java.util.Iterator
public interface Iterator<E>
Iterator 为Java中的迭代器对象,而 iterable 接口里定义了返回 iterator 的方法
public interface Iterator<E> {
boolean hasNext();
E next();
}
5.java.lang.Class
getPrimitiveClass
java.lang.ClassLoader
java.lang.Runnable
public interface Runnable
java.io.Serializable
public interface Serializable {}
java.lang.Readable //Readable 是一个字符源。read方法的调用方能够通过 CharBuffer 使用 Readable 中的字符
public interface Readable {
java.util.Collection
public interface Collection<E> extends Iterable<E>
public interface Map<K,V> {
public abstract class AbstractMap<K,V> implements Map<K,V> {
public class HashMap<K,V> extends AbstractMap<K,V> implements Map<K,V>, Cloneable, Serializable {
public interface SortedMap<K,V> extends Map<K,V> {
public interface NavigableMap<K,V> extends SortedMap<K,V> {
public class TreeMap<K,V>extends AbstractMap<K,V> implements NavigableMap<K,V>, Cloneable, java.io.Serializable
6.Java中标记接口 以用作描述类的元数据,运行时通过反射机制去获取元数据,1.5之后注解(Annotation)才成为了最好的维护元数据的方式
Java中的标记接口(Marker Interface),又称标签接口(Tag Interface)
RandomAccess 接口
Cloneable 接口
Serializable 接口
常用基础类
包装类
String类
Array数组类
具体情况:
1.包装类
Boolean.valueOf() 静态方法 装箱操作--将基本类型转化为包装类型 (Java1.5自动装箱和拆箱)
b.booleanValue() 拆箱操作
共同点: 重写了 Object 的方法 : equals() hashCode() toString()
实现了 Comparable 接口
不可变性 -- final 不可继承, 变量设置为private且没有setter方法
2.String
public final class String implements java.io.Serializable, Comparable<String>, CharSequence {
方法: 自身的情况,和其他字符的情况
判断:
isEmpty startsWith endsWith
contains matches equals() equalsIgnoreCase()
获取: indexOf lastIndexOf
charAt() length()
codePointAt()方法在字符串的指定索引处返回字符的Unicode值
变换: toLowerCase toUpperCase trim substring()
replace replaceFirst replaceAll split 正则
compareTo compareToIgnoreCase equals equalsIgnoreCase()
valueOf 数据类型转换
其他: 结合其他的语句: 迭代循环访问
说明: equals() hashCode() toString()
public int compareTo(String anotherString) {
可变动
StringBuffer 线程安全
StringBuilder = + += 的背后是采用StringBuilder的append()
3.Array 数组 同类型元素(元素可以为:primitive or reference 基本类型 或 引用类型) interface type/abstract class
数组长度创建时指定
数组的长度不是数组类型的一部分,在方法中,如果参数的类型是例如 String[] ,调用传入的数组可以包含任意个元素
数组类型不是类,但数组实例是对象
数组实现了 Serializable,即 数组中元素可以序列化,则数组可以被序列化
元素: 没有名称,使用的 index values 来进行查看
Every array type implements the interfaces Cloneable and java.io.Serializable
type annotations
创建: An array creation expression is used to create new arrays
getLength
get getBoolean getByte getChar getShort getInt getLong getFloat getDouble
set setBoolean setByte setChar setShort setInt setLong setFloat setDouble
Arrays: 复制 比较 批量设置值 计算Hash值 排序 查找 toString
存储固定大小的同类型元素 -- component type of the array 元素的类型 元素的值 数组 element type
Arrays must be indexed by int values
copyOf
copyOfRange
equals
fill
相关: myIDArray[0] 数组元素的值, 数组的索引 length是数组对象的属性
int[] myIDArray = new int[5];
int len = myIDArray.length;
初始化: 原始数据类型的数组元素被初始化为其数据类型的默认值
List<Integer> list=new ArrayList(Arrays.asList(sz));//**须定义时就进行转化**
说明:声明 int[] a;
创建和初始化数组-- 创建即new
声明和初始化 int[] a = {1,2,3}; ==这种条件下可以省略new关键字和元素类型
第二种:先使用new关键字创建数组,然后再分别为数组中的元素赋值,完成初始化操作
其他情况
方法
带括号的() - 无参数的情况
类名 对象名= new 构造方法; (构造方法 构造方法和类名相同)
()是参数,里面没东西就是没有参数的构造方法
声明变量,存储一个 XXX的对象
创建这个对象 ,括号中可选的参数列表,会传入类的构造方法,初始化新对象的内部字段
匿名类
匿名类是一种没有名称的局部类,匿名类是一种表达式
构成 = new 类名称(){} 花括号中的类主体
匿名类没有构造方法,括号内常为空
2、匿名类实现HelloWorld接口
HelloWorld frenchGreeting = new HelloWorld() {
String name = le monde";
public void greet() { greetSomeone("tout le monde");}
};
lambda表达式
参数列表 方法主体
() -> {}
Stream 表达
<R> Stream<R> map(Function<? super T, ? extends R> mapper);
IntStream mapToInt(ToIntFunction<? super T> mapper);
LongStream mapToLong(ToLongFunction<? super T> mapper);
public class Java8Example {
public static void main(String[] args) {
List<Integer> transactionsIds = Arrays.asList(3, 2, null,2, 3, 7, 3, 5);
IntSummaryStatistics stats = transactionsIds
.stream()
.filter(string ->string!=null)
.mapToInt((x) ->x)
.summaryStatistics();
System.out.println("列表中最大的数 : " + stats.getMax());
System.out.println("列表中最小的数 : " + stats.getMin());
System.out.println("所有满足条件数之和 : " + stats.getSum());
System.out.println("所有满足条件数的个数 : " + stats.getCount());
System.out.println("平均数 : " + stats.getAverage());
}
}
参考
Comparable 和 Comparator的理解 https://www.cnblogs.com/cxuanBlog/p/10927495.html
Java中的Iterable与Iterator详解 https://www.cnblogs.com/litexy/p/9744241.html