栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

学习java的第三十四天,Hashmap类、Treemap类、Colletions工具类的使用

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

学习java的第三十四天,Hashmap类、Treemap类、Colletions工具类的使用

一、HashMap类的基本概念
  1. HashMap刚创建时,table是null,为了节省空间,当添加第一个元素时,table容量调整为16
  2. 当元素个数大于阈值(16*0.75=12)时,会进行扩容,扩容后大小为原来的2倍!目的是减少调整元素的个数
  3. jdk1.8 当每个链表长度大于8,并且元素个数大于等于64时,会调整为红黑树,目的提高执行效率
  4. jdk1.8 当链表长度小于6时,调整成链表
  5. jdk1.8 以前,链表时头插入,jak1.8以后是尾插入!
  6. HashMap的存储结构是:哈希表(数组+链表+红黑树)
  7. HashMap :JDK1.2版本,线程不安全,运行效率快,允许用null作为key或者是value
  • 创建Student类来给后面调用
package com.Map.HashMapClass;

public class Student {

    private String name;   //姓名
    private int id;  //学号

    //封装属性
    public void setId(int id) {
        this.id = id;
    }
    public int getId(){
        return id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
    //无参构造器
    public  Student(){

    }
    //有参构造器
    public  Student(String name,int id){
        this.name = name;
        this.id = id;

    }

    @Override
    public String toString() {   //重写toString方法
        return "Student{" +
                "name='" + name + ''' +
                ", id=" + id +
                '}';
    }
}


  • 创建HashmapDemo01类进行比较测试
package com.Map.HashMapClass;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;


public class HashmapDemo01 {

    public static void main(String[] args) {

        //创建一个hashmap集合
        HashMap hashMap = new HashMap();
        //创建学生
        Student s1 = new Student("张飞",101);
        Student s2 = new Student("关羽",102);
        Student s3 = new Student("曹操",103);

        //添加元素
        hashMap.put(s1,"广西");
        hashMap.put(s2,"广东");
        hashMap.put(s3,"上海");

        System.out.println("当前元素个数为:"+hashMap.size());
        System.out.println(hashMap.toString());

        //遍历数据
        //1.1通过增强for循环
        System.out.println("---------------1.通过keyset循环-----------------");
        for (Student key:hashMap.keySet()
             ) {
            System.out.println(key.toString()+"======="+hashMap.get(key));
        }
        System.out.println("---------------2.通过Entry键值对循环-----------------");
        for (Map.Entry key2:hashMap.entrySet()
             ) {
            System.out.println(key2);
        }
        //判断
        System.out.println(hashMap.containsKey(s1));  //存在  返回true
        System.out.println(hashMap.containsValue("上海"));

    }
}


  • 结果图
二、Treemap类
  • 实现了SortedMap接口(SortedMap是map的子接口),可以对key自动排序!
  • 存储结构:红黑树

使用代码进行演示

package com.Map.TreeMapclass;

import com.Map.HashMapClass.Student;

import java.util.Comparator;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;


public class TreemapDemo01 {
    public static void main(String[] args) {
        //创建TreeMap集合
        TreeMap treeMap = new TreeMap<>(new Comparator() {
            @Override   //需要使用比较器,因为学生类不能直接转成Comparable。因为Treemap的存储结构是红黑树,需要制定一个规则进行比较!
            // 所以需要使用Comparator比较器,才可正常遍历
            public int compare(Student o1, Student o2) {
                int n = o1.getId()-o2.getId();   //使用学号进行比较
                return n;
            }
        });
        //1、添加元素

        Student s1 = new Student("张飞",101);
        Student s2 = new Student("关羽",102);
        Student s3 = new Student("曹操",103);
        Student s4 = new Student("小猴子",100);

        treeMap.put(s1,"广西");
        treeMap.put(s2,"玉林");
        treeMap.put(s3,"河池");
        treeMap.put(s4,"广东");

        System.out.println("元素个数:"+treeMap.size());
        System.out.println(treeMap.toString());

        //2、遍历元素
        //2.1使用KeySet来遍历元素
        System.out.println("-------------2.1使用KeySet来遍历元素---------------");
        for (Student sss: treeMap.keySet()
             ) {
            System.out.println(sss+treeMap.get(sss));
        }
        //2.2使用EnkeySet来遍历元素
        System.out.println("-------------2.2使用EnkeySet来遍历元素---------------");
        for (Map.Entry entry:treeMap.entrySet()
             ) {
            System.out.println(entry);
        }
        //3、删除元素
        treeMap.remove(s1);
        System.out.println("删除后元素个数:"+treeMap.size());
    }
}

  • 结果图

总结:需要注意的就是,在使用Treemap集合的时候,由于Treemap的存储结构是红黑树,所以在使用Student类作为key遍历的时候,不能直接进行遍历,因为需要一个比较结果,所以必须要调用到比较器,也就是Comparator,否则会提示异常!

三、Colletions工具类
  • 概念:集合工具类。定义了除了存取以外的集合常用方法
  • 方法:
  1. public static void reverse(List list) //反转集合中的元素的顺序
  2. public static void shuffle(List list) //随机重置集合元素的顺序
  3. public static void sort(List list) //升序排序(元素类型必须实现Comparable接口)
  • 使用代码测试
package com.Map.CollectionsClass;

import java.util.*;


public class Collectionscalss {
    public static void main(String[] args) {
        //创建Set集合
        List list = new ArrayList<>();
        list.add(220);
        list.add(20);
        list.add(5);
        list.add(30);
        list.add(150);
        System.out.println("排序之前:"+list.toString());
        //sort排序
        Collections.sort(list);   //使用Collections工具类对list集合进行排序。
        System.out.println("排序之后:"+list.toString());
        //shuffle打乱顺序
        Collections.shuffle(list);   //重新排序,随机排序,用于重新洗牌
        System.out.println("随机重置集合中的数值:"+list);
        //copy复制
        List dest = new ArrayList<>();
        for (int i = 0; i < list.size(); i++) {  //需要给dest集合初始化一个长度
                dest.add(0);
        }

        Collections.copy(dest,list);
        System.out.println("复制后的数值:"+dest);
        //reverse反转

        Collections.reverse(list);
        System.out.println("反转之后"+list);

        //数组转成集合
        System.out.println("-----------数组转成集合------------");
        String[] names = {"张三","李四","王五"};

        //转换成集合后,该集合是一个受限集合,不能添加和删除
        List list2 = Arrays.asList(names);
        //list2.remove("张三");   不能被删除!也不能被添加!
        System.out.println("将数组转成集合之后:"+list2);
        
    }
}

结果图:

总结:需要注意的是,在将基本类型的数组转换成集合的时候,需要使用包装类型!否则无法正常使用!

注:文章仅做个人学习日记,不做学习建议,学习来源:千峰教育

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1007439.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号