第十天、十一天笔记总结

1:HashSet集合的特点?它是如何保证元素的唯一性的?
元素顺序:元素唯一,但是无序
首先判断哈希值是否相同,如果不同,就直接添加到集合。
如果相同,继续执行equals(),看其返回值,
如果是false,就直接添加到集合。
如果是true,说明元素重复不添加。
         2:TreeSet集合的特点?它是如何保证元素唯一和排序的?
元素顺序:使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的 Comparator进行排序(比较器排序),
 具体取决于使用的构造方法。
         3:针对Collection体系的集合,我们到底使用谁?
List:存储和取出元素顺序一致、元素可重复。
Set:元素的存储和取出顺序不一致、存储元素唯一。
1:Map集合的特点?
   Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
         2:Map集合和Collection集合的区别?
   Collecton中存储一组对象,Map存储关键字或值对。
         3:Map集合的两种遍历方式思路?
   集合遍历:1.获取建的集合 2.遍历键 3.根据键找值foreach()
1.foreach():根据丈夫找妻子(根据键找值)
2.entrySet():(Set<Map.Entry<K,V>> entrySet())先找到夫妻的结婚证,再从结婚证里面找到丈夫和妻子
(先找到键值对对象,再从键值对对象里面找到键和值),
         4:List,Set,Map是否都继承子Collection?
List set 是继承自collection,Map不是
         5:Collection和Collections的区别?
Collection是集合类的上级接口,而Collections是面向集合类的一个帮助类;
                           
         Map接口中的方法:
                   Vput(K key,V value)                                      将指定的值与此映射中的指定键关联(可选操作)。
                   Vremove(Object key)                                  如果存在一个键的映射关系,则将其从此映射中移除(可选操作)。
                   voidclear()                                                      从此映射中移除所有映射关系(可选操作)。
                   booleancontainsKey(Object key)              如果此映射包含指定键的映射关系,则返回 true。
                   booleancontainsValue(Object value)      如果此映射将一个或多个键映射到指定值,则返回 true。
                   booleanisEmpty()                                         如果此映射未包含键-值映射关系,则返回 true。
                   intsize()                                                           返回此映射中的键-值映射关系数。
                   Vget(Object key)                                          返回指定键所映射的值;如果此映射不包含该键的映射关系,则返回 null。
                   Set<K>keySet()                                              返回此映射中包含的键的 Set 视图。
                   Collection<V>values()                                 返回此映射中包含的值的 Collection 视图。
                   Set<Map.Entry<K,V>>entrySet()              返回此映射中包含的映射关系的 Set 视图。
 
 
2.HashSet
 2.1 元素顺序:元素唯一,但是无序(它不保证 set 的迭代顺序;特别是它不保证该顺序恒久不变)
 案例:创建一个HashSet集合,添加元素(String元素),测试唯一性,无序性
 
 2.2如何保证元素的唯一性的呢(分析源码)?
          * 通过简单的分析,我们知道HashSet集合保证元素的唯一性和add()方法相关。
          * 如何我们想深入的了解,就必须看add()方法的源码,看它的底层依赖什么内容?
          *    if(e.hash == hash && ((k = e.key) == key || key.equals(k))) {...}
          *   
          *    左边:e.hash == hash
          *                  比较对象的哈希值。
          *   
          *    右边:((k = e.key) == key || key.equals(k))
          *                  左边:(k = e.key) == key
          *                           比较对象的地址值。
          *   
          *                  右边:key.equals(k)
          *                           比较的是对象的内容是否相同。默认情况下比较的是地址值
 
                   结论:
                   底层数据结构是哈希表。
                   哈希表依赖两个方法:hashCode()和equals()
                  
                   执行流程:
                            首先判断哈希值是否相同,如果不同,就直接添加到集合。
                            如果相同,继续执行equals(),看其返回值,
                            如果是false,就直接添加到集合。
                            如果是true,说明元素重复不添加。
        
                   使用:
                            如果你看到哈希结构的集合,就要考虑可能需要重写这两个方法。
                            如果真要重写,自动生成即可。
3.TreeSet
 3.1 元素顺序:使用元素的自然顺序对元素进行排序,或者根据创建 set时提供的 Comparator进行排序(比较器排序),
 具体取决于使用的构造方法。
 3.2 底层算法:二叉树
 3.3 元素要求, 加入自定义JavaBean
5.HashSet与TreeSet的相同点与不同点
相同点:
单列集合,元素不可重复
不同点
1. 底层存储的数据结构不同
    HashSet底层用的是HashMap哈希表结构存储,而TreeSet底层用的是TreeMap树结构存储
2.存储时保证数据唯一性依据不同
   HashSet是通过复写hashCode()方法和equals()方法来保证的,而TreeSet通过Compareable接口的compareTo()方法来保证的
