JAVA进阶20
1、可视化日历程序(简陋版)
package cn.zh.abstrac; import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.GregorianCalendar;
import java.util.Scanner; public class TestCalendar {
public static void main(String[] args) throws ParseException {
System.out.println("请输入一个日期:(格式:yyyy-MM-dd)");
Scanner sc = new Scanner(System.in);
String str = sc.nextLine();
DateFormat df = new SimpleDateFormat("yyyy-MM-dd");
Date date = df.parse(str);
Calendar c = new GregorianCalendar();
c.setTime(date); int day = c.get(Calendar.DAY_OF_MONTH);
int days = c.getActualMaximum(Calendar.DATE);
System.out.println("日\t一\t二\t三\t四\t五\t六"); c.set(Calendar.DAY_OF_MONTH, 1); for (int i = 0; i < c.get(Calendar.DAY_OF_WEEK) - 1; i++) {
System.out.print ("\t");
} for (int i = 1; i <= days; i++) {
if (day == c.get(Calendar.DAY_OF_MONTH)){
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "*\t");
}else {
System.out.print(c.get(Calendar.DAY_OF_MONTH) + "\t");
} if (c.get(Calendar.DAY_OF_WEEK) == Calendar.SATURDAY) {
System.out.println(); //换行
}
c.add(Calendar.DAY_OF_MONTH, 1);
}
}
}
运行结果图

2、使用递归打印目录树结构
package cn.zh.abstrac;
import java.io.File;
public class TestFile {
public static void main(String[] args) {
File f = new File("E:\\小程序");
printFile(f,0 );
}
static void printFile(File file,int level) {
//输出层次
for (int i = 0; i < level; i++) {
System.out.print("-");
}
System.out.println(file.getName());
if (file.isDirectory()) {
File[] files = file.listFiles();
for (File temp : files) {
printFile(temp,level+1);
}
}
}
}
运行结果图

3、枚举的用法
package cn.zh.abstrac;
import java.util.Random;
public class TestEnum {
public static void main(String[] args) {
//枚举遍历
for (week k : week.values()) {
System.out.println(k);
}
//switch语句中使用枚举
int a = new Random().nextInt(4); //生成0,1,2,3的随机数
switch (Season.values()[a]) {
case SPRING:
System.out.println("春天");
break;
case SUMMER:
System.out.println("夏天");
break;
case AUTUMN:
System.out.println("秋天");
break;
case WINTER:
System.out.println("冬天");
break;
}
}
}
enum Season{
SPRING,SUMMER,AUTUMN,WINTER
}
enum week{
星期一,星期二,星期三,星期四,星期五,星期六,星期日,
}
运行结果图

4、异常处理
package cn.zh.abstrac; import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException; public class TestA {
public static void main(String[] args) {
FileReader reader = null;
try {
reader = new FileReader("d:/a.txt");
System.out.println("111111111");
char c = (char)reader.read();
char c1 = (char)reader.read();
System.out.println(""+c+c1);
}catch (FileNotFoundException e){
System.out.println("2222222222222222");
e.printStackTrace();
}catch (IOException e){
e.printStackTrace();
}finally {
System.out.println("333333333333333333");
try {
if(reader !=null){
reader.close();
}
}
catch (Exception e){
e.printStackTrace(); }
}
}
}
运行结果图

5、容器和数据结构
(1)简化版-手工实现ArrayList
package cn.zjc.mycollection;
public class SxtArrayList {
private Object[] elementDate;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArrayList() {
elementDate = new Object[DEFALT_CAPACITY];
}
public SxtArrayList(int capacity) {
elementDate = new Object[capacity];
}
public void add(Object obj) {
elementDate[size++] = obj;
}
public String toString() {
StringBuilder sb = new StringBuilder();
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementDate[i]+",");
}
sb.setCharAt(sb.length()-1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArrayList s1 = new SxtArrayList(20);
s1.add("aa");
s1.add("dd");
System.out.println(s1);
}
}
运行结果图

