学习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):通过键值对来进行修改或添加,键名存在时为修改,不存在时为添加。

双列集合的遍历方式:

  1. 获取到所有的key,来得到具体的值(遍历速度慢)
  2. 把每一组数据当成是一个整体来进行遍历(遍历速度快)
//第一种:
//先通过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 的区别:

  1. 版本不一样: Hashtable 1.0 HashMap 1.2
  2. Hashtable 不符合命名规范 HashMap 符合
  3. Hashtable 线程安全,效率低HashMap 线程不安全 ,效率高
  4. HashMap已经替换掉HashtablehashMap 常用
  5. Hashtable:不可以存null键或者null值。

Collectios 集合工具类:

Collections.sort(list);//自然排序
Collections.reverse(list);//反转
Collections.max(list);//取最大值
Collections.min(list);//取最小值
Collections.binarySearch(list,1);//二分排序
Collections.shuffle(list);//随机置换

总结:看了双列集合Map下的方法,才知道类里面不仅可以有类,还可以有接口,后来经过自己实践,类里面还可以有抽象类,抽象类里面也可以有普通类和抽象类还有接口、接口里面也可以有普通类和抽象类和接口。但是这些讲述的少之又少,可以再了解点吗?