[黑马程序员] 集合框架2——Map系 & 集合工具类(Collections、Arrays)

---------------------- ASP.Net+Android+IO开发.Net培训、期待与您交流! ----------------------

0. 集合框架按其所实现的接口, 大致能分成Collection系 和Map系. 


1. Map集合: 存储键值对, 且要保证键的唯一性. 


2. Map与Collection的区别: 

  • Map与Collection在集合框架中属并列存在 
  • Map存储的是键值对
  • Map存储元素使用put方法,Collection使用add方法
  • Map集合没有直接取出元素的方法,而是先转成Set集合,在通过迭代获取元素
  • Map集合中键要保证唯一性
  • * Map没有迭代器. 

3. Map的共性方法:
  • 添加 
  • put(K key, V value) 
  • putAll(Map<? extends K,? extends V> m)
  • 删除
  • clear() 
  • remove(Object key)
  • 判断
  • containsValue(Object value) 
  • containsKey(Object key) 
  • isEmpty()
  • 获取
  • get(Object key) 
  • size() 
  • values() 
  • * Set<Map.Entry<k, v>> entrySet: 将map集合中的映射关系存入到set集合中, 而这个关系的数据类型就是Map.Entry. (entry, 中文"条目"的意思. ) 
  • keySet(): 将map中所有的键存入到Set集合. 因为set具备迭代器, 所以可以通过迭代取出所有的键, 然后用get方法取出所有的值. 


4. entrySet()方法示例:

import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

public class MapDemo2 {

	public static void main(String[] args) {
		
		Map<String, String> map = new HashMap<String, String>();
		
		map.put("02", "zhangsan2");
		map.put("03", "zhangsan3");
		map.put("01", "zhangsan1");
		map.put("04", "zhangsan4");

		Set<Map.Entry<String, String>> entrySet = map.entrySet();
		
		Iterator<Map.Entry<String, String>> it = entrySet.iterator();
		
		while(it.hasNext())
		{
			Map.Entry<String, String> me = it.next();
			String key = me.getKey();
			String value = me.getValue();
			
			System.out.println(key+":"+value);
		}
	}

}


5. Map的实现类
    |-- Hashtable: 底层是哈希表数据结构. 不能存入null键和null值. 线程安全. 
    |-- HashMap: 底层是哈希表数据结构. 能存入null键和null值. 线程不安全. 
    |-- TreeMap: 底层是二叉树数据结构. 线程不安全. 可以用于给map集合中的键经进行排序. 


6. * Map与Set很像, 因为, Set底层就是使用了Map集合. 


7. TreeMap: 与TreeSet类似, 可以按key进行排序. 


8. 工具类java.util.Collections和java.util.Arrays的作用: 

  • Collections: 对集合进行查找. 
    取出集合中的最值. 
    对List集合进行排序. 
    等.. 
  • Arrays: 将数组转成List集合. 
    对数组进行排序. 
    对数组进行二分查找. 
    等..

9. Collections的"一些"方法:
  •  public static <T> void fill(List<? super T> list,T obj): 填充. 将list的所有元素改为obj. 
  • reverse(list): 原位反转列表. 
  • * reverseOrder方法返回一个比较器的反序比较器. 
  • * public static <T> Collection<T> synchronizedCollection(Collection<T> c): 返回相应的同步的集合. 
    public static <T> Set<T> synchronizedSet(Set<T> s)等, 这个有一系列的...

===============下面是JDK1.5新特性=========================
10. 增强for循环: for(集合中元素的类型, 集合){}, 相当于对集合进行遍历. 
建议遍历数组时使用传统for, 因为可定义脚标. 

11. * 可变参数: 起始就是一种数组参数的简写形式. 不用每次都手动建立数组对象, 只要将要操作的元素作为参数传递即可, 隐式地将这些参数封装成了数组. 

  • 格式: void show(int... a){}
  • 可变参数一定要定义在参数列表的最后. 
  • 因为是隐式封装成数组的, 所以直接传入个数组也行. 例子: 
    class Test2
    {
            public static void main(String [] args)
            {			
            	int[] arr = {1,2,3,7};
            	show(arr);   	//传个数组
            }
    
            public static void show(int... a)
            {
            	for(int x: a)
            	{
            		System.out.println(x);
            	}
            }
    }


12. * 静态导入: 例如: import static java.util.Arrays.*; ---->>导入Arrays这个类中的所有静态成员. (有重名时还是要指定所属的对象或类.)
import static java.lang.System.*;		//导入System类中的所有静态成员. 

public class StaticImport extends Object {

	public static void main(String[] args) {
		out.println("haha");		

	}


---------------------- ASP.Net+Android+IOS开发.Net培训、期待与您交流! ----------------------

详细请查看:http://edu.csdn.net



原文地址:https://www.cnblogs.com/snake-hand/p/3148184.html