java.util (Collection接口和Map接口)

1:Collection和Map接口的几个主要继承和实现类

java.util (Collection接口和Map接口)                java.util (Collection接口和Map接口)

1.1  Collection接口

java.util (Collection接口和Map接口)

  Collection是最基本的集合接口,一个Collection代表一组Object,即Collection的元素(Elements)。一些Collection允许相同的元素而另一些不行。一些能排序而另一些不行。Java SDK不提供直接继承自Collection的类,Java SDK提供的类都是继承自Collection的“子接口”如List和Set。

  如何遍历Collection中的每一个元素?不论Collection的实际类型如何,它都支持一个iterator()的方法,该方法返回一个迭代子,使用该迭代子即可逐一访问Collection中每一个元素。典型的用法如下:
    Iterator it = collection.iterator(); // 获得一个迭代子
    while(it.hasNext()) {
      Object obj = it.next(); // 得到下一个元素
    }

1.1.1 Iterator 接口

  Iterator接口也是Java集合框架的成员,但它与Collection系列、Map系列的集合不一样:Collection系列集合、Map系列集合主要用于盛装其他对象,而Iterator则主要用于遍历(即迭代访问)Collection集合中的元素,Iterator对象也被称为迭代器。

2 Map接口

java.util (Collection接口和Map接口)

  Map是一个单独的接口,不继承于Collection。Map是一种把键对象和值对象进行关联的容器。一个key->value的对象

特点:key不允许重复

映射与集或列表有明显区别,映射中每个项都是成对的,Map是把键对象和值对象进行关联的容器。映射中存储的每个对象都有一个相关的关键字(Key)对象,关键字决定了对象在映射中的存储位置,检索对象时必须提供相应的关键字,就像在字典中查单词一样。关键字应该是唯一的,也就是说Map中的键对象不允许重复,这是为了保证查询结果的一致性。

  关键字本身并不能决定对象的存储位置,它需要对过一种散列(hashing)技术来处理,产生一个被称作散列码(hash code)的整数值,散列码通常用作一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。

实现类:

HashMap 实现一个键到值映射的哈希表,通过键取得值对象,没有顺序,通过get(key)来获取value,允许存储空对象,而且允许键是空(由于键必须是唯一的,当然只能有一个);

HashTable 实现一个映象,所有的键必须非空。为了能高效的工作,定义键的类必须实现hashcode()方法和equal()方法。这个类是前面java实现的一个继承,并且通常能在实现映象的其他类中更好的使用。

当元素的顺序很重要时选用TreeMap,当元素不必以特定的顺序进行存储时,使用HashMap。Hashtable的使用不被推荐,因为HashMap提供了所有类似的功能,并且速度更快。当你需要在多线程环境下使用时,HashMap也可以转换为同步的。

2.1 Map.Entry

  Map是java中的接口,Map.Entry是Map的一个内部接口。

  Map提供了一些常用方法,如keySet()、entrySet()等方法。

  keySet()方法返回值是Map中key值的集合;entrySet()的返回值也是返回一个Set集合,此集合的类型为Map.Entry。

  Map.Entry是Map声明的一个内部接口,此接口为泛型,定义为Entry<K,V>。它表示Map中的一个实体(一个key-value对)。接口中有getKey(),getValue方法。

java.util (Collection接口和Map接口)

public class MapTest {

	public static void main(String[] args) {

		Map<String,String> map = null;
map = new HashMap<String,String>(); map.put("name", "小明");
map.put("age", "18");
map.put("heigh", "175"); // 遍历Map的方法1
Set<Map.Entry<String,String>> set1 = map.entrySet();
Iterator<Entry<String, String>> iterator = set1.iterator();
while( iterator.hasNext()) {
Entry<String, String> entry = iterator.next();
Object key = entry.getKey();
System.out.println(key);
} // 遍历Map的方法2
Set<String> set2 = map.keySet();
Iterator<String> iterator1 = set2.iterator();
while(iterator1.hasNext()) {
Object key = iterator1.next();
Object value = map.get(key);
System.out.println("key=" + key +" " + "value= " + value);
} // 遍历Map中value的值
Collection<String> c = map.values();
Iterator<String> iterator3 = c.iterator();
while(iterator3.hasNext()) {
Object value = iterator3.next();
System.out.println(value);
}
} }
上一篇:安卓开发笔记——探索EventBus(转)


下一篇:AC日记——【清华集训2014】奇数国 uoj 38