当前位置: 首页 > news >正文

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

一、前言

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

http://www.lryc.cn/news/214556.html

相关文章:

  • 9.MySQL索引的操作
  • 大型加油站3d全景虚拟现实展示平台实现全方位立体呈现
  • Reading:Deep dive into the OnPush change detection strategy in Angular
  • 野火霸天虎 STM32F407 学习笔记_1 stm32介绍;调试方法介绍
  • @reduxjs/toolkit配置react-redux解决createStore或将在未来被淘汰警告
  • 致敬1024天前的自己
  • 〖Python网络爬虫实战㊱〗- JavaScript 网站加密和混淆
  • 基于单片机设计的电子柜锁
  • Windows安装tensorflow-gpu=1.14.0CUDA=10.0cuDNN=7.4 (多版本CUDA共存)
  • CodeWhisperer 初体验
  • HNU-算法设计与分析-讨论课1
  • java连接zookeeper
  • 2023-11-01 node.js-electron-环境配置-记录
  • 使用 ElementUI 组件构建 Window 桌面应用探索与实践(WinForm)
  • 使用C++构建安全队列
  • EasyFlash移植使用- 关于单片机 BootLoader和APP均使用的情况
  • python捕获异常和scapy模块的利用
  • CSS+Javascript+Html日历控件
  • 让企业的数据用起来,数据中台=数据治理?
  • 【人工智能Ⅰ】5-粒子群算法
  • 软考高项-49个项目管理过程输入、输出和工具技术表
  • 《C和指针》(7)函数
  • vue3中的Props
  • ElasticSearch搜索技术深入与聚合查询实战
  • vue+element ui中的el-button自定义icon图标
  • PyQt5:构建目标检测算法GUI界面 (附python代码)
  • SV-10A-4G IP网络报警非可视终端 (4G版)
  • 对xml文本元素赋值
  • 【k8s】资源管理命令-陈述式
  • 无需频繁登录支付宝网站即可完成商家转账,实时到账,方便安全快捷