本周是java编程课学习的第三周,本周学习的主要内容有常用类库与集合,故本周博客也将从这两方面进行叙述。
常用类库
泛型
泛型,即“参数化类型”。就是将类型由原来的具体的类型参数化,类似于方法中的变量参数,此时类型也定义成参数形式(可以称之为类型形参),然后在使用/调用时传入具体的类型(类型实参)。
泛型示例
public class ClassName
private T data;
public T getData(){
return data;
}
public void setData(T data)
this.data = data;
}
}
泛型接口
分为指定接口与不指定两种
(1)指定类型
public class Interface implements IntercaceName
private String text;
public String getData()
return text;
}
}
(2)不指定类型
public class Interface1
private T data;
public T getData(){
return data;
}
}
泛型方法
private static
泛型限制类型
使用泛型时,可以指定泛型的限定区域。例:必须是某某类的子类或某某接口的实现类
通配符
指定泛型类型的上下届与指定没有限制的泛型类型
作用
(1)提高代码复用率
(2)泛型中的类型在使用时指定,不需要强制类型转换(类型安全,编译器会检查类型)
Calendar
Calendar类是一个抽象类,可以为在某一特定时刻和一组之间的转换的方法Calendar fields,如YEAR,MONTH,DATE_OF_MONTH等,用于操纵该日历字段,如获取日期下个星期。瞬间可以用毫秒值表示,该类还提供了用于在包外实现具体日历系统的附加字段和方法,这些字段和方法被定义为protected。与其他对区域设置敏感的类一样,Calendar提供了一个类方法getInstance,用于获取此类型的通用对象。Calendar的getInstance方法返回一个Calendar对象,其日历字段已使用当前日期和时间初始化:
Calendar rightNow = Calendar.getInstance();
Calendar对象可以生成实现特定语言和日历样式的日期时间格式所需的所有日历字段值。
常用字段
常用字段详细介绍
YEAR
public static final int YEAR = 1;
get与set字段编号表示年份。这是特定于日历的值
MONTHH
public static final int MONTH = 1;
get与set字段编号表示月份。这是特定于日历值,从0开始(一月)
WEEK_OF_YEAR
public static final int WEEK_OF_MONTH = 4;
get与set表示当年的周数。由getFirstDayOfWeek()和getMinimalDaysInFirstWeek()定义的一年中的第一周具有值。
其子类定义在一年的第一周之前的天数 WEEK_OF_YEAR的值。
WEEK_OF_MONTH
public static final int WEEK_OF_MONTH = 4;
get和set字段编号表示get的周数。
子类定义在该月的第一周之前的天数的值WEEK_OF_MONTH。
DATE
public static final int DATE = 5;
get和set字段编号表示当月的日期。这是DAY_OF_MONTH的同义词。
常用方法
add
public abstract void add(int field,int amount)
根据日历的规则,将指定的时间量添加或减去给定的日历字段。如,要从日历当前的时间减去4天,可通过调用以下方法来实现:
add(Calendar.DAY_OF_MONTH,-4).
参数:
filed-日历字段
amount-要添加到字段中的日期或时间量
get
public int get(int field)
返回给定日历字段的值。
set
public void set(int field,int value)
将给定的日历字段设置为给定值。
getTime
public final Date getTime()
返回此表示Calendar的时间值的Date对象。
结果:
Date表示时间值。
寻找休息日练习
集合
集合是Java中提供的一种容器,可以用来存储多个数据。集合和数组既然都是容器,他们有啥区别?数组的长度是固定的。集合的长度是可变的。数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储。
链表与二叉树
链表
链表是由一组不必相连(可以连续也可不连续)的内存结构(节点),按特定的顺序连接在一起的抽象数据类型。
补充:
抽象数据类型(Abstract Data Type [ADT]):表示数学中抽象出来的一些操作集合。
内存结构:内存结构中的,如: struct 、特殊内存块...等等之类;
数组和链表的区别优缺点:
数组是一种连续存储线性结构,元素类型相同大小等
数组的优点:
存取速度快
数组的缺点:
事先必须知道数组的长度
插入删除元素很慢
空间通常是有限制的
需要大块连续的内存
插入删除元素的效率很低
链表是离散存储线性结构
n个节点离散分配,彼此通过指针相连,每个节点只有一个前驱节点,每个节点只有一个后续节点,首节点没有前驱节点,尾节点没有后续节点。
链表优点:
空间没有限制
插入删除元素很快
链表缺点:
存取速度很慢
二叉树
二叉树是树的一种,每个节点最多可具有两个子树,即节点的度(节点拥有的子树集)最大为2。二叉树就是每个节点不能多于两个儿子,如下图,当根节点的左边全部比根节点小,当前根节点的右边全部比根节点大。可以看出,这对我们来找一个数是非常方便快捷的。因为在查找数据时采用二分法,即每次都对左右两边的数进行判断。
二叉树的遍历方式
一般分为先序遍历,中序遍历,后序遍历。先序遍历先访问根节点,然后访问左节点,最后访问右节点(根->左->右)中序遍历先访问左节点,然后访问根节点,最后访问右节点(左->根->右)后序遍历先访问左节点,然后访问右节点,最后访问根节点(左->右->根) 。
ArrayList()
ArrayList 集合数据存储的结构是数组结构。元素增删慢,查找快,由于日常开发中使用最多的功能为查询数据、遍历数据,所以 ArrayList 是最常用的集合。
特性:
(1) 内部是数组的实现。更利于: 数据的查找、数据的遍历。
(2) 默认的初始容量 是 10
(3) 扩容算法: 原长度+原长度右移一位 (扩容的新长度大约为原长度的1.5倍)
(4)可以存储null
(5)允许存储重复的数据
(6) 线程不安全但效率高
构造方法:
(1)ArrayList()
创建一个默认长度为0的集合, 在第一次使用时会自动扩容为10长度。
(2)ArrayList(int initSize)
创建一个默认长度为指定数值的集合。
(3)ArrayList(Collection coll);
通过一个单值存储的集合, 创建一个ArrayList。
ArraryList是List的子类,List中的方法ArraryList都是可以使用。