2020-07-27泛型、集合、容器、IO、注解、反射机制、==和equals的区别

==和equals的区别
1).在八大基本类型的比较时,byte、short、int、long、float、double、boolean、char,直接使用==判断其值是否相等
2).在进行引用类型比较时:
① 如果是比较重写了equals的方法,如String、Date等
使用 = = 是比较其引用的是否指向了同一块内存
使用equals的为了比较其值是否一样
② 如果没有重写equals的方法,比较自定义类,创建对象
= =和equals的作用都是判断引用是否指向同一块内存
③ 特别注意的是String中有一个.intern()方法
这个方法是会去搜寻相应的字符串池,如果有,就指向同一块内存
![
注意:String是引用类型

集合的学习

集合跟数组都是存储数据的方式,区别在于:
1).数组在创建之初,就确定了长度,而集合是可变的
2).数组既可以存储基本类型,也可以存储引用类型
但是集合是只能存储引用类型
3).数组只能存储一种类型,而集合可以存储多种

常用集合分类:
Collection 接口的接口 对象的集合(单列集合)
├——-List 接口:元素按进入先后有序保存,可重复
│—————-├ LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
│—————-├ ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
│—————-└ Vector 接口实现类 数组, 同步, 线程安全
│ ———————-└ Stack 是Vector类的实现类
└——-Set 接口: 仅接收一次,不可重复,并做内部排序
├—————-└HashSet 使用hash表(数组)存储元素
│————————└ LinkedHashSet 链表维护元素的插入次序
└ —————-TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)
├———Hashtable 接口实现类, 同步, 线程安全
├———HashMap 接口实现类 ,没有同步, 线程不安全-
│—————–├ LinkedHashMap 双向链表和哈希表实现
│—————–└ WeakHashMap
├ ——–TreeMap 红黑树对所有的key进行排序
└———IdentifyHashMap

具体学习:List和Set
它俩的区别在于:
1). List是按照插入顺序进行排序的,而Set集合存储顺序和取出顺序是不一致的
2). List是可以插入重复数据的,而Set集合是唯一的
3). List集合可以通过索引直接操作元素,而Set无法通过索引操作元素

List集合
(1)ArrayList:它的底层数据结构是数组,查询快,增删慢,效率高,线程不安全,可以支持插入重复数据
(2)LinkedList 它的底层数据结构是链表,查询慢,增删快,效率高,线程不安全,不支持插入重复数据
(3)Vector:底层数据结构是数组,查询快,增删慢,效率低,线程安全,支持插入重复元素
(*Vector是一种老的动态数组,是线程同步的,效率很低,一般不赞成使用。)

Set集合
(1).HashSet:底层数据结构是哈希表实现,元素无序且唯一,线程不安全而且效率高,可以存储null元素。
如何实现元素唯一:存储元素首先会根据Hash()方法计算出一个HashCode散列值,然后与已经存储的散列值进行比较,如果HashCode散列值不相等,则元素一定不相等,则存储。但是如果HashCode值相等,元素也不一定相等,此时需要调用equals()方法来判断是否相等,如不相等,则存储。
(2). LinkHashSet:底层采用链表和哈希表共同实现,链表保证了元素的顺序和存储顺序是一致的,哈希表则保证唯一,线程不安全,但是效率高。
(3). TreeSet: 底层数据结构采用二叉树实现,元素唯一且排好序,但是需要重写HashCode()和equals方法,二叉树保证有序性

	Lisk和Set都是继承自Collection,而Map则不是。List的查询效率高,但是增删慢,Set反之。

在这里插入图片描述

Map基础

Map用于保存具有映射关系的数据,Map里保存着两组数据:key和value,它们都可以使任何引用类型的数据,但key不能重复。所以通过指定的key就可以取出对应的value。

重点!Map没有集成Collection!

	(1). HashTable
			HashTable是同步的,加入了非常多的Synchronized关键字,因此线程非常安全,但是同时效率非常低,而且不允许放入空值
	(2). HashMap
			HashMap是异步的,线程不安全,但是效率极高,而且允许一个key值为空值,同时可允许非常多value值为空
	(3). TreeMap
			TreeMap是基于红黑树进行排序的,有自然排序和定制排序两种方法,key值是以TreeSet的方式进行存储的,元素要求基本与TreeSet一致

---------注解--------- :Annotation

注释:comment
注解是可以被其他程序读取的
注解是可以被程序检查的

内置注解
@Override------------表示重写的注解
@Deprecated----------表示不鼓励程序员使用的注解
@SuppressWarnings------镇压警告

元注解
负责解释其他的注解
@Target --------------- 用于描述注解的使用范围
@Retention -----------描述注解生命周期

package com.wang.Demo2;
import java.lang.annotation.*;
@Myannocation
public class Test02 {
    //定义一个注解
    @Myannocation
    public void test(){
    }
}

@Target(value= {ElementType.METHOD,ElementType.TYPE})       //用在哪个地方,方法或者类
@Retention(value= RetentionPolicy.RUNTIME)          //声明周期,runtime>class>source
@Inherited    //表示子类可以继承父类的注解
@interface Myannocation{
}

同理,注解也可以进行命名等:

@MyAnnotation02
public class Test03 {
    @MyAnnotation02(name = "111")
    public void test(){

    }
}

@Target({ElementType.TYPE,ElementType.METHOD})
@Retention(RetentionPolicy.RUNTIME)
//没有默认值要给个名字
@interface MyAnnotation02{
    String name() default "";
    int age() default 0;
}

---------反射---------

反射:允许程序在执行期间借助于Reflection API取得任何类的内部信息,并直接操作内部属性和方法

一个类在内存中只能有一个class对象
一个类在加载后,类的整个机构都会被封装在class对象中

那些类型可以有class对象
class、interface、[]数组、enum枚举、annotation注解、primitive type基本数据类型、void

alt+选中可以选中竖行的代码

类的加载:将class文件字节码内容加载到内存中,并将这些静态数据转换成方法区的运行时数据,然后生成代表这个类的class对象

----------泛型---------

为什么要有泛型?
把对象扔进集合中,集合是不知道元素的类型是什么的,只知道全是object类型的,因此在get()的时候,返回的是object,外边获取对象的时候,还需要强制转换

----------HTML--------------

超文本标记语言
DOM-----------文档对象模型

【怎么更改idea中浏览器的指向地址】
File—setting----Web Browsers------path---------(浏览器chrome.exe的地址)

【HTML中的注释】: 快捷键 ctrl+/

HTML中的各种标签,打img或者a,直接table可以全部补全

相对路径和绝对路径

…/是指返回上一级

我的头像 我的头像
1-1
2-12-22-32-4
3-13-23-3
4-14-24-3
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值