java.util 包(时间、集合框架)
一:有关时间的类
1. Date类:表示特定的瞬间,精确到毫秒
如果类中没有重写toString()方法,那么会打印出“类名@地址”。
三种构造方法:
(1). Date();
(2). Date(int y,int m,int d) ;
用这种方法编程,在new后面的Date上会有横线,意思是过时的,可以用,但可能会出现问题,而且存在千年问题,想输出正确的月份,那么在传参数月份时需要减一,因为月份一般从0开始。
(3). Date(long n);
从1970年1月1日00:00:00开始,往后推n毫秒的时间,一般用于科学计算。
getxxx() : getDate(): 得到日期 setxxx() after(Date a) before(Date a)
getDay(): 得到星期几
getMonth():得到月份
getYear():得到年份
2. 日历类Calendar
Calendar无法实例化,它是一个抽象类,要是用它,必须调用其静态方法getInstance()来得到其实例,它实际上是返回了一个该类的直接子类GregorianCalendar的对象,用父类来装载子类。
该实例对象可以调用set方法,set方法有许多重载函数,其中set(int field,int value)可以按时间分量进行设置,如set(Calendar.YEAR,1997)
方法:after(Object when)
before(Object when)
getTime():可以将Calendar类型转化为Date类型
add(int field ,int val):指定分量加val
get(int field):获得时间分量
3. 类GregorianCalendar
直接使用构造函数进行实例化并初始化, getTime()是获得当前对象的逻辑层面的时间,一般数据层面的月份比逻辑层面少1。
二:集合框架
集合框架是用于表示和操纵集合的统一体系结构,其中包含了许多功能强大的集合对象,用于存储,检索和操作数据,Collection对象是将多个元素组成一个单元的对象。
集合框架包含接口,算法和实现三大组件。
--------- 上图中,实线为类,虚线为接口
Collection:用对象就可以存储的无序的集合
Map:用键值对存储的无序的结合
List:动态数组,带下标,用对象就可以存储(可以使用for遍历)
Set:用对象就可以存储的无序的集合(无法使用for遍历,除非用迭代器)
1.Collection集合
(1). 部分方法:add(Object c1); addAll(Collection c2); size(); isEmpty(); remove(Object c1); equals(Collection c2)//比的是值 removeAll(); retainAll(); clear()
tip: 允许存储重复的对象值
(2). 获取元素数据
1) Iterator iterator=c1.iterator();
while(iterator.hasNext()){
Student tmp=(Student)iterator.next();
System.out.println(tmp.toString());
}
2) 使用泛型
Collection<Student> c1=new ArrayList<Student>();
....
Iterator<Student> iterator=c1.iterator();
while(iterator.hasNext()){
Student tmp=iterator.next();
System.out.println(tmp.toString());
}
3) foreach 迭代
for(Student tmp:c1) {
System.out.println(tmp.toString());
}
4) 如果是ArrayList类型集合,则也可以使用下标遍历。
2.Map集合
使用键值对进行存放,hashMap的键和值都可以为null,且可以打印出来,但键不能重复。Hashtable的键和值都不能为空。方法:put(),get(),
hashMap是线程不安全的。Hashtable是线程安全的。
(1).遍历方式有三种:
1). 用键遍历
Set<String> keys=map.keySet();
for(String keystr:keys){
System.out.println(keystr);
//System.out.println((map.get(keystr)).toString);
}
2). 用值遍历
Set<Student> values=map.value();
for(Student value:values){
System.out.println(value.toString);
}
3). 键值对组合遍历
Set<Entry<String,Student>> entrys=map.entrySet();
for(Entry<String,Student> entry:entrys){
System.out.println(entry.getKey());
System.out.println((entry.getValue()).toString);
}
4). 枚举(Hushtable方法,线程安全的)
Enumeration<Student> enumeration=map.elements();
while(enumeration.hasMoreElements()){
System.out.println(enumeration.nextElement);
}
3.Collections:针对集合的一些工具
在Collections中包含collection和List,Collections里面包含很多的静态方法,其中的排序函数,可以对集合进行排序
1.sort(List<T> list)方法,使用该方法时,我们必须让list数据的基类型T的类实现compareable<T>接口,该接口属于java.lang包下的,再在该类中重写该接口下的compareTo(T p)方法,该方法返回布尔值,规定排序的方式。用 Collections.sort(list);调用
2.sort(List<T> list,Comparator<? super T> c):使用该方法时,也可以让list数据的基类型的类实现compareTor<T>比较器,该比较器接口属于java.util包下的,相当于类外部的比较器,再在类中实现该接口下的compare(T a ,T b)方法,该方法返回的是个整型值,大于0,表示升序,小于0表示降序。调用时用Collections.sort(list,new T());这是动态排序。
tip:一般情况下需要重写hashcode()和equal()方法。
4.集合框架包含的三大组件:
(1). 接口:集合的抽象数据类型。
(2). 算法:对实现接口的对象执行计算的方法
(3). 接口的实际实现
5. 集合框架的优点:
(1). 提供有用的数据结构和算法,减少编程工作量;
(2). 提高程序速度和质量,因为它提供了高性能数据结构和算法;
(3). 可以方便的扩展或改写集合。