您的位置:首页 > 编程语言 > Java开发

Java基础第十四天--Map, HashMap, TreeMap

2015-03-30 16:49 471 查看
1. Map<K,V>  键值对--两个泛型K和V

 Map集合的数据结构对谁有效?--只对键有效,与值无关

 (比如想对值进行排序,Map没有提供的方法)

 

 Map的功能:

 1)添加功能
  V put(K key, V value): 

      如果键是第一次被存储,就是添加功能

      如果键已经在集合中存在,就是替换功能

 2)删除功能
  void clear()

  V remove(Object key): 根据指定的键删除键值对元素,并把值返回

 3)判断功能
  boolean containsKey(Object key)

  boolean containsValue(Object value)

  boolean isEmpty()

 4)获取功能
  Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合

  V get(Object key)

  Set<K> keyset(): 返回键的Set集合

  Collection<V> values():  返回值的Collection集合

 5)长度功能

  int size():  返回键值对的对数
  

 遍历方式
 1)通过键来找值
  a)获取所有键的集合 -- hm.keyset()

  b)遍历键的集合,获取到每一个键

  c)根据键找值 -- hm.get()

for(String key: hm.keyset()){
String value = hm.get(key);
System.out.println(value);
}


 2)通过Map.Entry<String,String>键值对对象集合来找键和值
  a)Set<Map.Entry<K,V>> entrySet():返回的是键值对对象的集合

   Set<Map.Entry<String,String>> set = hm.entrySet();
 
  b)接口 Map.Entry<K,V>  --方法

  K getKey();  V getValue();   

for(Map.Entry<String,String> me: set)
{
System.out.println(me.getKey()+"---"+me.getValue());
}

2. HashMap
 想实现唯一性,类似于HashSet

 如果是自定义类,实现唯一性要重写HashCode()和equals()方法

 如果是字符串类,字符串类已经重写了HashCode()和equals()方法

3. TreeMap
 类似于TreeSet

 如果是自定义类,想完成排序,三种方法(无参构造+Comparable;有参构造+显式实现Comparator;有参构造+Comparator匿名内部类)

 如果是String类或Integer类,它们已经实现了Comparable接口

4. LinkedHashMap
 键的数据结构是链表和哈希表

 键有序(存放与取出顺序一致),唯一

5. Hashtable和HashMap的区别

    Hashtable  JDK1.0  线程安全,    效率低,不允许null键和值

    HashMap   JDK1.2  线程非同步,效率高,允许null键和值

 
6. Map集合的嵌套
 1)HashMap里面嵌套一个HashMap

     HashMap<String,HashMap<String,String>> czbk = new HashMap<>();

 2)HashMap里面嵌套一个ArrayList

     HashMap<String,ArrayList<Student>> czbk = new HashMap<>();
 
7. Collection是单列集合的顶层接口
 Collections是针对Collection集合进行操作的工具类

 

 Collections中要掌握的功能

 1)public static <T> void sort(List<T> list) --泛型方法:排序

 2)public static <T> int binarySearch(List<T> list, T key) --泛型方法:二分查找

 3)public static <T> max(List<T> list) 

       public static <T> min(List<T> list)

 4)public static void reverse(List<T> list)

 5)public static void shuffle(List<T> list)  随机置换

 6)在多线程环境中有用

    如何创建一个线程安全的集合?

public static <T> List<T> synchronizedList(List<T> list)
synchronizedSet  synchronizedMap

List<String> list = Collections.synchronizedList(new ArrayList<String>());
//不再使用Vector了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