学习Java第十六天
Collection接口:单列集合的顶级接口(数据独立)
数据结构都是都是具体的数据
存的数据都是独立
set集合不能出现重复的数据
Map接口:双列集合的顶级接口
键值对 形式进行存储
键是唯一,值可以重复
每一个键对应一个值(一一对应)
内部接口:Map.Entry<K,V> (接口里面又有一个接口)
常规方法:
添加:
**V put(K key, V value):**通过键值对来进行添加或修改
移除:
V remove(Object key):通过键来删除 键和值
判断:
boolean containsKey(Object key) :判断是否包含键名,不包含返回false.
boolean containsValue(Object value):判断是否包含value值,不包含返回false.
boolean isEmpty() :判断集合是否为空,为空返回True
获取:
void clear() :清空集合元素
V get(Object key):获取指定键名的value值。
int size() :获取键值对的数量,即集合的长度
Collection values() :获取所有value值,返回类型为Collection。
修改:
V put(K key, V value):通过键值对来进行修改或添加,键名存在时为修改,不存在时为添加。
双列集合的遍历方式:
- 获取到所有的key,来得到具体的值(遍历速度慢)
- 把每一组数据当成是一个整体来进行遍历(遍历速度快)
//第一种:
//先通过keySet()方法获取所有的键,返回的是一个Set集合
Set <Integer>set=map.keySet();
//然后使用迭代器进行迭代或者增强for循环遍历
Iterator<Integer> iter =set.iterator();
while (iter.hasNext()){
Integer i=iter.next();
System.out.println(i+"\t"+map.get(i).toString());
}
//第二种
//把每组数据当成整体//先通过entrySet()获取每组数据,返回的是Set<Map.Entry<K,V>>集合类型
Set<Map.Entry<Integer, Student>> set1 = map.entrySet();
Iterator<Map.Entry<Integer, Student>> iter1 = set1.iterator();
while (iter1.hasNext()) {
Map.Entry<Integer, Student> m = iter1.next();
System.out.println(m.getKey() + "\t" + m.getValue().toString());
}
map集合里嵌套map:使用上述遍历方式获取到外层所有的key,来得到具体的map,在获取里层的key,在遍历其值。
HashMap与HashSet:都是以hash表来存储。
HashSet相当于没有value值那部分,只关注键
HashMap:只关注键,value可以重复。
LinkedHashMap:HashMap 的一个子类,也是数组加上双重链表来进行存储, 有序
Hashtable Map的一个实现类。
Hashtable、HashMap 的区别:
- 版本不一样: Hashtable 1.0 HashMap 1.2
- Hashtable 不符合命名规范 HashMap 符合
- Hashtable 线程安全,效率低 ,HashMap 线程不安全 ,效率高
- HashMap已经替换掉Hashtable 。 hashMap 常用
- Hashtable:不可以存null键或者null值。
Collectios 集合工具类:
Collections.sort(list);//自然排序
Collections.reverse(list);//反转
Collections.max(list);//取最大值
Collections.min(list);//取最小值
Collections.binarySearch(list,1);//二分排序
Collections.shuffle(list);//随机置换
总结:看了双列集合Map下的方法,才知道类里面不仅可以有类,还可以有接口,后来经过自己实践,类里面还可以有抽象类,抽象类里面也可以有普通类和抽象类还有接口、接口里面也可以有普通类和抽象类和接口。但是这些讲述的少之又少,可以再了解点吗?