1.map
- collection每次存仅一个,单列;map每次存两个,双列
- map映射关系,键值对,键不能重复,值能重复
- map本身是接口,仅能用hashmap,linkedhashmap
- hashset本身是hashmap,键需要保证唯一性,重写hashcode,equals
- put(k,v)存;get()取
map<String,integer> map=new hashmap<>();
map.put();
使用多态会增强扩展性
put一般返回null,如果存相同键则会返回被覆盖的值
map.get(key)会返回key对应value,如果无此值则会返回null
- remove(key),删除对应v,返回被删除的v
- keyset();
set<String> set=map.keyset();
将map所有键存在set中
之后用增强for或iterator遍历
- 每一个对象均有getclass,获得本类class名称
- keyset返回getclass是hashset$ketset,$表示内部
- map中static entry接口,entry是将键值关系封装成对象,Map.entryset()返回set<entry<k,v>>,entry.getkey和entry.getkey可以获得map中的键值
Map<String, Person> perMap=classNameIterator.next().getValue();
Set<Map.Entry<String, Person>> perEntrySet=perMap.entrySet();
Iterator<Map.Entry<String, Person>> perEntryit=perEntrySet.iterator();
while (perEntryit.hasNext()) {
Person per=perEntryit.next().getValue();
System.out.println(per.name+" ,,"+per.age);
}
这个map中是一个自定义Person类
entry是类内接口Map.Entry<String, Person>
增强for同效
- 增强for不能遍历map,是遍历map.entryset返回的set类
- map存对象为键时候需保证对象唯一性,在对象中重写hashcode和equals方法
- alt+shift+s相当于右键
2.linkedhashmap用法相同但是保证了迭代顺序
3.map接口实现类hashtable底层均是哈希表和hashmap一样
hashtable同步·慢被抛弃,并且不能存null,hashmap快,允许存null
- 但hashtable子类propreties和io结合可以永久存储还在使用
4.静态导入
- 减少代码量
import static java.lang.System.out
则在syso时候就不用写system了
注意最末层必须是静态成员,如out
5.方法可变参
public void name(String a,int...b)
每个方法仅能有一个可变参,
可变参必须写在参数列表最后
可变参必须固定类型
可变参返回是一个数组
6.集合操作工具类
- 静态方法,collections.sort,升序
- Collections.binarySearch(list, key),二分法查找key,没有返回(-插入点-1)
- Collections.shuffle(list)打乱集合顺序
- 集合嵌套,集合中有集合元素,嵌套for遍历
- 简体中没有♥图形,存储时候需要utf-8
- 斗地主发牌重点是用一个list相对应牌号存在map中,操作的是list,只有看牌时候才会用list来对应map中value牌值
sort整牌,shuffle洗牌
嵌套数组1~13,和四种花色{"♥","♣","♦","♠")+大小王完成一副牌