==和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-1 | 2-2 | 2-3 | 2-4 |
3-1 | 3-2 | 3-3 | |
4-1 | 4-2 | 4-3 |