一、力扣打卡
今天学习的是将罗马数字转换为整型
将罗马数字转换为整型有如下规则:
I 可以放在 V (5) 和 X (10) 的左边,来表示 4 和 9。
X 可以放在 L (50) 和 C (100) 的左边,来表示 40 和 90。
C 可以放在 D (500) 和 M (1000) 的左边,来表示 400 和 900。
字符 数值
I 1
V 5
X 10
L 50
C 100
D 500
M 1000
那么怎么实现?
首先就是将罗马字符转换为数值,我们可以使用Map集合还有switch的方式去实现
因为Map集合里面包含键值对,正好是我们需要的
基本解题思路:前面一个数小于后一个数就减去,大于就加上
Map<Character,Integer> symbolValues=new HashMap<Character,Integer>(){{
put('I', 1);
put('V', 5);
put('X', 10);
put('L', 50);
put('C', 100);
put('D', 500);
put('M', 1000);
}
};
public int romanToInt(String s) {
int ans = 0;
int n = s.length();
for (int i = 0; i < n; ++i) {
int value = symbolValues.get(s.charAt(i));
if (i < n - 1 && value < symbolValues.get(s.charAt(i + 1))) {
ans -= value;
} else {
ans += value;
}
}
return ans;
}
还有一种方法就是将所有的可能性列出来,先判断后面还有没有两个字符,有的话判断字符是不是存在于集合中,存在于就读取这两个数据,不存在就读取一个就可以了!
二、 Spring知识学习
1. 注解开发(对于对象)
在前面我们学习了配置文件开发,虽然经过一些方法会让一些操作变得更加的简单,但是其实还有更简单的方法,就是进行注解扫描的方式
怎么进行注解开发?
第一步,在对应的类(在applicationContext.xml文件中进行了配置的)上进行注解的配置
第二步,仅仅配置上面的过程还不够,还需要添加
<context:component-scan base-package="com.wxy"/>
告诉Spring应该扫描哪里
在这里我们还是以之前的UserDaoImpl类和UserServiceImpl类来进行记录
之前的配置应该是,先写好类,然后在applicationContext.xml下面配置如下
<bean id="userDao" class="com.wxy.dao.UserDao"></bean>
<bean id="userService" class="com.wxy.service.UserService">
<property name="userDao" ref="userDao"></property>
<!--这里是将userDao封装进userService,使用的方法是set进行配置,同样可以使用构造器的方式,property改成constructer-args就可以;然后这里配置的是对象,如果是基本数据就是value;如果是集合就有多种方式,
比如对于List来说 <property name="XX"> <list>值A</list>。。。 </property> ;
对于map来说,因为存在键值对,所以就是
<property name="strMap">
<map>
<entry key="u1" value-ref="user1"></entry>
<!--这里使用value-ref的原因是引用Map类型的对象-->
</map>
</property>
对于properties来说就是<property name="XX"> <props>值A</props>。。。 </property>
-->
</bean>
那么在这里就会进行一个拆解
第一句话<bean id="userDao" class="com.wxy.dao.UserDao"></bean>
配置在userDaoImpl类中,添加注解
@Component("userDao")
第二句话<bean id="userService" class="com.wxy.service.UserService">
配置在userServiceImpl类中,添加注解
@Component("userService")
第三句话<property name="userDao" ref="userDao"></property>
因为是userService引用userDao,所以将其添加注解在userServiceImpl类中的对应位置
@Autowired //自动注入 按照数据类型从Spring容器中进行匹配
//使用是按照id值从容器中进行匹配的,但是主要此处需要和@Autowired一起使用
@Qualifier("userDao") //此时只有一个bean此处就算省略还是可以注入,但是有多个就不行
最后需要在applicationContext文件中配置
<context:component-scan base-package="com.wxy"/>
才不会报错!!!
1.(1) 对上面的加工,使用更明确的注解
在userServiceImpl中将@Component(userService)修改为@Service(userService)
在userDaoImpl中将@Component(userDao)修改为@Repository(userDao)
注意:如果你在这里使用的是xml文件进行配置的,那就必须写setUserDao方法在userServiceImpl中,因为他是通过反射进行注入的;但是如果使用注解的方式就不用set方法了
按照类型注入只写@Autowired就可以,但是按照id值的话就需要写@Autowired和@Qualifier这两个注释。
也可以将上面两句话替换为@Resource(name="xxx"); //@Resource相当于@Autowired和@Qualifier
2. 注解开发(基本数据类型)
使用@Value("XXX")进行配置
3. 其他
@Scope("prototype") //Spring容器产生多个bean
@Scope("singleton") //Spring容器产生一个bean
@PostConstruct
public void init(){
System.out.println("Service对象的初始化方法");
}
@PreDestroy
public void destroy(){
System.out.println("Service的销毁方法");
}
4. Spring新注解开发