Java 常用API

一、JAVA常用API

java.lang.Math

提供sin, cos, tan, exp, log, log10 等类方法,PI和E等类字段

java.lang.String(StringBuilder线程不安全,StringBuffer线程安全)


char charAt(int index)
返回给定位置的代码单元
boolean equals(Object other)
boolean equalsIngoreCase(String other)    如果字符串与other相等,返回true
忽略大小写
int length()    返回字符串的长度
String substring(int beginIndex)
String substring(int beginIndex, int endIndex)    返回一个新字符串,包含原始字符串从beginIndex到串尾或到endIndex-1的所有代码单元
String toLowerCase()
String toUpperCase()
返回小写字符串
返回大写字符串
int indexOf(String str[, int fromIndex])
int lastIndexOF(String str[, int fromIndex])    返回第一个/最后一个子串的位置,从起始位置或者fromIndex开始
java.util.Scanner

Scanner(InputStream in)
Scanner(File f)
Scanner(String data)    用给定的输入流创建一个Scanner对象
例子:Scanner in = new Scanner(System.in)
String nextLine()    读取输入的下一行内容
String next()    读取输入的下一个单词(以空格作为间隔)
int nextInt()
double nextDouble()    读取并转换下一个表示整数或浮点数的字符序列
for each循环
for(variable : collection) statement
collection这一集合表达式必须是一个数组或者是一个实现了Iterable接口的类对象

java.util.Arrays


static String toString(type[] a)    返回包含a中数据元素的字符串
static void sort(type[] a)    采用优化的快速排序算法对数组进行排序
static void binarySearch(type[] a, type v)    使用二分搜索算法查找值v
static Boolean equals(type[] a, type[] b)    如果两个数字相同,返回true
数组名.length
数组长度

java.util.Radom


Random()    构建一个新的随机数生成器
int nextInt(int n)    返回一个 0 ~ n-1之间的随机数
java.lang.Object

String toString()    返回描述该对象值的字符串。在自定义类中应覆盖这个方法
boolean equals(Object otherObject)    比较两个对象是否相等。在自定义类中应覆盖这个方法
Class getClass()
int hashCode()
返回包含对象信息的类对象
返回对象的散列码
static wait()
static notify()
static notifyAll()     

java.lang.Class


String getName()    返回这个类的名字
static Class forName(String className)    返回描述类名为className的Class对象
Object newInstance()    返回这个类的一个新实例
Field[] getFields()
Field[] getDeclareFields()    getFields()返回一个包含Field对象的数组,这些对象记录了这个类或其超类的公有域
getDeclareFields()返回的Field对象记录了这个类的全部域
Method[] getMethods()
Method[] getDeclareMethods()    getMethods()返回一个包含Method对象的数组,这些对象记录了这个类或其超类的公用方法
getDeclareMethods()返回的Field对象记录了这个类的全部方法
Constructor[] getConstructors()
Constructor[] getDeclareConstructors()
getConstructors()返回一个包含Constructor对象的数组,这些对象记录了这个类的公有构造器
getDeclareConstructors()返回的Constructor对象记录了这个类的全部构造器
断言
assert 条件;

assert 条件:表达式;

二、JAVA集合框架

Java集合类库将接口和实现分离。当程序使用集合时,一旦构建了集合就不需要知道究竟使用了哪种实现。因此,只有在构建集合对象时,使用具体的类才有意义。可以使用接口类型存放集合的引用。利用这种方法,一旦改变想法,可以轻松使用另外一种不同的实现,只需在对象创建处修改即可。

java.util.Collection<E>

Iterator<E> iterator()    返回一个用于访问集合中每个元素的迭代器
int size()    返回当前存储在集合中的元素个数
boolean isEmpty()    如果集合中没有元素,返回true
boolean contains(Object obj)
boolean containAll(Collection<? extend E> other)    如果集合中包含相等对象,返回true
boolean add(Object element)
boolean addAll(Collection<? extend E> other)
将一个元素添加到集合中,集合改变返回true
boolean remove(Object element)
boolean removeAll(Collection<?> other)
删除相等元素,成功删除返回true