3.有序性不一样
 HashSet无序,TreeSet有序
 
 
 * 这种情况的数据,属于一一对应的映射关系。这种关系的集合在java叫Map。
 * Map:将键映射到值的对象。一个映射不能包含重复的键;每个键最多只能映射到一个值。
 
 
 * Map接口中的方法概述(创建集合测试方法):
 *             A:删除功能
 *                      voidclear():移除集合中的所有键值对元素
 *                      Vremove(Object key):根据键移除键值对元素,并返回值
 *             B:判断功能
 *                      booleancontainsKey(Object key):判断集合中是否包含指定的键
 *                      booleancontainsValue(Object value):判断集合中是否包含指定的值
 *                      booleanisEmpty():判断集合是否为空
 *             C:获取功能
 *                      Set<Map.Entry<K,V>>entrySet():获取键值对对象的集合,遍历键值对对象,
            利用getKey(),getValue()取出键和值(理解即可)
 *                     
                            V get(Object key):根据键获取值
 *                      Set<K>keySet():获取所有的键
 *                      Collection<V>values():获取所有的值
 *             D:添加功能
 *                      Vput(K key,V value):集合添加键值对
 *             E:长度功能
 *                      intsize():键值对对数。
 
 2.HashMap
 2.1元素顺序:元素顺序不可预测
 2.2底层算法:哈希算法
 2.3对键没有要求(仅仅相对于TreeMap来说)
3.Treemap
 3.1元素顺序:元素顺序与键的排序规则有关
 3.2底层算法:Tree算法
5.HashMap与TreeMap的相同点与不同点
相同点:主要用于存储键(key)值(value)对,根据键得到值,因此键不允许键重复,但允许值重复。
不同点:
1.HashMap里面存入的键值对在取出的时候是随机的,也是我们最常用的一个Map.根据键可以直接获取它的值,
具有很快的访问速度。在Map 中插入、删除和定位元素,HashMap 是最好的选择。 
2.TreeMap取出来的是排序后的键值对。但如果您要按自然顺序或自定义顺序遍历键,那么TreeMap会更好。
栈:先进后出,画图存储元素(A,B,C)(压栈),并取出(弹栈),画图进行演示
队列:先进先出,横向队列,存入取出,画图演示、
数组:查询快,增删慢(自己创建一个数组int[] arr = {11,13,45,67,34},
需求一:在45号元素后面增加一个元素23 
需求二:删除元素45
需求三:我要获取45这个元素
 
链表:通过一个链子把多个结点(元素)连接起来,由数据和地址组成的一个元素,
节点本身必须有一个地址值(就是下一个元素的地址值)
 
特点:查询慢,增删快
 
hash:一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,
变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,
不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确定输入值。简单的说就是一种将任意长度的信息压缩到
某一固定长度的消息摘要的函数。
集合和数组的区别:数组不适应变化的需求,所有Java就提供了集合类供我们使用
数组:
1.长度固定
2.可以存储基本类型,也可以存储引用类型
3.存储元素类型一致
集合:
1.长度可变
2.只可以存储引用类型
3.可以存储多种类型
 
 3.2
 * 为什么出现集合类?
 *             面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,我们就需要对这多个对象进行存储。
 *             而目前为止我们学习过的可以存储多个元素的东西是数组,但是呢,数组长度固定,不能适应变化的需求,所以,Java
 *             就提供了集合类供我们使用.
 4.1
 * Java提供了集合类供我们使用,而我们的需求可能是这样的:
 *             我要求我的元素是有序的,
 *             我要求我的元素是无序的,
 *             我要求我的元素是唯一的,
 *             我要求我的元素是可以重复的。
 * 为了满足不同的需求,Java就提供了不同的集合类。
 * 而这些集合类由于数据结构不同,才可以满足这些条件的。
 * 数据结构:存储元素的方式。
 * 而无论这些集合的结构是什么样子的,都是要装水的,所以,他们应该有共性的内容。
 * 通过不断的向上提取,最终会形成一个集合的继承体系图。
时间: 2024-12-16 10:43:42

第十天、十一天笔记总结的相关文章

Java 第十二章 继承 笔记

Java 第十二章  继承 笔记 一.使用继承:     1)方便修改代码     2)减少代码量 二.super 继承object 类:super 访问父类的无参构造:super 指的是object 的无参构造.     例:子类调用父类:super.属性 / super.方法    注意:子类不能继承父类私有属性:得用set.get方法来调用:    super只能写在代码块的第一句:super只能调用非私有的方法:    super只能出现在子类的方法和构造方法中. 三.不能被继承的父类成

七月算法-12月机器学习在线班--第十八次课笔记-条件随机场CRF

七月算法-12月机器学习在线班--第十八次课笔记-条件随机场CRF 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 1,对数线性模型 一个事件的几率odds,是指该事件发生的概率与该事件不发生的概率的比值. 1.1对数线性模型的一般形式 令x为某样本,y是x的可能标记,将Logistic/ Softmax回归的特征 记做 特征函数的选择:eg: 自然语言处理 1, 特征函数几乎可任意选择,甚至特征函数间重叠: 2, 每个特征之和当前的词

七月算法-12月机器学习在线班--第十六次课笔记—采样和变分

