zoukankan      html  css  js  c++  java
  • java.util (Collection接口和Map接口)

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

                    

    1.1  Collection接口

      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接口

      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方法。

    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);
    	    }
    	}
    
    }
  • 相关阅读:
    windows中dos命令指南
    HDU 2084 数塔 (dp)
    HDU 1176 免费馅饼 (dp)
    HDU 1004 Let the Balloon Rise (map)
    变态杀人狂 (数学)
    HDU 2717 Catch That Cow (深搜)
    HDU 1234 开门人和关门人 (模拟)
    HDU 1070 Milk (模拟)
    HDU 1175 连连看 (深搜+剪枝)
    HDU 1159 Common Subsequence (dp)
  • 原文地址:https://www.cnblogs.com/myseries/p/7508110.html
Copyright © 2011-2022 走看看