Java第四周学习日记
Day01
双列集合:
在现实生活中有些数据是以映射关系存在的,也就是成对存在的,比如夫妻等。单例集合无法表现出映射关系,所以学习双列集合。
双列集合无迭代器。
1.Map
双列集合:
————————| Map 如果是实现了Map类接口的集合类,具备的特点:存储的数据都是以键值对的形式存在的,键不可重复,值可以重复。
————————————| Hashmap 底层也是基于哈希表实现的。
————————————| Treemap
————————————| Hashtable
1-1 HashMap
基于哈希表的Map接口的实现。
HashMap的存储原理:
往HashMap添加元素的时候,首先会调用hashcode方法得到元素的哈希吗值,然后经过运算就可以算出该元素在哈希表中的存储位置。
情况一:如果算出的目前为止没有任何元素存储,那么该元素可以直接添加到哈希表中。
情况二:如果算出的位置目前已经存在其他的元素,那么还会调用该元素的equals方法与这个位置上的元素进行比较,如果equals返回的是false,那么该元素允许被存储,如果equals方法返回的是true,那么该元素被视为重复元素,不允许存储。
迭代
方式一 keyset
方式二:values
方式三:entrySet
HashMap的存储原理
1-2 TreeMap
TreeMap也是基于红黑树(二叉树)数据结构实现的,特点:会对元素的键进行排序存储。
TreeMap要注意的事项:
1.往TreeMap添加元素的时候,如果元素的键具备自然顺序,那么就会按照键的自然顺序特性进行排序存储。
2.往TreeMap添加元素的时候,如果元素的键不具有自然顺序,那么键所属的类必须要实现Comparable接口,把键的比较规则定义在CompareTo方法上。
3.往TreeMap添加元素的时候,如果元素的键本身不具有自然顺序,而且键所属的类也没有实现Comparable接口,那么就必须在创建TreeMap对象的时候创建比较器。
Day02
1.正则表达式
概念:
正则表达式是用于操作字符串的一个规则,正则表达式的规则使用了特殊的符号表示。
正则表达式的语法:
(1)预定义字符
预定义字符没有加上数量词之前都只能匹配一个字符而已。
(2)数量词
(3)范围词(写在中括号中)
正则表达式要注意的事项:
1.没有数量词配合,都只能匹配一个。
2.范围词里面不管内容有多长,没有数量词的配合都只能匹配一个字符而已。
正则表达式主要是用于操作字符串的规则,正则表达式对字符串的操作主要有以下几中应用:
1.匹配(matches)
2.切割(splite)
如果正则的内容需要被复用,那么需要对正则的内容进行分组,分组的目的是为了提高正则的复用性。组好不能自己指定,是从1开始的。
3.替换
String replaceAll(String regex, String replacement)
使用给定的 replacement 替换此字符串所有匹配给定的正则表达式的子字符串。
4.查找
查找需要使用的对象:
1.Pattern (正则对象)
2.Matcher(匹配器对象)
指定为字符串的正则表达式必须首先被编译为此类的实例。然后,可将得到的模式用于创建 Matcher 对象,依照正则表达式,该对象可以与任意字符序列匹配。执行匹配所涉及所有状态都驻留在匹配器中,所以多个匹配器可以共享同一模式。
因此,典型的调用顺序是
Pattern p = Pattern.compile("a*b");
Matcher m = p.matcher("aaaaab");
boolean b = m.matches();
匹配器要使用到的方法:
1.find() 通知匹配器去匹配字符串,查找符合规则的字符串。如果能查找到符合规则的字符串,返回true,否则返回false
2.group() 获取符合规则的子串
注意:使用group方法的时候一定要先调用find方法让匹配器去查找符合规则的字符串,否则报错。
单词边界匹配器
\b 单词边界匹配器只是代表了单词的开始或者结束部分,不匹配任何的字符。
需求:从网页上爬下的数据中提取出邮箱。