Classes & Data Structures

Classes & Objects

Objects.equals(a,b) //检验A和B的相等性
//equals方法要求具有自反性、对称性、传递性、一致性(反复调用结果应当一致),以及非空!=null
getclass().getName()//可以获得类名字符串
A instanceof B运算可以判定一个实例是否是给定类的实例

泛型

//用以下方式定义一个泛型类:
public class ClassName<T,U>{
    private T field;
    ...
}
//用以下方式定义一个泛型方法:
class ClassName {
    public <T> T getString(T a){
        ...
    }
}
//用以下方式对T的方法进行限定(良心啊):
class ClassName {
    public <T extends SomeInterfaceOrClass & SomeOtherInterface> T getString(T a){//限定使用&分隔,而类型变量用逗号分隔;限定中至多有一个是类
        ...
    }
}
//泛型类/接口可以普通地继承:
public class Something<E> implements Parent<E>

集合接口Collection

集合框架collection:接口和实现分离 Collection是一个接口,Collections是一个类

import java.util.Collections;
//Collection 接口的基本方法:
boolean add(E ele); // add element
Iterator<E> iterator();//return iterator
int size(); //return size
boolean isEmpty()
boolean contains(Object obj)
boolean addAll(Collection c)
boolean remove(Ojbect obj)
void clear()


//Iterator<E>'s basic method:
boolean hasNext();
E hasNext();
//so you can iterate over the collection like this:
while (iter.hasNext()){
    ClassName ele = iter.next();
    ...
}
//to make it easier, try for each:
for (ClassName ele : c) {
    //do something
}//this works for all classes that impl Collection
//can reduce words with lambda expression:
iterator.forEachRemaining(ele -> System.out.println(ele));

列表接口List

//List is sequential and can be accessed by index

集合接口Set

//Set can store no duplicate elements judged by equals()

映射接口Map

使用put添加,get访问,用Map.entry<typeA,typeB>作为变量可以for each遍历

实用数据结构

/** 动态数组(向量)ArrayList */
ArrayList<ClassName> arr = new ArrayList<>(int);//可以提供一个可选参数作为初始容量,但注意此时数组列表内并没有元素(甚至空元素)
arr.add(ClassName obj); //添加元素
arr.size();//获取数组大小
arr.get(index);//获取index位置元素
arr.set(index,content);//对index位置的元素赋值content。只能操作已有元素
arr.toArray(a);//把数组列表内容移到静态的数组a中
//可以使用for each遍历

/** 可寻址的映射表HashMap */
HashMap<ClassName> hm;

/** 链表LINKEDLIST LinkedList */
LinkedList<E> ll;

/** 双端队列 ArrayDeque */
ArrayDeque<E> ad;

/** 散列映射 HashMap */
import java.util.HashMap;
Map<S,T> someMap = new HashMap<>();
someMap.put(key,value);
someMap.get(key) -> value(or null);
someMap.getOrDefault(key,0) -> value(or 0);
    //application: word counting
    someMap.put(word,someMap.getOrDefault(word,0)+1);
    //or merge() instead(not that general)
    someMap.merge(word,1,Integer::sum);
someMap.remove(key);
//return view:
keySet()
values()
entrySet()
for (Map.Entry<S,T> entry:someMap.entrySet()){
   ...
}

子范围/视图

如subList(a,b)取一个List的部分区间,subMap(K1,K2)取SortedMap范围内的的子集合 不可修改视图:试图修改集合时抛出异常 Collections.unmodifiable[somecollectiontype]

SortedSet<E>

建立有序集合

Last updated

Was this helpful?