set集合、map集合

本文详细介绍了Java集合框架中的Set接口及其常用实现类,包括HashSet、TreeSet和LinkedHashSet。讲解了它们的特点、存储结构以及操作方法,如添加、删除和遍历元素。此外,还提到了Map接口的HashMap实现类和其存储结构。通过对源码的分析,深入理解了这些集合类的工作原理。
摘要由CSDN通过智能技术生成
Set集合

在这里插入图片描述

set接口的使用
package com.ljh.list;

import java.util.HashSet;
import java.util.Set;

/**
 * Set接口的使用
 * 特点:1.无序,没有下标2.不能重复
 */
public class Demo10 {
    public static void main(String[] args) {
        //创建集合
       Set<String> set = new HashSet<>();
       set.add("小米");
       set.add("苹果");
       set.add("华为");
       set.add("锤子");
        System.out.println(set.size());
        System.out.println(set.toString());
        //2.删除数据
        set.remove("小米");
        //3.遍历
        //3.1使用遍历for
        //使用迭代器
        

    }
}

在这里插入图片描述

package com.ljh.list;

import java.util.HashSet;

/**
 * HashSet集合的使用
 * 存储结构:哈希表(数组+链表+jdk8红黑树)
 * 形象比喻排队买票,多个窗口数组在前,每个窗口多人链表买票
 */
public class Demo11 {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("刘德华");
        hashSet.add("梁朝伟");
        hashSet.add("凌志林");
        hashSet.add("周润发");
        //2.删除
        hashSet.remove("刘德华");
        //遍历for
        //遍历迭代器

    }

}

hashSet存储

package com.ljh.list;

        import java.util.HashSet;

/**
 * HashSet集合的使用
 * 存储结构:哈希表(数组+链表+jdk8红黑树)
 * 形象比喻排队买票,多个窗口数组在前,每个窗口多人链表买票
 *
 * 存储过程
 * (1)根据hashcode计算保存的位置,如果位置为空,则直接保存,如果不为空执行第二步,
 * (2)再执行equals方法,如果equals方法为true,则认为是重复,否则形成链表
 */
public class Demo11 {
    public static void main(String[] args) {
        HashSet<String> hashSet = new HashSet<>();
        //添加元素
        hashSet.add("刘德华");
        hashSet.add("梁朝伟");
        hashSet.add("凌志林");
        hashSet.add("周润发");
        hashSet.add("刘德华");
        System.out.println(hashSet.toString());
        //2.删除
        hashSet.remove("刘德华");
        //遍历for
        //遍历迭代器

    }

}
treeSet

在这里插入图片描述

treeSet的使用
package com.ljh.list;

public class Student implements Comparable<Student> {
    private String name;
    private int age;

    public Student() {
    }

