#Day11.pm
##API
##回顾:
String
① 封装 char [] 数组
② 常量池
③ 不可变
StringBuilder
append()
正则
百度 “正则表达式大全”
Integer
创建对象的方式:
① new Integer(6);
② Integer.valueOf(5);
有256个缓存对象, -128到127
范围内的值,访问缓存对象
范围外的值,直接新建对象
##ArrayList
① 内部是数组
② 默认的初始容量 10
③ 放慢后1.5倍增长
④ add() ,get(i), remove(i), remove(数据)
补: 数组实现的结果都是相邻的内存空间来储存的
正课:
LinkedList: 双向链表
双向链表的效率表现:
两端效率高
方法:
add(数据)
get(i)
remove(i)
remove(数据)
Iterator( ) 用来辅助新建迭代器实例
我们不能直接new, 要使用Linkedlist的方法来辅助创建.因为这个类 是私有隐藏的内部类, 我们自己不能直接创建对象.
双向链表,迭代器遍历,效率高.
以上的方法Arraylist 也一样有的, 除了这些外,
因为LinkedList 使用链表实现的,所以他的两端操作效率超高.并且 还提供了两端操作数据的专用方法:
addFirst() , addLast()
getFirst() , getLast()
removeFirst() ,removeLast()
// 新建迭代器, 通过list的方法来创建.
// 创建的Iterator 中有几个重要的方法:
// next() : 获取数据
// hashNext(): 判断还有没有数据
Iterator it = list.iterator();
while(it.hasNext()){ // 当还有数据
String s = it.next();// 取出下一个数据
System.out.println(s);
}
ArrayList : 一段连续的存储空间
优点: 访问任意位置效率高
缺点: 增删数据,效率可能会降低.
LinkedList:
首位效率高
如果只在首尾操作数据,选择 LinkedList
练习5: 丑数
被 2,3,5 整除多次,变成1
两端操作数据的专用方法:
addFirst() , addLast()
getFirst() , getLast()
removeFirst() ,removeLast()
这种数据操作方式 还有下面这种操作方式:
队列操作 Queue, 先进先出 ,FIFO
offer( ) ---> addLast()
peek() ---> getfirst()
poll() ---> removeFirst()
栈操作 Stack, 后进先出 ,LIFO
push() -- > addFirst()
pop()-- > removeFirst()
除了上面的方法外,还有自己独特的方法(惯用的方法), 功能是一样的,
这些方法 只有双向链表LinkedList 提供的这些方法,其他的没有.
LinkedList 提供了栈 和队列 这种结构的方法.
哈希表 , 散列表
存放键值对数据.
key 键 value 值
9527 唐壁虎
9528 华夫人
9529 祝枝山
9530 旺财
9531 如花
作用: 用键, 快速的查找数据 . 速度最快.
HashMap的使用
键 : 特点
①不重复
② 无序
方法:
put(key, value)
添加数据,(放入数据)
如果放入的key 重复,则 value 会被覆盖. 新值覆盖旧值
get(key)
获取对应值
如果不存在,得到 null
remove(key)
移除一对数据, 并返回被移除的值(value)
####练习: 字符统计:
""abcded""
// 字符统计
public class Test2 {
public static void main(String[] args) {
System.out.println("请输入一个字符串: ");
String s = new Scanner(System.in).nextLine();
HashMap map=new HashMap<>();
for (int i = 0; i < s.length(); i++) {
// 获取 key对应的计数值
// 获取字符串中的字符
char c=s.charAt(i);
// 有可能是null值, 不能拆箱
Integer count = map.get(c);
// 还没有计数,是第一个字符
if(count==null){
count=1;
}else { // 已经有计数,计数加 1
count++;
}
map.put(c, count);
}
System.out.println(map);
}
}