java.util.Iterator<E>

boolean hasNext()    如果存在可访问的元素,返回true
E next()    返回将要访问的下一个对象
void remove()    删除上次访问的元素

Java库中具体集合
ArrayList    一种可以动态增长和缩减的索引序列
LinkedList    一种可以在任何位置进行高效插入和删除操作的有序序列
ArrayDeque    一种用循环数组实现的双端队列
HashSet    一种没有重复元素的无序集合
TreeSet    一种有序集
EnumSet    一种包含枚举类型值的集合
LinkedHashSet    一种可以记住元素插入次序的集
PriorityQueue    一种允许高效删除最小元素的集合
HashMap    一种存储键/值关联的数据结构
TreeMap    一种键值有序排列的映射表
EnumMap    一种键值属于枚举类型的映射表
LinkedHashMap    一种可以记住键/值项添加次序的映射表
WeakHashMap    一种其值无用武之地后可以被垃圾回收期回收的映射表
IdentityHashMap    一种用==而不是用equals比较键值的映射表
1、List
List接口扩展自Collection,它可以定义一个允许重复的有序集合,从List接口中的方法来看,List接口主要是增加了面向位置的操作,允许在指定位置上操作元素,同时增加了一个能够双向遍历线性表的新列表迭代器ListIterator。List接口有动态数组(ArrayList类)和双端链表(LinkedList类)两种实现方式。

java.util.List<E>


ListIterator<E> listIterator()
ListIterator<E> listIterator(int index)
返回一个列表迭代器
迭代器第一次调用next返回给定位置元素
void add(int i, E element)
void addAll(int i, Colletion<? extend E> elements)    向集合指定位置添加元素
E remove(int i)    删除给定位置元素并返回
E get(int i)    获得给定位置元素并返回
E set(int i, E element)
设置给定位置元素并返回原来的元素
int indexOf(Object element)
int lastIndexOf(Object element)    返回与指定元素相等元素在列表中第一次出现的位置
返回与指定元素相等元素在列表中最后一次出现的位置
java.util.ListIterator<E>
void add(E Element)    在当前位置添加一个元素
void set(E Element)    用新元素代替next或previous上次访问的元素
boolean havaPrevious()    反向迭代列表时是否还有可供访问的值
E previous()    返回前一个对象
int nextIndex()    返回下一次调用next时返回的元素索引
int previousIndex()    返回下一次调用previous时返回的元素索引

java.util.ArrayList<E>


ArrayList<E>()
构造一个空数组列表
boolean add(E obj)    在数组列表尾端添加一个元素,永远返回true
int size()    返回存储在数组中的当前元素数量
void set(int index, E obj)    设置数组列表指定位置的值
E get(int index)    获的指定位置的元素值
void add(int index, E obj)    向后移动元素,插入元素
E remove(int index)    删除一个元素,并将后面元素前移
java.util.LinkedList<E>

LinkedList()
LinkedList(Colletion<? extend E> elements)    构造一个链表
void addFirst(E element)
void addLast(E element)    添加元素到表头或表尾
E getFirst()
E getLast()    返回表头或表尾的元素
E removeFirst()
E removeLast()    删除表头或表尾的元素并返回
2、Set
Set接口扩展自Collection,它与List的不同之处在于,规定Set的实例不包含重复的元素。在一个规则集内,一定不存在两个相等的元素。AbstractSet是一个实现Set接口的抽象类,Set接口有三个具体实现类,分别是散列集HashSet、链式散列集LinkedHashSet和树形集TreeSet。

java.util.HashSet<E>


HashSet()
HashSet(Colletion<? extend E> elements)
HashSet(int initialCapacity)    构造散列表
java.util.LinkedHashSet<E>
LinkedHashSet是用一个链表实现来扩展HashSet类,它支持对规则集内的元素排序。HashSet中的元素是没有被排序的,而LinkedHashSet中的元素可以按照它们插入规则集的顺序提取。

