Java之Map、三种Map遍历方式、HashMap、TreeMap、IO流、Properties、反射、获取类对象的三种方式、注解、元注解、工厂模式、装饰器

Map

  • Map集合的特点都是由键决定的。
  • Map集合的键是无序,不重复的,无索引的,值不做要求(可以重复)。
  • Map集合后面重复的键对应的值会覆盖前面重复键的值。
  • Map集合的键值对都可以为null。
Map
HashMap
HashTable
其他Map
LinkHashMap
Properties
TreeMap

使用最多的Map集合是HashMap。

Map集合实现类特点

  • HashMap:元素按照键是无序,不重复,无索引,值不做要求。(与Map体系一致)
  • LinkedHashMap:元素按照键是有序,不重复,无索引,值不做要求。
  • TreeMap:元素按照建是排序,不重复,无索引的,值不做要求。

Map集合的遍历方式有:3种。

  • 方式一:键找值的方式遍历:先获取Map集合全部的键,再根据遍历键找值。
Map<String, Integer> buy=new HashMap<>();
buy.put("苹果手机", 2);//添加键值对
buy.put("智能手表", 1);
buy.put("java书", 1);
buy.put("c语言书", 1);
buy.put("西瓜", 2);

//Map集合的遍历
  //先把所有键取出来
Set<String> s1=buy.keySet();
//开始根据键找值
for (String key : s1) {
	Integer value=buy.get(key);
	System.out.println(key+"->>>>"+value);	
}
  • 方式二:键值对的方式遍历,把“键值对“看成一个整体,难度较大。
// 先获取键值对
Set<Map.Entry<String,Integer>> en=buy.entrySet();
for (Map.Entry<String, Integer> entry : en) {
	String key=entry.getKey();
	Integer value=entry.getValue();
	System.out.println(key+"->>>"+value);
	
}
  • 方式三:JDK 1.8开始之后的新技术:Lambda表达式。
//Lamubda表达式遍历
buy.forEach((k,v)->{
		System.out.println(t+"->>>"+v);
	}
});

HashMap的特点

  • HashMap底层是哈希表结构
  • 依赖hashCode和equals方法保证键的唯一
  • 如果键要存储的是自定义对象,需要重写hashcode和equals方法
  • HashMap跟HashSet底层原理是一模一样的,都是哈希表结构,只是HashMap的每个元素包含两个值而已。

TreeMap的特点

  • TreeMap底层是红黑树结构
  • 依赖自然排序或者比较器排序,对键进行排序
  • 如果键存储的是自定义对象,需要实现Comparable接口或者在创建TreeMap对象的时候给出比较器排序规则

IO流

  • intput,把硬盘文件中的数据读入到内存的过程,称之输入,负责读。
  • output,把内存中的数据写出到硬盘文件的过程,称之输出,负责写。

在这里插入图片描述
在这里插入图片描述

或者


在这里插入图片描述

Properties

  • Properties是一个Map体系的集合类
  • Properties中有跟io相关的方法
  • Properties只存储字符串

Properties核心作用:

  • Properties代表的是一个属性文件,可以把自己对象中的键值对信息存入到一个属性文件中去。
  • 属性文件:后缀是.properties结尾的文件,里面的内容都是 key=value,后续做系统配置信息的。

反射

  • 反射是在运行时获取类的字节码文件对象:然后可以解析类中的全部成分(构造器,属性,方法)。
  • 反射的核心思想和关键就是:得到编译以后的class文件对象。

获取Class类的对象的三种方式

  • 方式一:Class c1 = Class.forName(“全类名”);
  • 方式二:Class c2 = 类名.class
  • 方式三:Class c3 = 对象.getClass();

使用反射技术获取构造器对象并使用

  • 反射的第一步是先得到类对象,然后从类对象中获取类的成分对象。
  • Class类中用于获取构造器的方法
  • 获取构造器的作用依然是初始化一个对象返回。

利用反射技术获取构造器对象的方式

  • getDeclaredConstructors()
  • getDeclaredConstructor (Class<?>… parameterTypes)

反射得到的构造器可以做什么?

  • 依然是创建对象的
  • public newInstance(Object… initargs)

如果是非public的构造器,需要打开权限(暴力反射),然后再创建对象

  • setAccessible(boolean)
  • 反射可以破坏封装性,私有的也可以执行了。

利用反射技术获取成员变量的方式

获取类中成员变量对象的方法

  • getDeclaredFields()
  • getDeclaredField (String name)

反射得到成员变量可以做什么?依然是在某个对象中取值和赋值。

  • void set​(Object obj, Object value):
  • Object get​(Object obj)

如果某成员变量是非public的,需要打开权限(暴力反射),然后再取值、赋值

  • setAccessible(boolean)

利用反射技术获取成员方法对象的方式

获取类中成员方法对象

  • getDeclaredMethods()
  • getDeclaredMethod (String name, Class<?>… parameterTypes)

反射得到成员方法可以做什么?依然是在某个对象中触发该方法执行。

  • Object invoke​(Object obj, Object… args)

如果某成员方法是非public的,需要打开权限(暴力反射),然后再触发执行

  • setAccessible(boolean)

反射为何可以给约定了泛型的集合存入其他类型的元素?

  • 编译成Class文件进入运行阶段的时候,泛型会自动擦除。
  • 反射是作用在运行时的技术,此时已经不存在泛型了。

注解

Java 语言中的类、构造器、方法、成员变量、参数等都可以被注解进行标注。

自定义注解

public @interface 注解名称 {
    public 属性类型 属性名() default 默认值 ;
}
// 例如:
public @interface MyAnnotation {
    public String name() default "jjw" ;
}

元注解:注解注解的注解。

元注解有两个:

  • @Target: 约束自定义注解只能在哪些地方使用,@Target中可使用的值定义在ElementType枚举类中,常用值如下:
    • TYPE,类,接口
    • FIELD, 成员变量
    • METHOD, 成员方法
    • PARAMETER, 方法参数
    • CONSTRUCTOR, 构造器
    • LOCAL_VARIABLE, 局部变量
  • @Retention:申明注解的生命周期,@Retention中可使用的值定义在RetentionPolicy枚举类中,常用值如下:
    • SOURCE: 注解只作用在源码阶段,生成的字节码文件中不存在
    • CLASS: 注解作用在源码阶段,字节码文件阶段,运行阶段不存在,默认值.
    • RUNTIME:注解作用在源码阶段,字节码文件阶段,运行阶段(开发常用,平时用这个)

工厂模式

工厂模式(Factory Pattern)是 Java 中最常用的设计模式之一, 这种类型的设计模式属于创建型模式,它提供了一种获取对象的方式。

工厂设计模式的作用:

  • 工厂的方法可以封装对象的创建细节,比如:为该对象进行加工和数据注入。
  • 可以实现类与类之间的解耦操作(核心思想)。

装饰设计模式

创建一个新类,包装原始类,从而在新类中提升原来类的功能。作用:装饰模式指的是在不改变原类的基础上, 动态地扩展一个类的功能。

操作步骤:

  • 定义父类。
  • 定义原始类,继承父类,定义功能。
  • 定义装饰类,继承父类,包装原始类,增强功能!!

注意:此处的装饰方式和Python中的@方式不一样,Java中的@方式是注解而Python中的为装饰器

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值