小工具知识网

当前位置: 首页 > 行业知识 > 学习大数据,所必需的java基础(6)

行业知识

学习大数据,所必需的java基础(6)

2026-10-29 20:39:34 来源:互联网转载

文章目录

  • 集合
    • Set集合介绍
    • HashSet集合的介绍和使用
    • LinkedHashSet的介绍以及使用
    • 哈希值
    • 哈希值的计算方式
    • HashSet的存储去重的过程
    • Map集合
      • Map的介绍
      • HashMap的介绍以及使用
      • HashMap的两种遍历方式
        • 方式1:获取key,然后再根据key获取value
        • 方式2:同时获取key和value
        • HashMap存储自定义对象
        • Map的练习
        • LinkedHashMap
        • TreeSet
        • TreeMap
        • HashTable和Vector集合
          • HashTable集合
          • Vector集合
          • Properties集合(属性值)
            • List嵌套Map
            • Map嵌套map
            • 哈希表结构存储过程
              • HashMap无参数构造方法的分析
              • HashMap有参数的构造方法的分析
              • tableSizeFor方法分析
              • Node内部类的分析
              • 存储元素的put方法源码
              • putVal方法源码
              • resize方法的扩充计算
              • 确定元素存储的索引
              • ��到重复哈希值的对象

                集合

                Set集合介绍

                1.概述:set是一个接口,是Collection下的子接口

                2.使用:

                a.所用的方法和Collection接口中的方法一模一样

                b.set接口中的方法并没有堆Collection中的方法进行任何的扩充

                c.set以及下面所有的实现类集合相当是一个傀儡

                因为所用的set集合底层都是依靠map集合实现的

                HashSet集合的介绍和使用

                1.概述:HashSet是Set接口的实现类对象

                2.特点

                a.元素无序

                b.元素不可重复

                c.无索引

                d.线程不安全

                3.数据结构:哈希表

                jdk8之前: 哈希表 = 数组+链表

                jdk8之后:哈希表 = 数组+链表+红黑树

                方法

                和Collection一模一样

                import java.util.HashSet;import java.util.Iterator;public class test08 {    public static void main(String[] args) {        final HashSet set = new HashSet();        set.add("张三");        set.add("李四");        set.add("王五");        set.add("孙六");        System.out.println(set);        Iterator iterator = set.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next());        }        System.out.println("=======================");        for (String s : set) {            System.out.println(s);        }    }}

                运行结果

                LinkedHashSet的介绍以及使用

                概述 LinkedHashSet extends HashSet

                特点:

                a.元素有序

                b.元素布克重复

                c.无索引

                d.线程不安全

                数据结构

                哈希表+双向链表

                使用 和HashSet一样

                public static void main(String[] args) {        final HashSet set = new HashSet();        set.add("张三");        set.add("李四");        set.add("王五");        set.add("孙六");        set.add("张三");        System.out.println(set);        Iterator iterator = set.iterator();        while (iterator.hasNext()){            System.out.println(iterator.next());        }        System.out.println("=======================");        for (String s : set) {            System.out.println(s);        }    }

                哈希值

                概述 计算机计算出来的一个十进制数,我们可以理解为是对象的地址值

                获取哈希值:Object类中的

                int hashCode()

                结论:

                如果内容一样,哈希值一定一样

                如果内容同不用,哈希值也有可能不一样

                public class test10 {    public static void main(String[] args) {        String s1 = "abc";        String s2 = "abc";        System.out.println(s1.hashCode());        System.out.println(s2.hashCode());        System.out.println("==================");        String s3 = "通话";        String s4 = "重地";        System.out.println(s3.hashCode());        System.out.println(s4.hashCode());    }}

                运行结果

                哈希值的计算方式

                通过进入String的hashCode方法,查看相关的代码

                public int hashCode() {        int h = hash;        if (h == 0 && value.length > 0) {            char val[] = value;            for (int i = 0; i  

                从上述代码中看到31作为常量相乘,31是一个质数,因为31这个数可以尽可能的解决哈希碰撞问题

                尽量的不出现,内容不一样,但是哈希值一样的问题

                HashSet的存储去重的过程

                1.计算元素的哈希值,比较元素哈希值

                2.如果哈希值不一样,直接存

                3.如果哈希值一样,再比较内容(equals)

                4.如果哈希值不一样,内容一样,存

                5.如果哈希值一样,内容一样,去重复,后面的会把前面的覆盖掉

                Map集合

                Map的介绍

                概述:双列集合的顶级接口

                组成部分

                一个元素是有两部分构成

                key = value ----- 键值对

                HashMap的介绍以及使用

                概述:是Map的实现类

                特点:

                a.元素无序

                b.key唯一,value可重复

                c.无索引

                d.线程不安全

                数据结构:哈希表

                常用方法

                V put(K key, V value) -> 存储元素

                V remove(Object key) ->根据key删除对应的键值对

                V get(Object key) -> 根据key获取对应的value

                boolean containsKey(Object key) ->判断Map中是否包含指定的key

                Collection values() -> 将Map中所有的value存储到Collection集合中

                Set keySet() -> 将Map中所有的key获取出来存到Set集合中

                Set entrySet() -> 获取Map中所有的键值对对象,放到set集合中

                public class test {    public static void main(String[] args) {        final HashMap set = new HashMap();        //存储元素        set.put(0001,"李云龙");        set.put(0002,"丁伟");        set.put(0003,"孔捷");        System.out.println(set);        //根据key删除对应的键值对        set.remove(0001);        System.out.println(set);        //根据key获取对应的Value        System.out.println(set.get(2));        //判断map中是否含有指定的key        System.out.println(set.containsKey(1));    }}

                注意 如果key重复了,后米的会把前面的覆盖掉,去重复过程和set一模一样

                HashMap的两种遍历方式

                方式1:获取key,然后再根据key获取value

                Set keySet() ----- 将Map中所有的key获取出来存到Set集合中

                public class test02 {    public static void main(String[] args) {        final HashMap hashMap = new HashMap();        hashMap.put(1,"李云龙");        hashMap.put(2,"丁伟");        hashMap.put(3,"孔捷");        /*        * 先调用keySet方法,获取map中所有的key,存储到Set集合中        * 遍历Set集合,调用map中的get方法,根据key获取value        * */        Set set = hashMap.keySet();        for (Integer key : set) {            String value = (String) hashMap.get(key);            System.out.println(key + "....." + value);        }    }}

                方式2:同时获取key和value

                Set entrySet() — 获取Map中所有的键值对对象,放到set集合中

                1.我们只需要获取到每个键值对的条目就行了

                2.拿到条目,就能拿到条目上的key和value

                3.记录key和value的条目, Map中的静态接口 — Map.Entry

                Map.Entry中有两个方法

                getKey() 获取key

                getValue() 获取value

                Set set1 = hashMap.entrySet();        for (Map.Entry integerObjectEntry : set1) {            Integer key = integerObjectEntry.getKey();            String value = (String) integerObjectEntry.getValue();            System.out.println(key + "...." + value);        }

                HashMap存储自定义对象

                1.key存储自定义对象,value类型随意

                2.需要key重写hashCode和equals方法

                相关代码

                public class Person {    private String name;    private int age;    public Person() {    }    public Person(String name, int age) {        this.name = name;        this.age = age;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }    public int getAge() {        return age;    }    public void setAge(int age) {        this.age = age;    }    @Override    public boolean equals(Object o) {        if (this == o) return true;        if (o == null || getClass() != o.getClass()) return false;        Person person = (Person) o;        return age == person.age && Objects.equals(name, person.name);    }    @Override    public int hashCode() {        return Objects.hash(name, age);    }}
                public class test03 {    public static void main(String[] args) {        HashMap hashMap = new HashMap();        hashMap.put(new Person("李云龙",18),"独立团");        hashMap.put(new Person("孔捷",26),"新一团");        hashMap.put(new Person("丁伟",26),"新二团");        System.out.println(hashMap);    }}

                Map的练习

                需求:用Map集合统计字符串中每一个字符出现的次数

                步骤

                1.创建Scanner对象,调用next方法录入字符串

                2.创建HashMap集合,key为String用于存储字符串,value作为Integer用于存储字符对应的个数

                3.遍历字符串,判断,集合中有没有该字符

                4.如果没有,将该字符以及对用的1存到Map集合中

                5.如果有,根据该字符获取对用的value,对value进行加一

                6.将该字符以及对用的value值存进去

                7.输出

                public class test03 {    public static void main(String[] args) {        System.out.println("请输入字符串");        final Scanner scanner = new Scanner(System.in);        String data = scanner.next();        final HashMap hashMap = new HashMap();        char[] chars = data.toCharArray();        for (char aChar : chars) {            String achar = aChar + "";            if (!hashMap.containsKey(achar)){                hashMap.put(achar,1);            }else {                int value = hashMap.get(achar);                value ++;                hashMap.put(achar,value);            }        }        System.out.println(hashMap);    }}

                LinkedHashMap

                概述 LinkedHashMap extends HashMap

                特点:

                a.有序

                b.无索引

                c.key唯一,value可重复

                d.线程不安全

                数据结构

                哈希表+双向链表

                用法:和HashMap一样

                public class test04 {    public static void main(String[] args) {        final LinkedHashMap hashMap = new LinkedHashMap();        hashMap.put("001","李云龙");        hashMap.put("002","丁伟");        hashMap.put("003","孔捷");        System.out.println(hashMap);        //使用keyset方式遍历        final Set set = hashMap.keySet();        for (String s : set) {            final String s1 = hashMap.get(s);            System.out.println(s+"...."+s1);        }        //使用entrySet方式遍历        final Set entries = hashMap.entrySet();        for (Map.Entry entry : entries) {            System.out.println(entry.getKey()+ "...." +entry.getValue());        }    }}

                TreeSet

                1.概述:ThreeSet是Set接口的实现类

                2.特点:

                a.可以对元素进行排序

                b.元素唯一

                c.无索引

                d.线程不安全

                3.数据结构

                红黑树

                4.方法 和HashSet一样

                构造

                TreeSet() — 对元素进行自然排序 ---- ASCII

                TreeSet(Comparator

上一篇:电脑服务器增加带宽怎么办?

下一篇:服务器怎么进入编辑器?