大数据预科班15
2017-09-22 22:54
246 查看
大数据预科班15
复习
集合Collection 顶级接口List--有序;可重复 ArrayList,LinkedList,Vector(线程安全)--stack;
Set--无序;不可重复 HashSet
Collection--操作集合的工具类
Comparator--比较器---{类--Comparable}
Iterator迭代器
用于迭代遍历,挪动指针和标记操作hasNext()
next()
remove( )//移除正在迭代的元素--作用于原集合
迭代过程中不允许增删元素(list.add(s);list.remove(s);)
Iterator<String> it=list.iterator(); while(it.hasNext()){ System.out.println(it.next()); }
底层
1. 把原集合复制一份 2. 操作并标记 3. 原集合与备份的通过标记做对比,
使用增强for循环,类必须实现Iterable接口
Iterator在迭代中不可增删原集合增强for循环--jdk1.5特性之一
泛型
参数化类型顶级接口ParameterizedType--jdk1.5的特性之一
发展历史
1. 早期 元素类型同一位Object List list = new ArrayList(); list.add(true); list.add("as"); list.add(12); Iterator it=list.iterator(); //遍历 while(it.hasNext()){ Object o=it.next(); //instanceOf 判断--强转 } 2. 中期 List list = new ArrayList<T>(); 只是建议,没有实质性作用 3. 后期 List list<T> = new ArrayList(); 4. 现在--只存储一种类型 List list<T> = new ArrayList();
泛型的擦除
确定为具体的类型--编译期确定 有泛型--编译效率略低--推导【type inference】重新确定为新的类型 前编译中确定==后运行时确定<>diamond自动类型推导
自定义泛型类
泛型定义--符合标识符命名习惯上--大写字母表示泛型
T type类型
E element元素
K key键
V value值
R result结果
//泛型类 class demo<T>{ //定义变量 private T t=null; //方法 public void set(T t){ this.t=t; } public T get(){ return this.t; } }
定义多个泛型时,用逗号隔开<T,E,R>
为方法定义泛型(独属)-----【中转站:参数不确定时
//参数和返回值都可以不确定--工厂模式 修饰符 <E> 返回值 方法名(参数列表){ }
泛型不兼容--向上造型不适用这里
1. List<Number> list = new ArrayList<Integer>();//编译报错 2. 解决:继承--extends泛型的上限(传入类型的最高边界) ? extends 类//?表示的是类或者子类【注:接口也用extends】 List<? extends Number> list = new ArrayList<Integer>(); 可以添加null,但是不能添加除null之外的其他元素; 3. 泛型?写在定义的方法中 4. 泛型的下限:(传入的类型的最小边界) ? super 类或接口 能添加除null之外的其他子类元素; 5. 同一个泛型不能同时规定上下限--解决:方法调用(上限方法调用下限方法或相反着调用) 6. ?表示泛型的通配符
使用泛型但,但此时不确定类型,编译时不允许添加,运行时可以添加
List<?> list = new List<String>();
泛型接口同理
jdk1.5的10个特性
Map
映射:需要两个元素--成对出现(key-value)无序
键重复,覆盖值
需要两个泛型:Map<K,V>
键唯一,值不唯一
映射的顶级接口
不是集合,但它是集合框架【Java Collections FrameWork:集合、映射、操作的工具】的一员
Entry---代表键值对的接口---内部接口(隶属于Map接口)
一个Map有多个entry组成
方法
添加put(key,value)
toString方法被重写了
删除元素--根据key删除键值对remove(key)
获取value--get(key);键不存在,返回null
clean()清空map
containsKey(key)是否包含key
containsValue(value)是否包含value
equals
isEmpty判断映射是否为空
remove(key)移除该键的键值对
size()获取键值对的个数
values获取所有值,并放入Collecton集合中(value打印可重复)
遍历Map
1. 第一种方式:先获取键,在遍历键获取值 Set<String> keys = map.keySet(); Iterator<String> it = keys.iterator(); while (it.hasNext()) { System.out.println(map.get(it.next()).toString()); } 2. 第二种方式:获取键值对,再获取key和value for (Map.Entry<String, Integer> e : map.entrySet()) { System.out.println(e.getKey() e6ce + ":" + e.getValue()); }
HashMap
允许键为null允许值为null
HashSet基于HashMap
初始容量16,加载因子0.75f,每次扩容yibei
异步式线程不安全【同一个时间:多个--异步;一个--同步】
HashTable
元素非null-----键值都不允许为null;--NullPointException初始容量11,加载因子0.75f,扩容11,23,47
同步式线程安全的映射
效率最低的映射
java最早的映射
Dictionary低级映射父类--唯一子类:HashTable
ConcurrentHashMap
异步式线程安全的映射练习
输入键值对(空格隔开),键正序,键相同时值相加package com.peng.demo; import java.util.ArrayList; import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Scanner; public class TestListSet { public static void main(String args[]) { List<Integer> list = new ArrayList<Integer>(); Scanner s = new Scanner(System.in); System.out.println("请输入键值对的个数"); Map<Integer, Integer> map = new HashMap<Integer, Integer>(); // nextInt默认的后面加空格 int num = Integer.parseInt(s.nextLine()); String str = ""; for (int i = 0; i < num; i++) { System.out.println("请输入第" + (i + 1) + "键值对"); str = s.nextLine(); String[] temp_arr = str.split(" "); int arr1 = Integer.parseInt(temp_arr[0]); int arr2 = Integer.parseInt(temp_arr[1]); // 判断是否包含此键 if (map.containsKey(arr1)) { map.put(arr1, map.get(arr1) + arr2); } else { map.put(arr1, arr2); list.add(arr1); } } Collections.sort(list); for (int i = 0; i < list.size(); i++) { System.out.println(list.get(i) + "=" + map.get(list.get(i))); } System.out.println(map); } }
相关文章推荐
- Kendo UI开发教程(15): Kendo MVVM 数据绑定(四) Disabled/Enabled
- 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于CSDN博客定期更新排名)
- 大数据预科班7
- 15、SQL Server 使用子查询和CTE提供数据之关系除
- 12-面向对象(static关键字-成员变量和静态变量的区别-数据共享 13-面向对象(static关键字-注意事项) 14-面向对象(static关键字-main函数解析 15-面向对象(stat
- 大数据预科班13
- 大数据正式15
- vs2010 学习Silverlight学习笔记(15):数据与通信之JSON
- 《Flex 4实战》学习笔记:CH15 使用数据服务
- java中的共享数据的并发处理(J2SE入门15)
- Caffe学习系列(15):计算图片数据的均值
- 【SSH网上商城项目实战15】线程、定时器同步首页数据(类似于CSDN博客定期更新排名)
- 15-1-(2)-工资数据的输入(文件)
- Kendo UI开发教程(15): Kendo MVVM 数据绑定(四) Disabled/Enabled
- Item 15.指向类数据成员的指针
- 读书笔记--SQL必知必会15--插入数据
- 学点 C 语言(15): 数据类型 - sizeof(检测类型大小)
- Caffe学习系列(15):计算图片数据的均值
- day15 JDBC元数据 DBUtils 开发模型
- keras中文文档笔记15——面向小数据集构建图像分类模型