1 集合补遗
1) 集合复制, 默认的复制规则是浅表(浅层)复制
A clone() 方法
B 使用复制构造器!
Map map = new HashMap();
Map map2 = new HashMap(map);
List list1 = new ArrayList();
List list2 = new LinkedList(list1);
2) 同步化(线程安全的)
List list = new ArrayList();
//synchronizedList 可以将非线程安全的list包装为线程安全的
list = Collections.synchronizedList(list);
转换以后就相当于 Vector
HashMap map = new HashMap();
//synchronizedMap 可以将非线程安全的map包装为线程安全的
map = Collections.synchronizedMap(map);
3) 数组与集合的转换
a 数组转List(只读的)
String[] names = {"A","B","C"};
List list = Arrays.asList(names);//只读list
list = new ArrayList(list);//复制为全功能List
Set set = new HashSet(list);//复制为Set集合
b 集合转数组
Object[] ary1 = list.toArray();//集合转Object[]
String[] ary2 = (String[])
list.toArray(new String[]{});//集合转制定类型数组
4) Collection 与 Collections
Collection 抽象的集合概念,
Collections 集合静态工具类, 包含集合的工具方法
(sort, 打乱(洗牌)等)
5) Map的迭代, Map 是 [Key:Value] 组成的集合
A 对key:value 进行迭代
map.entrySet();
B 对Key进行迭代
map.keySet();
C 对Value进行迭代
map.values();
案例: 统计每个字符出现的次数
2 内部类- 定义在类的内部 的类, 根据位置分为4类
1) 静态内部类:使用static修饰,声明在类体中.
静态内部类中可以访问外部类的静态成员。
2) 成员内部类: 声明在类体中,不使用static,具有类的成员特征
也就是,必须有类的实例才能创建内部类实例。内部类实例
可以访问共享外部类的成员变量。很常用。
如:链表的节点就可以定义为内部类
3) 局部内部类:把类声明在方法中,就是局部内部类,作用域
类似局部变量。很少见。
4) 匿名内部类,匿名类:非常常见,可以写在任何地方,就像一般的语句。
语法更象是创建对象:
Date d = new Date(){};
匿名类是对原类的一个继承,同时创建了实例,{} 就是继承
以后的类体。类体中可使用所有类的语法。
匿名类不能写构造器。
匿名类可以从抽象类或者接口继承,必须提供抽象方法的实现。
5) 任何内部类都编译成独立的class文件
6) 最大的作用:封装!封装内部概念:
情侣间的土豆和菜市场的土豆是不一样的
7) 通过实例简单理解记忆语法.在今后的案例中灵活练习内部类
3 时间日期
时间类的本质: Date = long + 操作
Calendar = long + 操作
时间的标准: (1970)GMT long (0)UTC long
1) java 中基本的时间表示 GMT long
2) Java提供了Date类型表示时间和日期
Date 是long类型的包装
3) Calendar 是历法的的抽象.
历法: 公历, 农历, 太阳历, ...
GregorianCalendar 是历法的实现, 采用公历
(太阳历) 算法实现的.
Calender cal = Calender.getInstance();
4) Date 和 Calendar 的默认值就是当前时间
5) 时间的类型转换
new Date(long)
date.setTime(long) cal.setTime(Date);
----------> --------->
long <---------- Date <--------- Calendar
date.getTime() cal.getTime()
6) 时间的计算
Calendar 提供丰富的时间计算方法 add() set() 等
如: 计算商品的促销日期special Date:
输入: 商品生产日期, 和保质期月份
返回: 商品的促销日期, 是过期前两周周的周五
7) 日期的输入与输出,
日期输出: 的本质是 Date 转换为格式化的String
日期输入: 的本质是 将格式化的String转换为Date
java.text.SimpleDateFormat fmt =
new SimpleDateFormat("yyyy-MM-dd");
构建SimpleDateFormat 一般提供日期的格式
"yyyy-MM-dd" 具体参看 javadoc
如: "yyyy-MM-dd HH:mm:ss"
"yyyyMMdd"
"dd/MM/yyyy"
"MM/dd/yyyy"
fmt.parse(String)可以实现将(合法)字符串解
析为日期类型, 经常用于处理日期输入.
fmt.format(Date) 可以把日期格式化为字符串
用于输出处理.
转载于:https://blog.51cto.com/lixin1013648258/684623