1.System.exit(0)
无论程序怎么样,finally里的程序必须执行
除非前面有System.exit(0);停止虚拟机出现。
2.Collections的shuffe()方法;
Collections有个方法shuffe使用默认随机源对指定列表进行置换。所有置换发生的可能性都是大致相等的
斗地主生成牌,洗牌,发牌,看牌的实现;
生成牌:
有54张牌,一个编号对应一个牌;
ArrayList存储编号;HashMap存牌,ArrayLis作为key是编号,值是牌;
一个Strings[]存1-K的13张牌,一个Strings[]存四个花色;
HashMap的0和1存储大王和小王;
两个嵌套for生成其他52张牌。
洗牌:
利用Collections集合shuffe()方法,打乱ArrayList的54个编号顺序,这样就相当于HashMap顺序变了,达到洗牌效果。
Collections.shuffle(ArrayList);
发牌:
ArrayList循环,留下三张牌;其余的判断能否被三整除,按余数发牌,将其存在三个新建的ArrayList中
看牌:
用新建的ArrayList中17个数据,从HashMap中取出对应的value。
3.集合的并发修改异常理解
集合在遍历时,你突然修改了集合中的一个值,或添加,引起索引混乱出现并发异常:
java.util.ConcurrentModificationExcepton 并发修改异常
4.数据库未连接异常
Initializiing Spring root web Application.context
5.java中接口的理解
1.包含方法和属性(成员变量)
其中方法都是抽象方法,即只有方法名没有方法体的形式。
所有成员变量都是常量没有变量
2.接口存在的意义:接口的存在是根据外部的功能而存在的
3.接口思想:封装
4.接口和抽象类:优先选用接口
6.this关键字
当成员变量和局部变量重名的时候,java的就近原则在局部方法里将会优先使用局部变量。
想要获得成员变量的时候就得使用this关键字
this是本类对象的引用,那个对象调用,this就隶属那个对象,而对象是堆内存地址,this也就变成了堆内存首地址。成员变量在堆内存中因此this也就成为了指向成员变量的对象
例如:set的赋值:
public void setBirthDate(String birthDate) {
this.birthDate = birthDate;
}
此处set参数值birthDate是局部的,this.birthDate是当前类的。
7.Set接口的实现类
/*
b) 常用实现类:
i. HashSet:此类实现 Set 接口,由哈希表(实际上是一个 HashMap 实例)支持。
ii. LinkedHashSet:可保证迭代顺序。
iii. TreeSet:要求加入其中的元素必须实现java.lang.Comparable接口,
通过Comparable接口实现的规则来确定元素在TreeSet中的顺序。
当加入一个元素e时会将TreeSet中的每个元素与加入元素e进行比较
即调用元素实现的接口Comparable.compareTo(Object o)方法来确定e所在TreeSet中的位置。
c) 常用方法:Iterable <--java.util.Collection <-- [List, Set]
i. add(Object o):如果 set 中尚未存在指定的元素,则添加此元素。
ii. addAll(Collection c) :如果 set 中没有指定 collection 中的所有元素,则将其添加到此 set 中。
iii. clear() : 移除此 set 中的所有元素。
iv. contains(Object o):如果 set 包含指定的元素,则返回 true。
v. isEmpty() :如果 set 不包含元素,则返回 true。
vi. iterator() :返回在此 set 中的元素上进行迭代的迭代器。
vii. remove(Object o) : 如果 set 中存在指定的元素,则将其移除。
viii. size() :返回 set 中的元素数(其容量)。
*/
1.HashSet集合,本质是HashMap;特点:无序,存储和取出顺序不同,不存储重复元素,代码上和ArrayList一样。
2.set接口的使用,特点:不重复元素,没索引;
3.LinkedHashSet基于链表的哈希表实现,继承自HashSet,特点:有序,线程不安全。
4.面试题:
- 两个对象哈希值相同,p1.hashCode()==p2.hashCode(),两个对象的equals不一定是true;
- 两个对象的equals是true,则两个对象的hashCode一定相同;
8.java存储结构
堆栈(先进后出),队列(先进先出),数组(按下标查询简单),链表(增删简单)
9.list接口
1.三大特性:有序,有索引,可重复。
10.迭代器并发异常
在用迭代器遍历集合时,对集合中的内容进行了修改或修改了集合的长度。
11.map
/*
Map接口的实现之一:
i. HashMap:允许使用 null 作为值和 null 作为键,非线程安全,不能保证元素的顺序性。
i. HashTable:不允许null键和null值。与HashMap(非线程安全)相似但它是多线程安全的。
ii. LinkedHashMap:Map 接口的哈希表和链接列表实现,具有可预知的迭代顺序。
此实现与 HashMap 的不同之处在于,后者维护着一个运行于所有条目的双重链接列表。
LinkedHashMap是HashMap的子类,它具有Map结构的同时,还具有链表的顺序性。
d) Map常用方法:
i. clear() :清空集合,从此映射中移除所有映射关系。
ii. boolean containsKey(Object key) :如果此映射包含指定键的映射关系,则返回 true。
iii. boolean containsValue(Object value):
如果此映射将一个或多个键映射到指定值(遵循 == 或equals()方法协定),则返回 true。
iv. entrySet() :返回此映射中包含的映射关系的 Set 视图。
v. keySet() :返回此映射中包含的键的 Set 视图。
vi. get(Object key) :返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
vii. put(K key, V value):将指定的值与此映射中的指定键关联。
viii. remove(Object key):如果存在一个键的映射关系,则将其从此映射中移除。
ix. size() :返回此映射中的键-值映射关系数。
x. Collection values() : 返回此映射中包含的值的 Collection 视图。
*/