public static void main (String[] args)

  • public:让JVM自由调用这个main方法
  • static:JVM调用这个主方法,不会先创建主类对象,直接通过类来调用
  • void:主方法被JVM调用,返回值返回给JVM,没有意义。
  • 形参:JVM为形参复制,args

 

Scannner获取键盘输入:

hasNextXxx()

nextXxx()

Scanner sc=new Scanner(System.in);
while (sc.hasNextLine())
{
      sc.nextLine();
}

 

 

System类:代表当前JAVA程序的运行平台,程序不能创建System类的对象,提供了一些类变量和类方法。

identityHashCode(Object x)返回对象精确的hashCode值,两个对象的identityHashCode相同,必是同一个对象。

HashCode()方法可以被重写,不一定可以唯一标识丢下。

Runtime类:代表JAVA程序运行时环境,每个java程序都有一个与之对应的Runtime实例,应用程序通过该对象与其运行时环境相连,用getRuntime()获取Runtime对象。

Object类:是所有类,数组,枚举类的父类,把任何类型的对象赋给Object类变量都行。

常用方法:1.eaquls(),判断对象是否相等(两个对象是一个对象)2.finalize()垃圾回收。3.getClass()返回该对象运行时类。4.hashCode()返回对象的hashCode值,但很多类会重写。5.toString()返回对象的字符串表示。

clone(),protected类型,只能被子类重写或调用。

1.自定义类implements Cloneable

2.自定义类实现自己的clone()方法

3.实现clone时通过super.clone(),调用Object实现clone()方法来得到副本。

只对对象中的实例变量进行简单复制,实例变量是引用类型时,简单复制引用变量,指向同一个对象。

浅克隆

 

Objects类:工具类,空指针安全。

requireNonNull(),当传入参数不null,方法返回参数本身,否则引发NullPointerException异常,对方法形参进行输入教研。

 

String .StringBuffer,StringBuilder:

封装字符串,都实现了CharSequnece接口,字符串协议接口。

String不可变类,一旦一个对象被创建,那么对象的字符序列不可改变。

StringBuffer对象代表一个字符序列可变的字符串,append(),insert(),reserve()等可以改变字符序列。可以用toString()转换为String对象。线程安全。

StringBuilder类:字符串对象,和Buffer类似,无线程功能,性能略高。优先选择。

 

Random,ThreadLocalRandom

并发访问环境下,减少多线程资源竞争,保证线程安全。

 

HashSet类:按照Hash算法存储集合元素。(不允许重复元素)

1.不保证元素排列顺序,顺序可能与添加顺序不同,

2.HashSet不是同步的,如果多个线程同时访问一个HashSet,假设多个线程同时修改集合,必须通过代码来保证同步。

3.集合元素值可以是null

存入元素时,会调用hashCode()方法来得到哈希值,然后决定存储位置,如果两个元素通过equals()返回true,但是hashCode值不同,会存储在不同位置。

HashSet集合判断两个元素相等的标准:equals()比较相等,且hashCode()相等。

hashCode()方法重写规则:

1.同一个对象多次调用hashCode方法应返回相同的值,

 2.两个对象通过equals方法返回true时,两个对象的hashCode方法应该相同的值。

3.对象中用作quals方法比较标准的实例变量,都应该用于计算hash值。

保存可变对象要注意,可能导致包含两个相同的对象。尽量不要修改集合元素中参与计算hashcode的实例变量。

 

LinkedHashSet类:根据元素hash值决定元素存储位置,同时用链表维护元素次序,按照插入顺序保存。

性能略低于HashSet。(不允许重复)

 

TreeSet类:SortedSet接口。确保集合元素处于排序状态。根据元素实际值大小来进行排序。

采用红黑树来存储。   自然排序和定制排序。

1.自然排序:调用compareTo()来比较元素大小,并升序排列。

Comparable接口,compareTo()方法,返回一个整数值比较大小。

把一个对象添加到TreeSet里时,该对象的类必须实现Comparable接口,否则抛出异常ClassCastException。

如果需要TreeSet正常运作,里面只能添加同一种类型的对象。

集合中的元素总是引用,但习惯把被引用的对象叫做集合元素。

应该重写equals和comparTo,保证他们俩有相同结果。

 2.定制排序。Comparator接口。 compare方法。

 

Set类性能分析:

hashset性能总是比treeset好,因为treeset需要额外的红黑树算法来维护集合元素次序,需要保持排序的时候采用treeset,否则都用hashset

hashset子类:Linkedhashset,普通插入删除,比hashset慢一点,由于维护链表的额外开销,但有了链表,遍历会更快。

 

List集合:元素有序,可重复的集合。

每个元素都有顺序索引,允许重复元素,可通过索引访问。

ArrayList 和Vector区别:

ArrayList 线程不安全,多个线程访问同一个集合时,如果多个线程修改集合,必须手动保证同步性。

Vector线程安全的,无须保证同步性,所以性能比上低。

Vector提供Stack子类。

Arrays.ArrayList是一个固定长度的List集合,只能遍历访问,不可增删元素,否则引发异常:UnSupportedOperationException。

Queue集合,模拟队列。先进先出

LinkedList不仅List,还有双端队列,栈的功能。

ArrayList、ArrayDeque内部以数组形式保存集合元素,随机访问性能好。

LinkedList内部以链表形式保存集合元素,随机访问性能差,插入删除时性能好。

Vector也以数组形式存储集合元素,但加入了线程同步功能,各方面性能都不好。

大部分时候考虑ArrayList.

 

 

Map保存映射关系的数组,集合保存两组值,一组值保存Map里面的key,另外一组保存value.