一、前言
在学习java的时候,我印象最深的一句话是:程序=数据结构+算法,对于写java程序来说,这就是java的入门。
二、java基本数据结构与算法
1、数据类型
java中的数据类型8种基本数据类型:
整型
byte 、short 、int 、long
浮点型
float 、 double
字符型
char
布尔型
boolean
还有包装类型。所谓包装类型可以理解为都是类。
2、java常见数据结构
栈、队列、数组、链表和红黑树
3、java常见算法算法
排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序等。
查找算法:顺序查找、二分查找、哈希查找等。
字符串匹配算法:暴力匹配、KMP算法、Boyer-Moore算法等。
图论算法:最短路径算法、最小生成树算法、拓扑排序等。
动态规划算法:背包问题、最长公共子序列、最长上升子序列等。
三、如何验证:程序=数据结构+算法
/*** 获取当前时间,格式为:yyyy-MM-dd HH:mm:ss* @return*/public static String getDateStr() {SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");return df.format(new Date());}
比如上面这段代码获取当前时间,格式为:yyyy-MM-dd HH:mm:ss
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat 这个首先是个类型,它的算法就是构造函数
new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
和
df.format(new Date());
这两个算法
返回的String类型其实也就是数据结构
这一段程序涉及到两个数据结构和两个算法
算法1:
public SimpleDateFormat(String pattern){this(pattern, Locale.getDefault(Locale.Category.FORMAT));}
将这种格式: yyyy-MM-dd HH:mm:ss 作为参数加工
加工(算法)1:
public SimpleDateFormat(String pattern, Locale locale){if (pattern == null || locale == null) {throw new NullPointerException();}initializeCalendar(locale);this.pattern = pattern;this.formatData = DateFormatSymbols.getInstanceRef(locale);this.locale = locale;initialize(locale);}
加工(算法)2:
/* Initialize compiledPattern and numberFormat fields */private void initialize(Locale loc) {// Verify and compile the given pattern.compiledPattern = compile(pattern);/* try the cache first */numberFormat = cachedNumberFormatData.get(loc);if (numberFormat == null) { /* cache miss */numberFormat = NumberFormat.getIntegerInstance(loc);numberFormat.setGroupingUsed(false);/* update cache */cachedNumberFormatData.putIfAbsent(loc, numberFormat);}numberFormat = (NumberFormat) numberFormat.clone();initializeDefaultCentury();}
一层一层下来的算法还是很多的。所以
获取当前时间,格式为:yyyy-MM-dd HH:mm:ss 涉及的算法其实很多。但我们最终程序输出的是字符串类型的 yyyy-MM-dd HH:mm:ss,里面嵌套的函数是一个个算法,当然算法了也涉及到其他的数据类型和结构
一次类推
/* Initialize the fields we use to disambiguate ambiguous years. Separate* so we can call it from readObject().*/private void initializeDefaultCentury() {calendar.setTimeInMillis(System.currentTimeMillis());calendar.add( Calendar.YEAR, -80 );parseAmbiguousDatesAsAfter(calendar.getTime());}/* Define one-century window into which to disambiguate dates using* two-digit years.*/private void parseAmbiguousDatesAsAfter(Date startDate) {defaultCenturyStart = startDate;calendar.setTime(startDate);defaultCenturyStartYear = calendar.get(Calendar.YEAR);}
推到最下层
我们发现是这样的
@SuppressWarnings("ProtectedField")protected int fields[];
就是定义了一个int类型的数组,所以底层还是数据结构。