(2)数组的扩容操作
package cn.zjc.mycollection;
public class SxtArray01<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArray01() {
elementData = new Object[DEFALT_CAPACITY];
}
public SxtArray01(int capacity) {
elementData = new Object[capacity];
}
public void add(E element) {
// 什么时候扩容
if (size == elementData.length) {
//怎么扩容(扩容操作)
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public String toString() {
StringBuilder sb = new StringBuilder();
//[a,b,c]
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementData[i] + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArray01 s1 = new SxtArray01(20);
for (int i = 0; i < 25; i++) {
s1.add("zh" + i);
}
System.out.println(s1);
}
}
运行结果图

(3)加get/set,索引不合法等
package cn.zjc.mycollection;
public class SxtArray01<E> {
private Object[] elementData;
private int size;
private static final int DEFALT_CAPACITY = 10;
public SxtArray01() {
elementData = new Object[DEFALT_CAPACITY];
}
public SxtArray01(int capacity) {
elementData = new Object[capacity];
}
public void add(E element) {
// 什么时候扩容
if (size == elementData.length) {
//怎么扩容(扩容操作)
Object[] newArray = new Object[elementData.length + (elementData.length >> 1)];
System.arraycopy(elementData, 0, newArray, 0, elementData.length);
elementData = newArray;
}
elementData[size++] = element;
}
public E get(int index){
checkRange(index);
return (E)elementData[index];
}
public void set(E element,int index){
checkRange(index);
elementData[index] = element;
}
public void checkRange(int index){
//索引合法判断[0,size)
if (index<0||index>size-1){
//不合法
throw new RuntimeException("索引不合法!"+index);
}
}
public String toString() {
StringBuilder sb = new StringBuilder();
//[a,b,c]
sb.append("[");
for (int i = 0; i < size; i++) {
sb.append(elementData[i] + ",");
}
sb.setCharAt(sb.length() - 1, ']');
return sb.toString();
}
public static void main(String[] args) {
SxtArray01 s1 = new SxtArray01(20);
for (int i = 0; i < 25; i++) {
s1.add("zh" + i);
}
s1.set("AAAAA",10);
System.out.println(s1);
System.out.println(s1.get(26));
}
}
运行结果图

(4)链表的用法
package cn.zjc.mycollection;
public class Node {
Node previous; //上一个节点
Node next; //下一个节点
Object element; //元素数据
public Node(Node previous, Node next, Object element) {
this.previous = previous;
this.next = next;
this.element = element;
}
public Node(Object element) {
this.element = element;
}
}
Node
package cn.zjc.mycollection; /*
* 自定义一个链表
*/
public class SxtLinkedList01 { private Node first;
private Node last; private int size; //插入节点操作
public void add(int index, Object obj) {
Node newNode = new Node(obj);
Node temp = getNode(index); if (temp != null) {
Node up = temp.previous;
up.next = newNode;
newNode.previous = up; newNode.next = temp;
temp.previous = newNode;
} } //remove方法
public void remove(int index) {
Node temp = getNode(index); if (temp != null) {
Node up = temp.previous;
Node down = temp.next;
if (up != null) {
up.next = down;
}
if (down != null) {
down.previous = up;
}
//被删除的元素是第一个元素时
if (index == 0) {
first = down;
}
//被删除的元素是最后一个时
if (index == size - 1) {
last = up;
}
size--;
}
} //get方法,传递索引,返回对应的内容
public Object get(int index) {
if (index < 0 || index > size - 1) {
throw new RuntimeException("索引数字不合法:" + index);
} Node temp = getNode(index);
return temp != null ? temp.element : null;
} public Node getNode(int index) {
Node temp = null; if (index <= (size >> 1)) {
temp = first;
for (int i = 0; i < index; i++) {
temp = temp.next;
}
} else {
temp = last;
for (int i = size - 1; i > index; i--) {
temp = temp.previous;
}
}
return temp;
} public void add(Object obj) {
Node node = new Node(obj); if (first == null) { first = node;
last = node;
} else {
node.previous = last;
node.next = null; last.next = node;
last = node;
}
size++;
} public String toString() {
Node temp = first;
while (temp != null) {
System.out.println(temp.element);
temp = temp.next;
}
return "";
} public static void main(String[] args) {
SxtLinkedList01 list = new SxtLinkedList01(); list.add("a");
list.add("d");
list.add("c");
list.add("1");
list.add("3");
list.add("A"); System.out.println(list);
System.out.println(list.get(2));
System.out.println("==============");
list.remove(1);
System.out.println(list);
System.out.println("==============");
list.add(2,"黄飞鸿");
System.out.println(list);
}
}
运行结果图

JAVA进阶20的更多相关文章
- Java 进阶 hello world! - 中级程序员之路
Java 进阶 hello world! - 中级程序员之路 Java是一种跨平台的语言,号称:"一次编写,到处运行",在世界编程语言排行榜中稳居第二名(TIOBE index). ...
- Java线程间通信方式剖析——Java进阶(四)
原创文章,同步发自作者个人博客,转载请在文章开头处以超链接注明出处 http://www.jasongj.com/java/thread_communication/ CountDownLatch C ...
- 当我们说线程安全时,到底在说什么——Java进阶系列(二)
原创文章,同步发自作者个人博客,转载请以超链接形式在文章开头处注明出处http://www.jasongj.com/java/thread_safe/ 多线程编程中的三个核心概念 原子性 这一点,跟数 ...
- 从ConcurrentHashMap的演进看Java多线程核心技术 Java进阶(六)
本文分析了HashMap的实现原理,以及resize可能引起死循环和Fast-fail等线程不安全行为.同时结合源码从数据结构,寻址方式,同步方式,计算size等角度分析了JDK 1.7和JDK 1. ...
- JAVA进阶之旅(二)——认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践
JAVA进阶之旅(二)--认识Class类,反射的概念,Constructor,Field,Method,反射Main方法,数组的反射和实践 我们继续聊JAVA,这次比较有意思,那就是反射了 一.认识 ...
- Java进阶(五十二)利用LOG4J生成服务日志
Java进阶(五十二)利用LOG4J生成服务日志 前言 由于论文写作需求,需要进行流程挖掘.前提是需要有真实的事件日志数据.真实的事件日志数据可以用来发现.监控和提升业务流程. 为了获得真实的事件日志 ...
- Java进阶资料汇总
Java经过将近20年的发展壮大,框架体系已经丰满俱全:从前端到后台到数据库,从智能终端到大数据都能看到Java的身影,个人感觉做后台进要求越来越高,越来越难. 为什么现在Java程序员越来越难做,一 ...
- Java进阶2 数组内存和对象的内存管理知识
Java进阶2 数组内存和对象的内存管理知识 20131028 前言: 在面试的时候,如果是Java的编程语言,也许你认为没有什么可以问的,只能够说明你对于Java了解的太浅了,几乎就是两个星期的节奏 ...
- 7.19实习培训日志- java进阶
java进阶 java集合 Collection List ArrayList jdk1.2,异步处理,性能高,线程不安全 Vector jdk1.0,同步处理,性能低,线程安全 Set HashSe ...
随机推荐
- SQL 行转列的运用
适用场景:需要将行数据转换成列数据 例子: 现在有一个学生的成绩表 但是我们需要将每个学生的成绩汇集到一条数据上,这时候就可以用到行转列. 代码如下 一.不使用 PIVOT SELECT ),[St ...
- java 图片处理 base64编码和图片二进制编码相互转换
今天在弄小程序项目时,涉及上传图片的更改. 以下是代码: /** * -> base64 * @param imgFile * @return * @throws IOException */ ...
- Photoshop给草坪上的人物加上唯美的紫色霞光
最终效果 1.打开原图素材大图,创建可选颜色调整图层,对黄色,绿色进行调整,参数设置如图1,2,效果如图3.这一步给地面部分增加橙黄色. <图1> <图2> <图3> ...
- Docker版本与安装介绍
Docker版本与安装介绍 Docker-CE 和 Docker-EE Centos 上安装 Docker-CE Ubuntu 上安装 Docker-CE Docker-CE和Docker-EE Do ...
- redis的三种集群方式
redis有三种集群方式:主从复制,哨兵模式和集群. 1.主从复制 主从复制原理: 从服务器连接主服务器,发送SYNC命令: 主服务器接收到SYNC命名后,开始执行BGSAVE命令生成RDB文件并使用 ...
- MCMC算法解析
MCMC算法的核心思想是我们已知一个概率密度函数,需要从这个概率分布中采样,来分析这个分布的一些统计特性,然而这个这个函数非常之复杂,怎么去采样?这时,就可以借助MCMC的思想. 它与变分自编码不同在 ...
- asp.net core开源项目
Orchard框架:https://www.xcode.me/code/asp-net-core-cms-orchard https://orchardproject.net/ https://git ...
- 从输入URL到页面加载的全过程
前面的话 本文将详细介绍从输入URL到页面加载的全过程 概述 从输入URL到页面加载的主干流程如下: 1.浏览器构建HTTP Request请求 2.网络传输 3.服务器构建HTTP Response ...
- METO CODE 223 拉力赛
传送门 继续水板子题... #include <bits/stdc++.h> #define ll long long using namespace std; inline int re ...
- oracle篇 之 组函数
一,常见组函数 1 . avg:求平均值,操作数值类型 2.sum:求和,操作数值类型 3.min:求最小值,操作任意类型 4.max:求最大值,操作任意类型 select avg(salary),s ...