java.util.TreeSet<E>
TreeSet扩展自AbstractSet,并实现了NavigableSet,AbstractSet扩展自AbstractCollection,树形集是一个有序的Set,其底层是一颗树,用红黑树实现,这样就能从Set里面提取一个有序序列了。在实例化TreeSet时,我们可以给TreeSet指定一个比较器Comparator来指定树形集中的元素顺序。树形集中提供了很多便捷的方法。

3、队列

java.util.Queue<E>(接口)

boolean add(E element)
boolean offer(E element)    如果队列没有满,将元素添加到队列尾部
E remove()
E poll()    如果队列不为空,删除并返回这个队列头部元素
E element()
E peek()    如果队列不为空,返回这个队列头部元素
java.util.Deque<E>
接口Deque,是一个扩展自Queue的双端队列,它支持在两端插入和删除元素,Deque接口由ArrayDeque和LinkedList这两个类实现,所以通常我们可以使用LinkedList来创建一个队列。PriorityQueue类实现了一个优先队列,优先队列中元素被赋予优先级,拥有高优先级的先被删除。

java.util.ProrityQueue<E>

优先级队列中的元素可以按任意顺序插入,却总是按照排序的顺序进行检索。优先级队列由堆实现。堆是一个可以自我调整的二叉树,对树执行添加和删除操作,可以让最小元素移动到根(最小堆),而不必花费时间对元素进行排序

4、Map接口

Map,图,是一种存储键值对映射的容器类,在Map中键可以是任意类型的对象,但不能有重复的键,每个键都对应一个值,真正存储在图中的是键值构成的条目。

java.util.Map<K,V>


V get(Object key)
获得与键对应的值
V put(K key, V value)
V putAll(Map<? extends K, ? extends V> entries)    将键与对应的值关系插入到映射中
boolean containKey(Object key)
boolean containValue(Object value)    查询
java.util.HashMap<K,V>
HashMap是基于哈希表的Map接口的非同步实现,继承自AbstractMap,AbstractMap是部分实现Map接口的抽象类。在之前的版本中,HashMap采用数组+链表实现,即使用链表处理冲突,同一hash值的链表都存储在一个链表里。但是当链表中的元素较多,即hash值相等的元素较多时,通过key值依次查找的效率较低。而JDK1.8中,HashMap采用数组+链表+红黑树实现,当链表长度超过阈值(8)时,将链表转换为红黑树,这样大大减少了查找时间。
java.util.LinkedHashMap<K,V>

LinkedHashMap继承自HashMap,它主要是用链表实现来扩展HashMap类,HashMap中条目是没有顺序的,但是在LinkedHashMap中元素既可以按照它们插入图的顺序排序,也可以按它们最后一次被访问的顺序排序。

java.util.TreeHashMap<K,V>

TreeMap基于红黑树数据结构的实现,键值可以使用Comparable或Comparator接口来排序。TreeMap继承自AbstractMap,同时实现了接口NavigableMap,而接口NavigableMap则继承自SortedMap。SortedMap是Map的子接口,使用它可以确保图中的条目是排好序的。在实际使用中,如果更新图时不需要保持图中元素的顺序,就使用HashMap,如果需要保持图中元素的插入顺序或者访问顺序,就使用LinkedHashMap,如果需要使图按照键值排序,就使用TreeMap。

5、其他集合类

下面主要介绍一下其它几个特殊的集合类,Vector、Stack、HashTable、ConcurrentHashMap以及CopyOnWriteArrayList。

java.util.Vector<E>

用法上,Vector与ArrayList基本一致,不同之处在于Vector使用了关键字synchronized将访问和修改向量的方法都变成同步的了,所以对于不需要同步的应用程序来说,类ArrayList比类Vector更高效。

java.util.Stack<E>

Stack,栈类,是Java2之前引入的,继承自类Vector。

java.util.HashTable

HashTable和前面介绍的HashMap很类似,它也是一个散列表,存储的内容是键值对映射,不同之处在于,HashTable是继承自Dictionary的,HashTable中的函数都是同步的,这意味着它也是线程安全的,另外,HashTable中key和value都不可以为null。

