类别归档:Java

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。

RSS feed of Java

Java容器类LinkedList与ArrayList使用时机对比

  大多数Java初学者在使用动态数组时,会不假思索的选择ArrayList。但实际上,除了ArrayList,还有LinkedList可供选用。

  那么,在使用Java的动态数组时,怎样在ArrayList与LinkedList之间做出选择呢?

  一言以蔽之,在大多数使用场景中,ArrayList与ArrayDeque要优于LinkedList。对于初学者来说,在拿不准用哪个时,不妨使用ArrayList。


  LinkedList与ArrayList是List接口的两种不同的实现。LinkedList使用双向链表实现。ArrayList则使用动态可变长数组实现。

  对于标准的链表和数组运算,不同的方法会有不同的算法运行时间。

  对于LinkedList<E>:

  • get(int index)  O(n)
  • add(E element)  O(1)
  • add(int index, E ...

继续阅读

Java实现单向链表的归并排序

由于链表(LinkedList)不支持随机访问(Random Access),只允许顺序访问,因此对于链表的O(logn)时间复杂度的排序算法不可以采用诸如快速排序等基于随机访问的排序算法,而归并排序可以满足这一需求。

归并排序是分治法(Divide and Conquer)的典型应用,其伪代码如下:

merge_sort(list) {
  split list into two halfs, say first and second ;
  merge_sort(firstHalf);
  merge_sort(secondHalf);
  merge(firstHalf,secondHalf);
}

下面的Java代码实现了对单链表(singly linked list)的归并排序,代码实现优美 ...

继续阅读

QQ中国象棋Java棋盘识别与自动下棋程序

QQ中国象棋(传统版)的棋盘识别程序Java源码(Eclipse工程)目前维护在Github

项目地址:https://github.com/qinjiannet/screen-chess-qq/

程序的入口main方法位于execute包下的Executor类中

自动下棋时默认采用随机行走,开发者可以通过修改ai包下的Thinker类中的getBestMove方法实现更加智能的AI

运行时,需要在QQ游戏大厅中手工开始一局象棋,然后运行Executor

由于程序采用的是截图分析获取棋盘状态的方式,因此运行过程中需要保证游戏窗口不被其他窗口遮挡

QQ中国象棋界面

部分Java源码摘录如下:

RecognitionHelper.java 用来识别QQ中国象棋的棋盘

package recognition;

import java.awt.Point;
import java.awt.image.BufferedImage;
import java.util.HashMap;

import color ...

继续阅读

基于SpringSide生成Eclipse Web工程

SpringSide框架简介

    SpringSide框架有一个十分美丽的中文名称——“春天的旁边”,根据该框架官方网站提供的定义:SpringSide是以Spring Framework为核心的,Pragmatic风格的JavaEE应用参考示例,是JavaEE世界中的主流技术选型,最佳实践的总结与演示

    springside

    框架的作者将SpringSide描述为“Pragmatic Enterprise Application Kick-Start and Common Library Stack”,即务实风格的企业应用快速起点与通用库栈。SpringSide采用 ...

继续阅读

Python与Java的主要区别

原文链接:Python vs Java: Key Differences

Python and Java are two very different programming languages, but both can be useful tools for modern developers. If you are thinking about learning to program for the first time, then you might find ...

继续阅读