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

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了
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值