Java 9 day--java容器、java集合框架,Map(HashMap、LinkedHashMap、TreeMap),Collections工具类,Arrays数组

忍禁

关注

阅读 71

2022-04-27

Map

特点:key-value映射。

HashMap:
数据-链表(JDK1.7),数据-链表-红黑树(JDK1.8)。
Key无序,唯一(Set)。
Value无序,不唯一(Collection)。

hashmap和hashtable的区别:
1.hashmap线程不安全,效率比较高
2.hashmap中key和value都可以为空,hashtable不允许为空。
3.hashmap初始值为2的N次幂,方便&运算,hash & (initCapacity-1)。
4.在扩容之后涉及到元素的迁移过程,迁移的时候只需要判断二进制的前一位,是0则数组下标不变,是1则需要将索引位置加上旧数组长度值即为新数组的下标。

LinkedHashMap:
链表。
有序的HashMap速度快。
TreeMap:
红黑树。
有序速度没有hash快。

Map遍历操作:
1.通过key来遍历,可以通过key来获取value值。

        Set<String> keys= map.keySet();
        for(String key:keys){
            System.out.println(key+"="+map.get(key));
        }

2.通过value来遍历,只能获取对应的value值,不能根据value来获取key。

        Collection<Integer> values= map.values();
        for(Integer i:values){
            System.out.println(i);
        }

3.迭代器遍历

        Set<String> key1= map.keySet();
        Iterator<String> iterator=key1.iterator();
        while (iterator.hasNext()){
            String key=iterator.next();
            System.out.println(key+"="+map.get(key));
        }

4.Map.entry:表示的是K-V组合的一组映射关系,成组出现。

        Set<Map.Entry<String, Integer>> entries = map.entrySet();
        Iterator<Map.Entry<String,Integer>> iterator1=entries.iterator();
        while (iterator1.hasNext()){
            Map.Entry<String,Integer> next=iterator1.next();
            System.out.println(next.getKey()+"="+next.getValue());
        }

Collections工具类

Collections和Collection不同,前者是集合的操作类,后者是集合。

Collections提供的静态方法:
addAll():批量增加。

List<String> list=new ArrayList<String>();
        list.add("abb");
        list.add("bccc");
        list.add("cd");
        list.add("d");
        Collections.addAll(list,"effffff","fgggg","ghhhhh");

sort():排序。

        list.sort(new Comparator<String>() {
                @Override
                public int compare(String o1, String o2) {
                if (o1.length()<o2.length()){
                    return 1;
                }else if (o1.length()>o2.length()){
                    return -1;
                }else {
                    return 0;
                }
            }
        });
        System.out.println(list);

        //按照字典顺序排序
        Collections.sort(list);
        System.out.println(list);

        //以上两种的结合
        Collections.sort(list, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                if (o1.length()<o2.length()){
                    return 1;
                }else if (o1.length()>o2.length()){
                    return -1;
                }else {
                    return 0;
                }
            }
        });

binarySearch():二分查找。
二分查找的时候需要先进行排序。

        System.out.println(Collections.binarySearch(list,"abb"));

fill():替换。
把list中所有元素都填充成指定值。

        Collections.fill(list,"m");
        System.out.println(list);

shuffle():随机排序。
reverse():逆序。

Arrays

Arrays提供了数组操作的工具类,包含很多方法。
集合和数组之间的转换。

数组转成list。

  •    List<Integer> ints=Arrays.asList(1,2,3,4,5);

list转成数组。

  •    Object[] objects = ints.toArray();

精彩评论(0)

0 0 举报