HashMap&Collections类的简单使用

Map集合的添加功能:
* V put(K key,V value):添加元素
* 如果键是第一次存储,就直接存储元素,返回null
* 如果键不是第一次存在,就用值把以前的值替换掉,返回以前的值
Map集合的删除功能:
* void clear():移除所有的键值对元素
* V remove(Object key):根据键删除键值对元素,并把值返回
Map集合的判断功能:
* boolean containsKey(Object key):判断集合是否包含指定的键
* boolean containsValue(Object value):判断集合是否包含指定的值
* boolean isEmpty():判断集合是否为空
Map集合的获取功能:
* Set<Map.Entry<K,V>> entrySet=map.entrySet():
* V get(Object key):根据键获取值
* Set<K> keySet=map.KeySet():获取集合中所有键的集合
* Collection<V> values=map.values():获取集合中所有值的集合
Map集合的长度功能:
* int size():返回集合中的键值对的个数




Map<String, Integer> map = new HashMap<>();    //Map接口的创建
System.out.println(map);            //输出顺序根据底层的哈希算法
Map的new为什么是Map map=new HashMap();而不是new Map();?
因为map是个接口,而接口不能被实例化!
HashMap是map接口的实现类





Map.Entry说明Entry是Map的内部接口,将键和值封装成了Entry对象
Map<String, Integer> map = new HashMap<>();
for(Entry<String, Integer> en : map.entrySet()) {
    System.out.println(en.getKey() + "=" + en.getValue());
}
en.getKey():获取键
en.getValue():获取值




interface Inter {                //接口的接口
    interface Inter2 {
        public void show();
    }
}
class Demo implements Inter.Inter2 {        //实现
    @Override
    public void show() {
    }
}




//LinkedHashMap可以保证怎么存就怎么取
LinkedHashMap<String, Integer> lhm = new LinkedHashMap<>();
lhm.put("张三", 23);
System.out.println(lhm);





//创建TreeMap类
TreeMap<Integer, String> tm = new TreeMap<>();





//Collecitons集合中的常见方法
ArrayList<String> list = new ArrayList<>();
Collections.sort(list);                //将集合排序
Collections.binarySearch(list, String str);    //二分查找
Collections.shuffle(list);            //随机打乱顺序,可以用来洗牌
Collections.reverse(list);            //反转集合
Collections.max(list);                //根据默认排序结果获取集合中的最大值






* Collection
     *         List(存取有序,有索引,可以重复)
     *             ArrayList
     *                 底层是数组实现的,线程不安全,查找和修改快,增和删比较慢
     *             LinkedList
     *                 底层是链表实现的,线程不安全,增和删比较快,查找和修改比较慢
     *             Vector
     *                 底层是数组实现的,线程安全的,无论增删改查都慢
     *             如果查找和修改多,用ArrayList
     *             如果增和删多,用LinkedList
     *             如果都多,用ArrayList
     *         Set(存取无序,无索引,不可以重复)
     *             HashSet
     *                 底层是哈希算法实现
     *                 LinkedHashSet
     *                     底层是链表实现,但是也是可以保证元素唯一,和HashSet原理一样
     *             TreeSet
     *                 底层是二叉树算法实现
     *             一般在开发的时候不需要对存储的元素排序,所以在开发的时候大多用HashSet,HashSet的效率比较高
     *             TreeSet在面试的时候比较多,问你有几种排序方式,和几种排序方式的区别
* Map
     *         HashMap
     *             底层是哈希算法,针对键
     *             LinkedHashMap
     *                 底层是链表,针对键
     *         TreeMap
     *             底层是二叉树算法,针对键
     *                 开发中用HashMap比较多





//嵌套HashMap的使用
HashMap<Student, String> hm1 = new HashMap<>();
HashMap<Student, String> hm2 = new HashMap<>();
HashMap<HashMap<Student, String>, String> hm = new HashMap<>();
hm.put(hm1, "");
hm.put(hm2, "");
//遍历双列集合
for(HashMap<Student, String> h : hm.keySet()) {                //hm.keySet()代表的是双列集合中键的集合
    String value = hm.get(h);                    //get(h)根据键对象获取值对象
    //遍历键的双列集合对象
    for(Student key : h.keySet()) {                    //h.keySet()获取集合总所有的学生键对象
        String value2 = h.get(key);    
        System.out.println(key + "=" + value2 + "=" + value);
    }
}





HashMap和Hashtable的共同点与区别
* 共同点:
* 底层都是哈希算法,都是双列集合
* 区别:
* 1,HashMap是线程不安全的,效率高,JDK1.2版本
*   Hashtable是线程安全的,效率低,JDK1.0版本的
* 2,HashMap可以存储null键和null值
*   Hashtable不可以存储null键和null值

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值