七月算法-12月机器学习--第十六次课笔记—采样和变分 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 第一部分 采样 引言 为什么要研究采样? 根据采样结果估算分布的参数,完成参数学习. 前提:模型已经存在,但参数未知: 方法:通过采样的方式,获得一定数量的样本,从而学习该系统的参数. 1 采样算法 现需要对概率密度函数f(x)的参数进行估计,若已知的某概率密度函数g(x)容易采样获得其样本,可以如何估计f(x)的参数? g(x)很容

《淘宝技术这十年》读书笔记 (四). 分布式时代和中间件

前面两篇文章介绍了淘宝的发展历程.Java时代的变迁和淘宝开始创新技术: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 <淘宝技术这十年>读书笔记 (三).创造技术TFS和Tair 这篇文章主要讲述分布式时代和中间件相关知识,包括服务化.HSF.Notify和TDDL.同时里面有我们经常遇见的编码错误等相关问题,希望文章对你有所帮助! 一. 分布式时代 1.服务化 在系统发展的过程中,架构

七月算法-12月机器学习在线班--第十五次课笔记—主题模型

七月算法-12月机器学习--第十五次课笔记—主题模型 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 复习的知识: 1.,Γ函数 是阶乘在实数上的推广,即实数的阶乘 2,Beta分布 Beta分布的概率密度: 其中系数B为: 两者的关系 1,朴素贝叶斯分析 朴素贝叶斯没有分析语意,无法解决语料中一词多义和多词一义的问题,更像是词法的分析,可以 一, 1个词可能被映射到多个主题中——一词多义 二,多个词可能被映射到某个主题的概率很高——多

《淘宝技术这十年》读书笔记 (三). 创造技术TFS和Tair

前面两篇文章介绍了淘宝的发展历程和Java时代的变迁: <淘宝技术这十年>读书笔记 (一).淘宝网技术简介及来源 <淘宝技术这十年>读书笔记 (二).Java时代的脱胎换骨和坚若磐石 马云说过"创新不是为了与对手竞争,而是跟明天竞争",所以这篇文章讲述淘宝的创新技术TFS和Tair及创新的产品. 该篇文章不仅仅对在读大学生非常有所帮助,因为你能从文章中看到很多你需要学习的知识,不仅仅包括数据库.计算机网络.操作系统.数据结构等基础课程:还根据时代的技术变迁讲述了

《淘宝技术这十年》读书笔记 (二).Java时代的脱胎换骨和坚若磐石

马云说过"一个好的东西往往是是说不清楚的",姑且不论这句话的对与错.但我真的很佩服<淘宝技术这十年>这本书的作者子柳,能够通过淘宝的一些故事,按照时间顺序和IT发展的各种技术描述清楚,而且过程中读起来非常有意思. 该读书笔记中参杂了很多原文的知识,因为我实在无法割舍,都挺有意思的:同时记录一些有用的知识,通过这本书能介绍些学过的知识或面试中可能出现的题目及作者所思,文章还是非常有趣的,希望对大家有所帮助! 一. Java时代 脱胎换骨 我的师傅黄裳曾经说过"好的架

面向对象程序设计-C++ Finial exam review NOTES【第十六次上课笔记】

写在前面: 我记得也不全,如果有记录的更全的同学可以留言,我会添加哒 :) 常量 内敛函数 为什么需要内敛函数 内敛函数适用于什么场合 内敛函数本身,最大优点是,避免了真正函数调用的开销 因为普通函数调用会有开销,比如开辟一个栈,结束了还要释放局部变量 如果函数体只有寥寥几行,是不值得使用函数 在函数体代码比较短小的时候,使用频繁的,应该使用内敛函数 最大优点:没有函数调用开销,又解决了带有参数宏的简单替换,它有类型检查 引用 什么是引用:给这块区域的数据再增加一个名称(本质含义) 表面上看,相

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN

七月算法--12月机器学习在线班-第十九次课笔记-深度学习--CNN 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com 1,卷积神经网络-CNN 基础知识 三个要点 1: 首先将输入数据看成三维的张量(Tensor) 2: 引入Convolution(卷积)操作,单元变成卷积核,部分连接共享权重 3:引入Pooling(采样)操作,降低输入张量的平面尺寸 ,1.1 张量(Tensor) 高,宽度,深度,eg:彩色图像:rgb,3个深度,图

七月算法-12月机器学习在线班--第十四次课笔记—EM算法

七月算法-12月机器学习在线班--第十四次课笔记-EM算法 七月算法(julyedu.com)12月机器学习在线班学习笔记http://www.julyedu.com ? EM Expection Maxium 期望最大化 1 引例 1000人,统计身高,1.75,1.62,1.94,有多少男女,每个身高对应的男女 ? 1.1 如何算?利用极大似然估计,估算均值和方差 上述结论和矩估计的结果是一致的, 即:样本的均值即高斯分布的均值,样本的伪方差即高斯分布的方差. 如果是高斯分布,就可以这么用本