大数据预科班15
来源:互联网 发布:重庆市网络知识竞赛 编辑:程序博客网 时间:2024/04/30 07:51
大数据预科班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() + ":" + 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); }}
阅读全文
0 0
- 大数据预科班15
- 大数据预科班3
- 大数据预科班4
- 大数据预科班5
- 大数据预科班6
- 大数据预科班7
- 大数据预科班8
- 大数据预科班9
- 大数据预科班串讲
- 大数据预科班10
- 大数据预科班11
- 大数据预科班12
- 大数据预科班13
- 大数据预科班14
- 大数据预科班16
- 大数据预科班17
- 大数据预科班18
- 大数据预科班总结
- Python进阶—*args与**kwargs详解
- 常用方法
- 一些与String相关的内容
- Android中的OpenSL ES是如何实现的?
- C#回顾学习笔记二十九:new关键字隐藏父类的方法
- 大数据预科班15
- 使用异或运算对交换两个变量的数据
- CSS相关及一些兼容性问题
- 【OJ相关】validator (UOJ / codeforces)
- 9-22
- NFS网络文件共享服务的配置和排错总结
- Rstudio安装出现问题
- uVa1587 长方体判断
- 大数据预科班作业10