2020.11.23java集合Map接口、Collections类

1.Map接口

1.特点:双列存储,键对应值,键不能重复,值可以重复。如果键重复,后面的键的值会将已经添加的键的值覆盖掉。
2.分为:
(1)HashMap
无序的(不是根据添加顺序排列的,是根据哈希值排列的,与HashSet相似,HashSet底层就是用HashMap实现的)。

public class HashMapDemo {
    /*
    * Map:双列存储  键--值 键不能重复,值可以重复
    * HashMap
    * TreeMap
    * HashTable*/
    public static void main(String[] args) {
        /*键去重复:hashCode() equals()
         * 如果键重复,后面的键的值会覆盖已将添加进入的键的值
         * 允许一个为空的键*/
        Map<String,String> map = new HashMap<>();
        map.put("c","b");
        map.put("a","c");
        map.put("c","c");
        map.put("s","d");
        map.put("e","a");
        map.put("s","s");
        System.out.println(map);//{a=c, c=c, s=s, e=a}
        /*map.clear();//清空
        System.out.println(map);//{}*/
        /*map.remove("a");//删除对应键的元素
        System.out.println(map);//{c=c, s=s, e=a}*/
        System.out.println(map.get("a"));//返回键对应的值  c
        System.out.println(map.containsKey("a"));//判断是否有该键  true
        System.out.println(map.containsValue("s"));//返回是否有该值  true
        System.out.println(map.isEmpty());//返回是否为空  false

        Collection<String> values = map.values();
        System.out.println(values);//[c, c, s, a]
        Set<String> keySet = map.keySet();
        //遍历1
        for(String key:keySet){
            System.out.println(key+"==="+map.get(key));
            /*a===c
            c===c
            s===s
            e===a*/
        }
        //遍历2
        Set<Map.Entry<String,String>> entrySet = map.entrySet();
        System.out.println(entrySet);//[a=c, c=c, s=s, e=a]
        for(Map.Entry<String,String> entry : entrySet){
            System.out.println(entry.getKey()+"==="+entry.getValue());
            /*a===c
            c===c
            s===s
            e===a*/
        }
    }
}

(2)TreeMap
有序的(根据自然顺序排列),键的类型必须实现排序接口(Comparable),重写CompareTo方法。
(3)Hashtable
底层实现为哈希表和单链表,是线程安全的。

public class TreeMapDemo {
    public static void main(String[] args) {
        TreeMap<String,String> tmap = new TreeMap<>();
        //按照自然顺序排列,键的类型所属类必须实现排序接口
        tmap.put("a","v");
        tmap.put("d","a");
        tmap.put("g","s");
        tmap.put("a","a");
        tmap.put("r","d");
        System.out.println(tmap);//{a=a, d=a, g=s, r=d}

        Hashtable<String,String> map = new Hashtable<>();
        //Hashtable底层实现也是哈希表+单链表  线程安全的
        map.put("a","v");
        map.put("d","a");
        map.put("g","s");
        map.put("a","a");
        map.put("r","d");
        System.out.println(map);//{a=a, r=d, g=s, d=a}
    }
}

2.Collections类

工具类Collections用于操作集合类,如:list、set。提供的所有方法都是静态的。
常用方法如下:

public class CollectionsDemo {
    public static void main(String[] args) {
        ArrayList<String> list = new ArrayList<>();
        list.add("a");
        list.add("d");
        list.add("w");
        list.add("a");
        list.add("d");
        System.out.println(list);//[a, d, w, a, d]
        Collections.sort(list);
        System.out.println(list);//[a, a, d, d, w]   排序
        System.out.println(Collections.binarySearch(list,"a"));//搜索,必须是排完序的  0
        Collections.addAll(list,"x","y","z");//向list中添加元素
        System.out.println(list);//[a, a, d, d, w, x, y, z]
        ArrayList<String> list1 = new ArrayList<>();
        list1.add("a");
        list1.add("f");
        list1.add("a");
        list1.add("b");
        list1.add("a");
        list1.add("u");
        list1.add("d");
        list1.add("v");
        list1.add("z");
        list1.add("u");
        Collections.copy(list1,list);//将list中的元素copy到list1中,list1的长度必须大于等于list的长度
        System.out.println(list1);//[a, a, d, d, w, x, y, z, z, u]
        /*Collections.fill(list,"A");//填充
        System.out.println(list);//[A, A, A, A, A, A, A, A]*/
        System.out.println(Collections.max(list));//最大值  z
        System.out.println(Collections.min(list));//最小值  a
        Collections.reverse(list);//反转
        System.out.println(list);//[z, y, x, w, d, d, a, a]
        Collections.swap(list,0,1);//指定位置交换
        System.out.println(list);//[y, z, x, w, d, d, a, a]
    }
}

上一篇:Collections.sort使用与原理


下一篇:线程安全问题