恶补集合

一、 集合的定义

1.集合类存放于java.util包中。
2.集合类存放的都是对象的引用,而非对象本身,出于表达上的便利,我们称集合中的对象就是指集合中对象的引用
3.集合的类型主要有三种:
(1)set(集)
(2)list(列表)
(3) map(映射)
4.集合接口
(1)Collection
(2)Map
集合树在这里插入图片描述

set(集)

Set(集)是一种最简单的集合,实现Set接口,他的对象不按特定方式排序,只是简单地把对象加入集合中,就像往口袋里放东西。
对Set中的成员的访问操作是通过集中对象的引用进行的,所以Set中不能有重复的对象
1.Set的实现的基础是Map(HashMap)
2.Set中元素是不能重复的,如果使用add()方法添加已经存在的对象则会覆盖前面的对象

下边我们进行一下简单的操作

//创建HashSet对象
        HashSet<String> hs = new HashSet<String>();
        //给集合中添加自定义对象
        hs.add("张三");
        hs.add("李四");
        hs.add("王麻子");
        hs.add("张三");
        //取出集合中的每个元素
        Iterator<String> it = hs.iterator();
        while (it.hasNext()) {
            String set = it.next();
            System.out.println(set);

输出结果如下:
在这里插入图片描述
由此结果我们可得知集合中不能存储中重复的元素

List(列表)

List的主要特征是其对象以线性方式存储,没有特定顺序,只有一个开头和一个结尾,但是他与完全无序的集是不同的

列表在数据结构中分别表现为:
(1)数组
(2)向量
(3)链表
(4)堆栈
(5)队列
List接口常用的子类有:
1.ArrayList集合
2.LinkedList集合
常用方法:
在这里插入图片描述
代码演示

//创建一个ArrayList
        List<String> list = new ArrayList<String>();
        //1,添加元素。   
        list.add("小红");
        list.add("小梅");
        list.add("小强");
        //2,插入元素。
        list.add(1, "老王");
        //3,删除元素。
        list.remove(2)
        //4,修改元素。
        list.set(1, "隔壁老王")
        Iterator<String> it = list.iterator();
        while (it.hasNext()) {
            String str = it.next();
            System.out.println(str);
        }
                System.out.println("=======================---------------=========");
        //由于List集合拥有索引,因此List集合迭代方式除了使用迭代器之外,还可以使用索引进行迭代。
        for (int i = 0; i < list.size(); i++) {
            String str = list.get(i);
            System.out.println(str);
            }

输出结果为:
在这里插入图片描述

Map(映射)

Map与Set或者List有着明显的区别,映射中每个项都是以(key,value)键值对的方式存在的。关键字(key)决定了对象在映射中的存储位置,检索对象时必须提供其key,才可以找到这个对象,关键字key应该是唯一的

关键字本身并不能决定对象的 存储位置,他需要通过一种 散列结束来处理,产生一个散列码的Int类型值

散列码通常作用一个偏置量,该偏置量是相对于分配给映射的内存区域起始位置的,由此确定关键字/对象对的存储位置。理想情况 下,散列处理应该产生给定范围内均匀分布的值,而且每个关键字应得到不同的散列码。下边是本人在Idea中求得的散列码

public static void main(String[] args) {
        HashMap map = new HashMap();//获得一个类本身的对象
        
        List list = new ArrayList();
//        list.add("2");
        Map<Key, Value> m = new java.util.HashMap<>();
        Set s = new HashSet<>();
        //s.add("1");
        int a = list.hashCode();
        int b = s.hashCode();
        int c= m.hashCode();
        int d = map.hashCode();
        System.out.println(a); //list不存值的时候哈希值为1
        System.out.println(b);//set不存值的时候哈希值为0
        System.out.println(c);//map不存值的时候哈希值为0
        System.out.println(d);//HashMap不存值的时候哈希值为0

    }

结果如下图
在这里插入图片描述
1.何为散列表?
散列表(也叫哈希表),是根据关键码值(key,value)而直接进行访问的数据结构。也就是说他通过把关键码值映射到表中的一个位置来访问记录,以加快查找的速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。

2.散列函数能使对一个数据序列的访问过程更加有效迅速,通过散列函数,数据元素将更快地被定位。

3.散列函数常用的六大方法
1)直接寻址法
2)数字分析法
3)平房取中法
4)折叠法
5)随机数法
6)除留余数法
(鉴于本人第一次了解到散列函数,暂且先列出其六大常用方法,有时间再去深挖。本次重点还是放在集合上)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值