CGB-SE-day11

#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

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 提供了栈 和队列 这种结构的方法.

HashMap

哈希表 , 散列表
存放键值对数据.
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);		
	}
}

你可能感兴趣的:(javaSE)