    public Student(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 int compareTo(Student o) {
        int n1 = this.getName().compareTo(o.getName());
        int n2 = this.age-o.getAge();
        return n1 == 0?n2:n1;
    }

    @Override
    public String toString() {
        return "Student{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

package com.ljh.list;

import java.util.TreeSet;

/**
 * TreeSet的使用
 * 存储结构:红黑树
 * 要求:元素必须要实现Comparable接口,compareTo()方法返回0,认为是重复元素
 */
public class Demo12 {
    public static void main(String[] args) {
        TreeSet<String> treeSet = new TreeSet<>();
        treeSet.add("abc");
        treeSet.add("hijk");
        treeSet.add("efg");
        treeSet.add("lmd");
        treeSet.add("lmd");
        System.out.println(treeSet.toString());

        //2.删除
        treeSet.remove("abc");
        //遍历
        //增强for
        //迭代器
        TreeSet<Student> treeSet1 = new TreeSet<>();
        Student student = new Student("zs", 20);
        Student student1 = new Student("zss", 20);
        Student student2 = new Student("zss", 25);
        treeSet1.add(student);
        treeSet1.add(student1);
        treeSet1.add(student2);
        for (Student student3 : treeSet1) {
            System.out.println(student3.toString());
        }
    }

}

在这里插入图片描述
treeSet

Comparator接口
package com.ljh.list;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * TreeSet集合的使用
 * Comparator:实现定制比较(比较器)
 * Comparable:可比较的
 */
public class Demo13 {
    public static void main(String[] args) {
        //创建集合
        TreeSet<Student> students = new TreeSet<>(new Comparator<Student>() {
            @Override
            public int compare(Student o1, Student o2) {
                int n1 = o1.getAge() - o2.getAge();
                int n2 = o1.getName().compareTo(o2.getName());
                return 0;
            }
        });
        Student student = new Student("zs", 20);
        Student student1 = new Student("zss", 20);
        Student student2 = new Student("zss", 25);
        students.add(student);
        students.add(student1);
        students.add(student2);
        for (Student student3 : students) {
            System.out.println(student3.toString());
        }
    }
}

Map集合

在这里插入图片描述

Map集合的实现类
package com.ljh.list;

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

/**
 * HashMap集合的使用
 * 存储结构:哈希表(数组+链表+红黑树)
 * 使用key可hashCode和equals作为重复
 */
public class Demo14 {
    public static void main(String[] args) {
        //创建集合
        HashMap<Person, String> p = new HashMap<>();

        //添加元素
        Person s1 = new Person("王", 10);
        Person s2 = new Person("li", 10);
        Person s3 = new Person("zeng", 10);
        p.put(s1,"北京");
        p.put(s2,"上海");
        p.put(s3,"广州");
        p.put(new Person("zeng", 10),"广州");
        System.out.println(p.size());
        System.out.println(p.toString());
        //删除
        p.remove(s1);
        System.out.println(p.size());
        //3遍历
        //使用keySet()
        for (Person person : p.keySet()) {
            System.out.println(p.get(person));
        }
        //使用entrySet()
        for (Map.Entry<Person, String> personStringEntry : p.entrySet()) {
            System.out.println(personStringEntry.getValue());
        }
        //判断
        System.out.println(p.containsKey(s2));
        System.out.println(p.containsValue("广州"));
    }
}

hashMap源码分析

源码分析

Hashtable

在这里插入图片描述

TreeMap

在这里插入图片描述

TreeMap也和TreeSet一样需要comparable或者Comparator的比较,不同点在于它的比较对象如:name,那么对象的name就是作为唯一比较的key,相同的name就会取一个
Collections工具类

在这里插入图片描述

package com.ljh.list;

import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;

public class Demo15 {
    public static void main(String[] args) {
        List<Integer> list = new ArrayList<>();
        list.add(20);
        list.add(5);
        list.add(12);
        list.add(22);
        list.add(11);
        list.add(24);
        //sort排序
        System.out.println(list.toString());
        Collections.sort(list);
        System.out.println(list.toString());
        
        //binarySearch二分查找
        List<Integer> objects = new ArrayList<>();
        int i = Collections.binarySearch(list, 13);
        System.out.println(i);

        //copy复制
        List<Integer> dest = new ArrayList<>();
        for (int j = 0; j < list.size(); j++) {
            dest.add(0);

        }
        Collections.copy(dest,list);
        System.out.println(dest.toString());

        //reverse反转
        Collections.reverse(list);
        System.out.println(list);
        //shuffle 打乱
        Collections.shuffle(list);
        System.out.println(list.toString());

        //list转数组
        Integer[] arry = list.toArray(new Integer[0]);
        System.out.println(Arrays.toString(arry));

        //数组转成集合
        String[] names = {"zhang","wang","li"};
        //集合是一个受限集合,不能添加和删除
        List<String> list1 = Arrays.asList(names);
        System.out.println(list1);

        Integer[] nums = {100,200,300};
        List<Integer> list2 = Arrays.asList(nums);
        System.out.println(list2);
    }
}

附加:

面试必备:HashMap、Hashtable、ConcurrentHashMap的原理与区别

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

weixin_42287451

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值