java入门,程序=数据结构+算法

一、前言

在学习java的时候,我印象最深的一句话是:程序=数据结构+算法,对于写java程序来说,这就是java的入门。

java入门,程序=数据结构+算法_第1张图片

二、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类型的数组,所以底层还是数据结构。

你可能感兴趣的:(java,java,开发语言)