20201009 王维
学习总结
1.java.util.Map
1.4 LinkedHashMap
public class LinkedHashMap<K,V>
extends HashMap<K,V>
implements Map<K,V>
哈希表和双向链表实现的 Map 接口
具有可预测的迭代次序(有序)
非线程安全
允许空元素
构造方法,只说有区别的
/**
initialCapacity - 初始容量
loadFactor - 负载因子
accessOrder - 订购模式 - true的访问顺序, false的插入顺序 默认是false
*/
public LinkedHashMap(int initialCapacity,
float loadFactor,
boolean accessOrder)
//accessOrder表示的是存取顺序,true表示访问模式,false插入模式
//插入模式按照插入的顺序排放,始终不变
//访问模式是访问某个节点后,会将此节点放到链表的后边去
1.5 Properties
public
class Properties extends Hashtable<Object,Object>
Properties
类表示一组持久的属性。 Properties
可以保存到流中或从流中加载。 属性列表中的每 个键及其对应的值都是一个字符串。
操作和 Hashtable
基本一致,主要用于从流中记载或保存到流中去。(后期 JDBC 模块会使用到)
2. Set
Set接口常用的实现类有HashSet
,还有不常用的TreeSet
,其中HashSet
内部是通过LinkedHashMap
实现,TreeSet
是通过TreeMap
实现但是他实现了Collection
接口,具有迭代的能力
3.Collections
java.util.Collections
是 java 提供的一个集合操作的工具类。
如果提供给它们的集合或类对象为null
,则此类的方法都抛出一个 NullPointerException
static 变量
static final List EMPTY_LIST;//空List,不可变
//public static final List EMPTY_LIST = new EmptyList<>();
static final Map EMPTY_MAP ; //空Map,不可变
//public static final Map EMPTY_MAP = new EmptyMap<>();
static final Set EMPTY_SET ; //空Set,不可变
//public static final Set EMPTY_SET = new EmptySet<>();
static 方法
方法名 | 返回值 | 描述 |
---|---|---|
addAll(Collection<? super T> c, T... elements) |
boolean |
将elements,添加到c集合中 |
copy(List dest, List src) |
void |
将src 集合中的元素复制到dest 中,dest 中的元 素个数不能少于src 中的元素个数 |
disjoint(Collection<?> c1, Collection<?> c2) |
boolean |
如果两个指定的集合没有共同的元素,则返回 true |
fill(List<? extend T> list, T obj) |
void |
用指定的元素代替指定列表的所有元素 |
max(Collection<? extend T> coll) |
T |
根据其元素的 自然顺序返回给定集合的最大元素, 集合中的元素一定要实现Comparable接口 |
min(Collection<? extend T> coll) |
T |
原理同上,返回最小值 |
max(Collection<? extend T> coll, Comparator<? extend T> comp) |
T |
根据指定的比较器引发的顺序返回给定集合的最大 元素。 集合中的所有元素必须由指定的比较器相互 比较 |
min(Collection<? extend T> coll, Comparator<? extend T> comp) |
T |
原理同上,返回最小值 |
replaceAll(List<T> list, T oldVal, T newVal) |
boolean |
将列表中一个指定值的所有出现替换为另一个 |
reverse(List<?> list) |
void |
反转指定列表中元素的顺序 |
sort(List<?> list) |
void |
按照升序排列指定的列表。 列表中的所有元素必须 实现Comparable接口 |
sort(List<?> list, Comparator<? super T> c) |
void |
根据指定的比较器引起的顺序对指定的列表进行排 序。 列表中的所有元素必须使用指定的比较器相互 比较 |
binarySearch(List<? extends Comparable<? super T>> list, T key) |
int |
使用二叉搜索算法搜索指定对象的指定列表,集合 必须是排序后的。如果存在返回索引,如果不存在 返回负数 |
binarySearch(List<? extend T> list, T key, Comparator<? super T> c) |
int |
使用二叉搜索算法搜索指定对象的指定列表,使用前 必须排序 |
4. 泛型
4.1 概述
泛型是JDK1.5的新特性。泛型的本质是参数化类型。将对象的类型作为参数,指定到其他类或者方法上,从而保证类型转换的安全性和稳定性,这就是泛型。
4.2 特性
Java中的泛型,只在编译阶段有效。在编译过程中,正确检验泛型结果后,会将泛型的相关信息擦出,并且在对象进入和离开方法的边界处添加类型检查和类型转换的方法。也就是说,泛型信息不会进入到运行时阶段。
对此总结成一句话:泛型类型在逻辑上看以看成是多个不同的类型,实际上都是相同的基本类型。
4.3 泛型的使用
泛型有三种使用方式,分别为:泛型类、泛型接口、泛型方法
4.3.1 泛型类
泛型类型用于类的定义中,被称为泛型类。
class 类名称 <泛型标识:可以随便写任意标识号,标识指定的泛型的类型>{
private 泛型标识 /*(成员变量类型)*/ var;
.....
}
}
在使用泛型的时候如果传入泛型实参,则会根据传入的泛型实参做相应的限制,此时泛型才会起到本应起到的限制作用。如果不传入泛型类型实参的话,在泛型类中使用泛型的方法或成员变量定义的类型可以为任何的类型。
注意:
- 1. 泛型的类型参数只能是类类型,不能是简单类型。
- 1. 不能对确切的泛型类型使用instanceof操作。如下面的操作是非法的,编译时会出错。
if(ex_num instanceof Generic<Number>){
}
4.3.2 泛型接口
//定义一个泛型接口
public interface Generator<T> {
public T next();
}
注意:
实现泛型接口的类,必须为泛型接口传入实参,未传入泛型实参时,与泛型类的定义相同,在声明类的时候,需将泛型的声明也一起加到类中,如果不声明泛型,如:class FruitGenerator implements Generator<T>
,编译器会报错:"Unknown class"。当传入实参时,需要为泛型接口指定具体实参,如public class FruitGenerator implements Generator<String>
。
4.3.3 泛型方法
泛型类,是在实例化类的时候指明泛型的具体类型;泛型方法,是在调用方法的时候指明泛型的具体类型 。
public <类型参数> 返回值 方法名(类型参数列表)
定义泛型方法与方法所在的类、或者接口是否是泛型类或者接口没有直接联系,也就是说无论是不是泛型类,如果需要就可以定义泛型方法。
4.4 泛型类的实例化对象声明和创建的三种方式
List<String> list = new ArrayList<String>();
List<String> list1 = new ArrayList<>();
List list2 = new ArrayList<Integer>();
4.5 泛型通配符的上限和下限
List<? extends B> list = new ArrayList<>();// 没有意义,只能存 null
List<? super B> list2 = new ArrayList<>();//可以存 B 以及 B 的子类,也可存 null,等同于 List<B> lt = new ArrayList<>();
public static void test(List<? extends B> list) {
}//<? extends B> 作为方法的参数表示 B为上限 B 及 B 的子类
public static void test1(List<? super B> list) {
}//<? super B> 作为方法参数时表示 B为下限 B 及 B 的父类
心得体会
对于今天泛型的学习还有很多不懂的地方,泛型类的实例化对象的声明和创建的三种方法的区别还有点模糊,还有他们在编译和jvm中的距离操作过程。泛型通配符的上下限也存在一定的疑问,查阅资料表示extends表示上限,super表示下限,但是在有数组存在是有一定问题
近期评论