java.util.ConcurrentHashMap

ConcurrentHashMap是HashMap的线程安全版。同HashMap相比,ConcurrentHashMap不仅保证了访问的线程安全性,而且在效率上与HashTable相比,也有较大的提高。

java.util.CopyOnWriteArrayList

CopyOnWriteArrayList,是一个线程安全的List接口的实现,它使用了ReentrantLock锁来保证在并发情况下提供高性能的并发读取。


java.util.CopyOnWriteArraySet

CopyOnWriteArraySet,是一个线程安全的set接口的实现,它使用了ReentrantLock锁来保证在并发情况下提供高性能的并发读取。


ConcurrentLinkedQuerue是一个先进先出的队列。它是非阻塞队列。

ConcurrentSkipListMap可以在高效并发中替代SoredMap(例如用Collections.synchronzedMap包装的TreeMap)。

ConcurrentSkipListSet可以在高效并发中替代SoredSet(例如用Collections.synchronzedSet包装的TreeMap)。

6、泛型集合算法

6.1  排序

static <T extends Comparable<? super T>> void java.util.Collections.sort(List<T> elements,[new Comparator<T>(){ public int compare(T o1, T o2){return ...}   } ])    对列表元素排序
6.2  查找

static <T extends Comparable<? super T>> int java.util.Collections.binarySearch(List<T> elements, T key)    二分查找key,返回对象索引
6.3  其他

static <T> java.util.Collections.min(Collection<T> elements, Comparator<? super T> c)
static <T> java.util.Collections.max(Collection<T> elements, Comparator<? super T> c)
查找最小值/最大值
三、并发部分API
java.lang.Runnable

void run()    必须覆盖这个方法
java.lang.Thread

Thread()
Thread(Runnable target)    构造器
void start()    启动线程
void run()    如果没有重写,调用关联Runnable的run方法
void interupt()    中断线程(中止阻塞状态,对运行线程无作用)
void setPriority(int newPriority)    设置优先级(1-10,默认5)
static void yield()
static void sleep(long millis)    使当前线程处于让步状态(让步于同优先级或高优先级线程)
休眠
void setDaemon()    设置为守护线程
Thread.State getState()    获得线程当前状态
锁对象
 

  1.  
    ReentrantLock myLock = new ReentrantLock();
  2.  
    mylock.lock();
  3.  
    try{
  4.  
         critical section
  5.  
    }finally{
  6.  
         mylock.unlock();
  7.  
    }


条件对象

  1.  
    private ReetranLock mylock = new ReetranLock();
  2.  
    private Condition sufficientFunds = mylock.newCondition()
  3.  
    public void transfer(int from, int amount)
  4.  
    {
  5.  
        mylock.lock();
  6.  
        try{
  7.  
             while(account[from] < amount){
  8.  
                  sufficientFunds.await();
  9.  
              }
  10.  
              ...
  11.  
              sufficientFunds.singalAll();
  12.  
          }finally{
  13.  
              mylock.unlock();
  14.  
          }
  15.  
    }


synchronized关键字(内置锁)
格式1:synchronized 方法
格式2:synchronized(obj){}

使用synchronized如何设置条件变量


void notifyAll()    解除在对象上调用wait方法的线程的阻塞状态
void wait()    导致线程进入等待状态

volatile域
volatile只提供可见性(在线程工作内存中被修改后立即写入到主存中),不提供原子性。
使用final变量可以保证可见性:构造函数完成时即不变,未完成构造期间对其他线程不可见。

java.lang.ThreadLocal<T>
作用:将内存共享变量变为线程拷贝变量


Executor类执行器
1)调用Executors类(工厂类)中静态工厂方法newCacherThreadPool
2)调用submit提交Runnable或Callable对象
3)当不再提交任何任务时,调用shutdown

posted @ 2020-06-10 07:40  ElvisHUSTer  阅读(131)  评论(0编辑  收藏  举报