下载|安装|配置|更新

下载|安装|配置|更新

免费下载、安装与配置、新版发布等
Java EE开发

Java EE开发

Spring、WebSphere、Maven相关、EJB、JSP、XDoclet等
移动开发

移动开发

iOS、Android跨平台移动应用开发
SDC

SDC

新一代软件分发管理神器!支持MyEclipse、Eclipse、IntelliJ、WebStorm等热门IDE.
综合讨论区

综合讨论区

意见、吐槽、属于Java人的轻松乐园…

myeclipse8.5

回复

MyEclipse IDE公告xuling 发起了问题 • 2 人关注 • 0 个回复 • 155 次浏览 • 2015-11-03 20:41 • 来自相关话题

被公认为最好的Java开发平台之一IntelliJ IDEA最新发布2015版啦!欢迎围观下载

MyEclipse IDE公告besy 发表了文章 • 0 个评论 • 147 次浏览 • 2015-11-03 16:29 • 来自相关话题

作为唯一可以和MyEclipse抗衡的另一款Java IDE,IntelliJ IDEA一直被公认为是最好的Java开发平台之一。

下面就一起来see一see 2015版都有哪些新变化:

## lambda调试 ##

如果你添加断点的行有lambda表达式的话,IDE会提示你具体在什么地方停止。当你使用Step Into或Run to Cursor,IDE会在相应的lambda表达式停止调试。

## 强制返回 ##

有了新的调试器操作Force Return,你可以强制从当前方法的返回,而不需执行任何其它指令。如果该方法返回一个值,你必须指定它。如果该方法有try-finally模块,你就可以选择是否执行它们。

## 改进测试UI ##

现在整个测试运行器工具窗口提供包括所有语言,完整的在线统计数据,垂直布局,测试结果历史记录和导出/导入操作的统一接口。

## 查找路径即时预览 ##

为了使“Find in Path”操作反应更灵敏,我们增加了一个预览选项卡来显示前100个实时查询结果。

[完整图文更新说明戳这里](http://www.evget.com/article/2015/11/3/22880.html) | [下载戳这里](http://www.evget.com/product/2992/download) 查看全部
作为唯一可以和MyEclipse抗衡的另一款Java IDE,IntelliJ IDEA一直被公认为是最好的Java开发平台之一。

下面就一起来see一see 2015版都有哪些新变化:

## lambda调试 ##

如果你添加断点的行有lambda表达式的话,IDE会提示你具体在什么地方停止。当你使用Step Into或Run to Cursor,IDE会在相应的lambda表达式停止调试。

## 强制返回 ##

有了新的调试器操作Force Return,你可以强制从当前方法的返回,而不需执行任何其它指令。如果该方法返回一个值,你必须指定它。如果该方法有try-finally模块,你就可以选择是否执行它们。

## 改进测试UI ##

现在整个测试运行器工具窗口提供包括所有语言,完整的在线统计数据,垂直布局,测试结果历史记录和导出/导入操作的统一接口。

## 查找路径即时预览 ##

为了使“Find in Path”操作反应更灵敏,我们增加了一个预览选项卡来显示前100个实时查询结果。

[完整图文更新说明戳这里](http://www.evget.com/article/2015/11/3/22880.html) | [下载戳这里](http://www.evget.com/product/2992/download)

【年终钜惠】MyEclipse个人授权全场8.5折!

MyEclipse IDE公告besy 发表了文章 • 0 个评论 • 72 次浏览 • 2015-11-02 11:47 • 来自相关话题

## 活动时间:11月1日-11月30日 ##
**MyEclipse个人授权全场8.5折促销!买3年以上还享额外优惠哦~**
[在线购买](http://www.myeclipsecn.com/buy/)>>

*在线下单后2-3个工作日内发货



一年一度的慧都年终促销隆重揭开帷幕,全场产品(个别产品除外)通选两款即可享全单8.5折,大疆无人机、iPhone 6S等豪华大礼满额就送,最热销的DevExpress、FastReport、Aspose等众多产品抄底价促销……活动期间关注 “慧都控件”微信公众号转发相关文章,还有代金券、现金红包等好礼相送!机不可失,时间有限,欢迎您的到来!活动详情:http://www.evget.com/zt/2015/promotion.html 查看全部
## 活动时间:11月1日-11月30日 ##
**MyEclipse个人授权全场8.5折促销!买3年以上还享额外优惠哦~**
[在线购买](http://www.myeclipsecn.com/buy/)>>

*在线下单后2-3个工作日内发货



一年一度的慧都年终促销隆重揭开帷幕,全场产品(个别产品除外)通选两款即可享全单8.5折,大疆无人机、iPhone 6S等豪华大礼满额就送,最热销的DevExpress、FastReport、Aspose等众多产品抄底价促销……活动期间关注 “慧都控件”微信公众号转发相关文章,还有代金券、现金红包等好礼相送!机不可失,时间有限,欢迎您的到来!活动详情:http://www.evget.com/zt/2015/promotion.html

项目引用:被引用的class或者xml找不到

回复

Java EE开发yunlian0621 发起了问题 • 1 人关注 • 0 个回复 • 14 次浏览 • 2015-10-27 16:26 • 来自相关话题

MyEclipse Spring集团授权促销【买就送iPhone 6 Plus】

回复

MyEclipse IDE公告besy 发起了问题 • 1 人关注 • 0 个回复 • 50 次浏览 • 2015-10-21 14:48 • 来自相关话题

Http preview服务器端口号修改

回复

下载|安装|配置|更新xiaowan 发起了问题 • 1 人关注 • 0 个回复 • 19 次浏览 • 2015-10-19 22:11 • 来自相关话题

我的电脑服务里找不到tomcat服务但任务管理器里却有进程

回复

下载|安装|配置|更新qqj1299737 发起了问题 • 1 人关注 • 0 个回复 • 13 次浏览 • 2015-10-15 16:59 • 来自相关话题

【附示例】Java 程 序 员 必 知 的 8 大 排 序

综合讨论区besy 发表了文章 • 0 个评论 • 231 次浏览 • 2015-10-15 11:26 • 来自相关话题

8种排序之间的关系:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 68.png)

## 1、直接插入排序 ##

(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

(2)实例

![请输入图片名称](http://my.csdn.net/uploads/201 ... 87.png)

(3)用java实现

{{{
package com.njue;

public class insertSort {
public insertSort(){
inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=1;i<a.length;i++){
int j=i-1;
temp=a[i];
for(;j>=0&&temp<a[j];j--){
a[j+1]=a[j]; //将大于temp的值整体后移一个单位
}
a[j+1]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 2、希尔排序(最小增量排序) ##

(1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 15.png)

(3)用java实现

{{{
public class shellSort {
public shellSort(){
int a[]={1,54,6,3,78,34,12,45,56,100};
double d1=a.length;
int temp=0;
while(true){
d1= Math.ceil(d1/2);
int d=(int) d1;
for(int x=0;x<d;x++){
for(int i=x+d;i<a.length;i+=d){
int j=i-d;
temp=a[i];
for(;j>=0&&temp<a[j];j-=d){
a[j+d]=a[j];
}
a[j+d]=temp;
}
}
if(d==1)
break;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 3.简单选择排序 ##

(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;

然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 19.png)

(3)用java实现

{{{
public class selectSort {
public selectSort(){
int a[]={1,54,6,3,78,34,12,45};
int position=0;
for(int i=0;i<a.length;i++){

int j=i+1;
position=i;
int temp=a[i];
for(;j<a.length;j++){
if(a[j]<temp){
temp=a[j];
position=j;
}
}
a[position]=a[i];
a[i]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 4、 堆排序 ##

(1)基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。

堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。完全二叉树可以很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

(2)实例:

初始序列:46,79,56,38,40,84

建堆:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 48.png)

交换,从堆中踢出最大数

![请输入图片名称](http://my.csdn.net/uploads/201 ... 47.png)

![请输入图片名称](http://my.csdn.net/uploads/201 ... 88.png)

依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。

(3)用java实现

{{{
import java.util.Arrays;

public class HeapSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public HeapSort(){
heapSort(a);
}
public void heapSort(int[] a){
System.out.println("开始排序");
int arrayLength=a.length;
//循环建堆
for(int i=0;i<arrayLength-1;i++){
//建堆

buildMaxHeap(a,arrayLength-1-i);
//交换堆顶和最后一个元素
swap(a,0,arrayLength-1-i);
System.out.println(Arrays.toString(a));
}
}

private void swap(int[] data, int i, int j) {
// TODO Auto-generated method stub
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
//对data数组从0到lastIndex建大顶堆
private void buildMaxHeap(int[] data, int lastIndex) {
// TODO Auto-generated method stub
//从lastIndex处节点(最后一个节点)的父节点开始
for(int i=(lastIndex-1)/2;i>=0;i--){
//k保存正在判断的节点
int k=i;
//如果当前k节点的子节点存在
while(k*2+1<=lastIndex){
//k节点的左子节点的索引
int biggerIndex=2*k+1;
//如果biggerIndex小于lastIndex,即biggerIndex+1代表的k节点的右子节点存在
if(biggerIndex<lastIndex){
//若果右子节点的值较大
if(data[biggerIndex]<data[biggerIndex+1]){
//biggerIndex总是记录较大子节点的索引
biggerIndex++;
}
}
//如果k节点的值小于其较大的子节点的值
if(data[k]<data[biggerIndex]){
//交换他们
swap(data,k,biggerIndex);
//将biggerIndex赋予k,开始while循环的下一次循环,重新保证k节点的值大于其左右子节点的值
k=biggerIndex;
}else{
break;
}
}<p align="left">&nbsp;<span> </span>}</p><p align="left">&nbsp;&nbsp;&nbsp; }</p><p align="left">&nbsp;<span style="background-color: white; ">}</span></p>

}}}

## 5.冒泡排序 ##

(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 67.png)

(3)用java实现

{{{
public class bubbleSort {
public bubbleSort(){
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}

}}}

## 6.快速排序 ##

(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 95.png)

(3)用java实现

{{{
public class quickSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public quickSort(){
quick(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; //数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {

high--;
}
list[low] = list[high]; //比中轴小的记录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; //比中轴大的记录移到高端
}
list[low] = tmp; //中轴记录到尾
return low; //返回中轴的位置
}
public void _quickSort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); //将list数组进行一分为二
_quickSort(list, low, middle - 1); //对低字表进行递归排序
_quickSort(list, middle + 1, high); //对高字表进行递归排序
}
}
public void quick(int[] a2) {
if (a2.length > 0) { //查看数组是否为空
_quickSort(a2, 0, a2.length - 1);
}
}
}
}}}

## 7、归并排序 ##

(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 91.png)

(3)用java实现

{{{
import java.util.Arrays;

public class mergingSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public mergingSort(){
sort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public void sort(int[] data, int left, int right) {
// TODO Auto-generated method stub
if(left<right){
//找出中间索引
int center=(left+right)/2;
//对左边数组进行递归
sort(data,left,center);
//对右边数组进行递归
sort(data,center+1,right);
//合并
merge(data,left,center,right);

}
}
public void merge(int[] data, int left, int center, int right) {
// TODO Auto-generated method stub
int [] tmpArr=new int[data.length];
int mid=center+1;
//third记录中间数组的索引
int third=left;
int tmp=left;
while(left<=center&&mid<=right){

//从两个数组中取出最小的放入中间数组
if(data[left]<=data[mid]){
tmpArr[third++]=data[left++];
}else{
tmpArr[third++]=data[mid++];
}
}
//剩余部分依次放入中间数组
while(mid<=right){
tmpArr[third++]=data[mid++];
}
while(left<=center){
tmpArr[third++]=data[left++];
}
//将中间数组中的内容复制回原数组
while(tmp<=right){
data[tmp]=tmpArr[tmp++];
}
System.out.println(Arrays.toString(data));
}

}
}}}

## 8、基数排序 ##

(1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 46.png)

(3)用java实现

{{{
import java.util.ArrayList;
import java.util.List;

public class radixSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51};
public radixSort(){
sort(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public void sort(int[] array){

//首先确定排序的趟数;
int max=array[0];
for(int i=1;i<array.length;i++){
if(array[i]>max){
max=array[i];
}
}

int time=0;
//判断位数;
while(max>0){
max/=10;
time++;
}

//建立10个队列;
List<ArrayList> queue=new ArrayList<ArrayList>();
for(int i=0;i<10;i++){
ArrayList<Integer> queue1=new ArrayList<Integer>();
queue.add(queue1);
}

//进行time次分配和收集;
for(int i=0;i<time;i++){

//分配数组元素;
for(int j=0;j<array.length;j++){
//得到数字的第time+1位数;
int x=array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
ArrayList<Integer> queue2=queue.get(x);
queue2.add(array[j]);
queue.set(x, queue2);
}
int count=0;//元素计数器;
//收集队列元素;
for(int k=0;k<10;k++){
while(queue.get(k).size()>0){
ArrayList<Integer> queue3=queue.get(k);
array[count]=queue3.get(0);
queue3.remove(0);
count++;
}
}
}
}

}
}}}

原文出处:http://blog.csdn.net/without08 ... 97916 查看全部
8种排序之间的关系:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 68.png)

## 1、直接插入排序 ##

(1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排

好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数

也是排好顺序的。如此反复循环,直到全部排好顺序。

(2)实例

![请输入图片名称](http://my.csdn.net/uploads/201 ... 87.png)

(3)用java实现

{{{
package com.njue;

public class insertSort {
public insertSort(){
inta[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=1;i<a.length;i++){
int j=i-1;
temp=a[i];
for(;j>=0&&temp<a[j];j--){
a[j+1]=a[j]; //将大于temp的值整体后移一个单位
}
a[j+1]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 2、希尔排序(最小增量排序) ##

(1)基本思想:算法先将要排序的一组数按某个增量d(n/2,n为要排序数的个数)分成若干组,每组中记录的下标相差d.对每组中全部元素进行直接插入排序,然后再用一个较小的增量(d/2)对它进行分组,在每组中再进行直接插入排序。当增量减到1时,进行直接插入排序后,排序完成。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 15.png)

(3)用java实现

{{{
public class shellSort {
public shellSort(){
int a[]={1,54,6,3,78,34,12,45,56,100};
double d1=a.length;
int temp=0;
while(true){
d1= Math.ceil(d1/2);
int d=(int) d1;
for(int x=0;x<d;x++){
for(int i=x+d;i<a.length;i+=d){
int j=i-d;
temp=a[i];
for(;j>=0&&temp<a[j];j-=d){
a[j+d]=a[j];
}
a[j+d]=temp;
}
}
if(d==1)
break;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 3.简单选择排序 ##

(1)基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;

然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 19.png)

(3)用java实现

{{{
public class selectSort {
public selectSort(){
int a[]={1,54,6,3,78,34,12,45};
int position=0;
for(int i=0;i<a.length;i++){

int j=i+1;
position=i;
int temp=a[i];
for(;j<a.length;j++){
if(a[j]<temp){
temp=a[j];
position=j;
}
}
a[position]=a[i];
a[i]=temp;
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}
}}}

## 4、 堆排序 ##

(1)基本思想:堆排序是一种树形选择排序,是对直接选择排序的有效改进。

堆的定义如下:具有n个元素的序列(h1,h2,...,hn),当且仅当满足(hi>=h2i,hi>=2i+1)或(hi<=h2i,hi<=2i+1)(i=1,2,...,n/2)时称之为堆。在这里只讨论满足前者条件的堆。由堆的定义可以看出,堆顶元素(即第一个元素)必为最大项(大顶堆)。完全二叉树可以很直观地表示堆的结构。堆顶为根,其它为左子树、右子树。初始时把要排序的数的序列看作是一棵顺序存储的二叉树,调整它们的存储序,使之成为一个堆,这时堆的根节点的数最大。然后将根节点与堆的最后一个节点交换。然后对前面(n-1)个数重新调整使之成为堆。依此类推,直到只有两个节点的堆,并对它们作交换,最后得到有n个节点的有序序列。从算法描述来看,堆排序需要两个过程,一是建立堆,二是堆顶与堆的最后一个元素交换位置。所以堆排序有两个函数组成。一是建堆的渗透函数,二是反复调用渗透函数实现排序的函数。

(2)实例:

初始序列:46,79,56,38,40,84

建堆:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 48.png)

交换,从堆中踢出最大数

![请输入图片名称](http://my.csdn.net/uploads/201 ... 47.png)

![请输入图片名称](http://my.csdn.net/uploads/201 ... 88.png)

依次类推:最后堆中剩余的最后两个结点交换,踢出一个,排序完成。

(3)用java实现

{{{
import java.util.Arrays;

public class HeapSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public HeapSort(){
heapSort(a);
}
public void heapSort(int[] a){
System.out.println("开始排序");
int arrayLength=a.length;
//循环建堆
for(int i=0;i<arrayLength-1;i++){
//建堆

buildMaxHeap(a,arrayLength-1-i);
//交换堆顶和最后一个元素
swap(a,0,arrayLength-1-i);
System.out.println(Arrays.toString(a));
}
}

private void swap(int[] data, int i, int j) {
// TODO Auto-generated method stub
int tmp=data[i];
data[i]=data[j];
data[j]=tmp;
}
//对data数组从0到lastIndex建大顶堆
private void buildMaxHeap(int[] data, int lastIndex) {
// TODO Auto-generated method stub
//从lastIndex处节点(最后一个节点)的父节点开始
for(int i=(lastIndex-1)/2;i>=0;i--){
//k保存正在判断的节点
int k=i;
//如果当前k节点的子节点存在
while(k*2+1<=lastIndex){
//k节点的左子节点的索引
int biggerIndex=2*k+1;
//如果biggerIndex小于lastIndex,即biggerIndex+1代表的k节点的右子节点存在
if(biggerIndex<lastIndex){
//若果右子节点的值较大
if(data[biggerIndex]<data[biggerIndex+1]){
//biggerIndex总是记录较大子节点的索引
biggerIndex++;
}
}
//如果k节点的值小于其较大的子节点的值
if(data[k]<data[biggerIndex]){
//交换他们
swap(data,k,biggerIndex);
//将biggerIndex赋予k,开始while循环的下一次循环,重新保证k节点的值大于其左右子节点的值
k=biggerIndex;
}else{
break;
}
}<p align="left">&nbsp;<span> </span>}</p><p align="left">&nbsp;&nbsp;&nbsp; }</p><p align="left">&nbsp;<span style="background-color: white; ">}</span></p>

}}}

## 5.冒泡排序 ##

(1)基本思想:在要排序的一组数中,对当前还未排好序的范围内的全部数,自上而下对相邻的两个数依次进行比较和调整,让较大的数往下沉,较小的往上冒。即:每当两相邻的数比较后发现它们的排序与排序要求相反时,就将它们互换。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 67.png)

(3)用java实现

{{{
public class bubbleSort {
public bubbleSort(){
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
int temp=0;
for(int i=0;i<a.length-1;i++){
for(int j=0;j<a.length-1-i;j++){
if(a[j]>a[j+1]){
temp=a[j];
a[j]=a[j+1];
a[j+1]=temp;
}
}
}
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
}

}}}

## 6.快速排序 ##

(1)基本思想:选择一个基准元素,通常选择第一个元素或者最后一个元素,通过一趟扫描,将待排序列分成两部分,一部分比基准元素小,一部分大于等于基准元素,此时基准元素在其排好序后的正确位置,然后再用同样的方法递归地排序划分的两部分。

(2)实例:

![请输入图片名称](http://my.csdn.net/uploads/201 ... 95.png)

(3)用java实现

{{{
public class quickSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public quickSort(){
quick(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public int getMiddle(int[] list, int low, int high) {
int tmp = list[low]; //数组的第一个作为中轴
while (low < high) {
while (low < high && list[high] >= tmp) {

high--;
}
list[low] = list[high]; //比中轴小的记录移到低端
while (low < high && list[low] <= tmp) {
low++;
}
list[high] = list[low]; //比中轴大的记录移到高端
}
list[low] = tmp; //中轴记录到尾
return low; //返回中轴的位置
}
public void _quickSort(int[] list, int low, int high) {
if (low < high) {
int middle = getMiddle(list, low, high); //将list数组进行一分为二
_quickSort(list, low, middle - 1); //对低字表进行递归排序
_quickSort(list, middle + 1, high); //对高字表进行递归排序
}
}
public void quick(int[] a2) {
if (a2.length > 0) { //查看数组是否为空
_quickSort(a2, 0, a2.length - 1);
}
}
}
}}}

## 7、归并排序 ##

(1)基本排序:归并(Merge)排序法是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的。然后再把有序子序列合并为整体有序序列。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 91.png)

(3)用java实现

{{{
import java.util.Arrays;

public class mergingSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,56,17,18,23,34,15,35,25,53,51};
public mergingSort(){
sort(a,0,a.length-1);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public void sort(int[] data, int left, int right) {
// TODO Auto-generated method stub
if(left<right){
//找出中间索引
int center=(left+right)/2;
//对左边数组进行递归
sort(data,left,center);
//对右边数组进行递归
sort(data,center+1,right);
//合并
merge(data,left,center,right);

}
}
public void merge(int[] data, int left, int center, int right) {
// TODO Auto-generated method stub
int [] tmpArr=new int[data.length];
int mid=center+1;
//third记录中间数组的索引
int third=left;
int tmp=left;
while(left<=center&&mid<=right){

//从两个数组中取出最小的放入中间数组
if(data[left]<=data[mid]){
tmpArr[third++]=data[left++];
}else{
tmpArr[third++]=data[mid++];
}
}
//剩余部分依次放入中间数组
while(mid<=right){
tmpArr[third++]=data[mid++];
}
while(left<=center){
tmpArr[third++]=data[left++];
}
//将中间数组中的内容复制回原数组
while(tmp<=right){
data[tmp]=tmpArr[tmp++];
}
System.out.println(Arrays.toString(data));
}

}
}}}

## 8、基数排序 ##

(1)基本思想:将所有待比较数值(正整数)统一为同样的数位长度,数位较短的数前面补零。然后,从最低位开始,依次进行一次排序。这样从最低位排序一直到最高位排序完成以后,数列就变成一个有序序列。

(2)实例:
![请输入图片名称](http://my.csdn.net/uploads/201 ... 46.png)

(3)用java实现

{{{
import java.util.ArrayList;
import java.util.List;

public class radixSort {
int a[]={49,38,65,97,76,13,27,49,78,34,12,64,5,4,62,99,98,54,101,56,17,18,23,34,15,35,25,53,51};
public radixSort(){
sort(a);
for(int i=0;i<a.length;i++)
System.out.println(a[i]);
}
public void sort(int[] array){

//首先确定排序的趟数;
int max=array[0];
for(int i=1;i<array.length;i++){
if(array[i]>max){
max=array[i];
}
}

int time=0;
//判断位数;
while(max>0){
max/=10;
time++;
}

//建立10个队列;
List<ArrayList> queue=new ArrayList<ArrayList>();
for(int i=0;i<10;i++){
ArrayList<Integer> queue1=new ArrayList<Integer>();
queue.add(queue1);
}

//进行time次分配和收集;
for(int i=0;i<time;i++){

//分配数组元素;
for(int j=0;j<array.length;j++){
//得到数字的第time+1位数;
int x=array[j]%(int)Math.pow(10, i+1)/(int)Math.pow(10, i);
ArrayList<Integer> queue2=queue.get(x);
queue2.add(array[j]);
queue.set(x, queue2);
}
int count=0;//元素计数器;
//收集队列元素;
for(int k=0;k<10;k++){
while(queue.get(k).size()>0){
ArrayList<Integer> queue3=queue.get(k);
array[count]=queue3.get(0);
queue3.remove(0);
count++;
}
}
}
}

}
}}}

原文出处:http://blog.csdn.net/without08 ... 97916

【干货分享】Java那些不为人知的特殊方法

综合讨论区besy 发表了文章 • 0 个评论 • 128 次浏览 • 2015-10-14 16:01 • 来自相关话题

如果你用过反射并且执行过getDeclaredMethods方法的话,你可能会感到很吃惊。你会发现出现了很多源代码里没有的方法。如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatile的。顺便说一句,如果在Java面试里问到“什么是volatile方法?”,你可能会吓出一身冷汗。正确的答案是没有volatile方法。但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。

immutator的一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人知的细节)生成的Java代码使用volatile了作为方法的关键字,而这样的代码没法通过编译。结果就是这根本没法用。

这是怎么回事?syntethic和bridge方法又是什么?
可见性

当你创建一个嵌套类的时候,它的私有变量和方法对上层的类是可见的。这个在不可变嵌套式Builder模式中用到了。这是Java语言规范里已经定义好的一个行为。

{{{package synthetic;

public class SyntheticMethodTest1 {
private A aObj = new A();

public class A {
private int i;
}

private class B {
private int i = aObj.i;
}

public static void main(String[] args) {
SyntheticMethodTest1 me = new SyntheticMethodTest1();
me.aObj.i = 1;
B bObj = me.new B();
System.out.println(bObj.i);
}
}}}}

JVM是如何处理这个的?它可不知道什么是内部类或者嵌套类的。JVM对所有的类都一视同仁,它都认为是顶级类。所有类都会被编译成顶级类,而那些内部类编译完后会生成...$... class的类文件。

{{{$ ls -Fart
../ SyntheticMethodTest2$A.class MyClass.java SyntheticMethodTest4.java SyntheticMethodTest2.java
SyntheticMethodTest2.class SyntheticMethodTest3.java ./ MyClassSon.java SyntheticMethodTest1.java}}}

如果你创建一个内部类的话,它会被彻底编译成一个顶级类。

那这些私有变量又是如何被外部类访问的呢?如果它们是个顶级类的私有变量(它们的确也是),那为什么别的类还能直接访问这些变量?

javac是这样解决这个问题的,对于任何private的字段,方法或者构造函数,如果它们也被其它顶层类所使用,就会生成一个synthetic方法。这些synthetic方法是用来访问最初的私有变量/方法/构造函数的。这些方法的生成也很智能:只有确实被外部类用到了,才会生成这样的方法。

{{{package synthetic;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class SyntheticMethodTest2 {

public static class A {
private A(){}
private int x;
private void x(){};
}

public static void main(String[] args) {
A a = new A();
a.x = 2;
a.x();
System.out.println(a.x);
for (Method m : A.class.getDeclaredMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getName());
}
System.out.println("--------------------------");
for (Method m : A.class.getMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getReturnType().getSimpleName() + " " + m.getName());
}
System.out.println("--------------------------");
for( Constructor<?> c : A.class.getDeclaredConstructors() ){
System.out.println(String.format("X", c.getModifiers()) + " " + c.getName());
}
}
} }}}

这些生成的方法的名字取决于具体的实现,最后叫什么也不好说。我只能说在我运行的这个平台上,上述程序的输出是这样的:

{{{2
00001008 access$1
00001008 access$2
00001008 access$3
00000002 x
--------------------------
00000111 void wait
00000011 void wait
00000011 void wait
00000001 boolean equals
00000001 String toString
00000101 int hashCode
00000111 Class getClass
00000111 void notify
00000111 void notifyAll
--------------------------
00000002 synthetic.SyntheticMethodTest2$A
00001000 synthetic.SyntheticMethodTest2$A }}}

在上面这个程序中,我们给变量x赋值,然后又调用了一个同名的方法。这会触发编译器生成对应的synthetic方法。你会看到它生成了三个方法,应该是x变量的setter和getter方法,以及x()方法对应的一个synthetic方法。这些方法并不存在于getMethods方法里返回的列表中,因为它们是synthetic方法,是不能直接被调用的。从这点来看,它们和私有方法差不多。

看一下java.lang.reflect.Modifier里面定义的常量,可以明白这些十六进制的数字代表的是什么:

{{{00001008 SYNTHETIC|STATIC
00000002 PRIVATE
00000111 NATIVE|FINAL|PUBLIC
00000011 FINAL|PUBLIC
00000001 PUBLIC
00001000 SYNTHETIC }}}

列表中有两个是构造方法。还有一个私有方法以及一个synthetic方法。存在这个私有方法是因为我们确实定义了它。而synthetic方法的出现是因为我们从外部类调用了它内部的私有成员。到目前为止,还没有出现过bridge方法。
泛型和继承

到目前为止,看起来还不错。不过我们还没有看到”volatile”方法。

看一下java.lang.reflect.Modifier的源码你会发现0x00000040这个常量被定义了两次。一次是定义成VOLATILE,还有一次是BRIDGE(后者是包内部私有的,并不对外开放)。

想出现volatile方法的话,写个简单的程序就行了:

{{{package synthetic;

import java.lang.reflect.Method;
import java.util.LinkedList;

public class SyntheticMethodTest3 {

public static class MyLink extends LinkedList<String> {
@Override
public String get(int i) {
return "";
}
}

public static void main(String[] args) {

for (Method m : MyLink.class.getDeclaredMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getReturnType().getSimpleName() + " " + m.getName());
}
}
}}}}

这个链表有一个返回String的get(int)方法。先别讨论代码整不整洁的问题了。这只是段示例代码而已。整洁的代码当然也会出现同样的问题,不过越复杂的代码越难定位问题罢了。

输出的结果是这样的:

{{{00000001 String get
00001041 Object get }}}

这里有两个get方法。一个是代码里的那个,另外一个是synthetic和bridge方法。用javap反编译后会是这样的:

{{{public java.lang.String get(int);
Code:
Stack=1, Locals=2, Args_size=2
0: ldc #2; //String
2: areturn
LineNumberTable:
line 12: 0

public java.lang.Object get(int);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: iload_1
2: invokevirtual #3; //Method get:(I)Ljava/lang/String;
5: areturn}}}

有趣的是,两个方法的签名是一模一样的,只有返回类型不同。这个在JVM里面是合法的,不过在Java语言里可不允许。bridge的这个方法不干别的,就只是去调用了下原始的那个方法。

为什么我们需要这个synthetic方法呢,谁会调用它?比如现在有段代码想要调用一个非MyLink类型变量的get(int)方法:

{{{List<?> a = new MyLink();
Object z = a.get(0); }}}

它不能调用返回String的方法,因为List里没这样的方法。为了解释的更清楚一点,我们重写下add方法而不是get方法:

{{{package synthetic;

import java.util.LinkedList;
import java.util.List;

public class SyntheticMethodTest4 {

public static class MyLink extends LinkedList<String> {
@Override
public boolean add(String s) {
return true;
}
}

public static void main(String[] args) {
List a = new MyLink();
a.add("");
a.add(13);
}
} }}}

我们会发现这个bridge方法

{{{public boolean add(java.lang.Object);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: aload_1
2: checkcast #2; //class java/lang/String
5: invokevirtual #3; //Method add:(Ljava/lang/String;)Z
8: ireturn }}}

它不仅调用了原始的方法,它还进行了类型检查。这个检查是在运行时进行的,并不是由JVM自己来完成。正如你所想,在18行的地方会抛出一个异常:

{{{Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at synthetic.SyntheticMethodTest4$MyLink.add(SyntheticMethodTest4.java:1)
at synthetic.SyntheticMethodTest4.main(SyntheticMethodTest4.java:18) }}}

下次如果你在面试中被问到volatile方法的话,说不定面试官知道的还没你多:-)

译者注:其实作者说到最后也没讲完到底什么是volatile方法,其实volatile方法如篇首所说,是不存在的,所谓的volatile方法就是指bridge方法。由于在修饰符中volatile和bridge是同一个值,在之前版本的javap中存在一个BUG,一个bridge方法在反编译后会显示成volatile,所以存在”volatile方法”的说法。

原创文章转载请注明出处:[Java那些不为人知的特殊方法](http://it.deepinmind.com/java/ ... 5.html)

[英文原文链接](http://www.javacodegeeks.com/2 ... s.html) 查看全部
如果你用过反射并且执行过getDeclaredMethods方法的话,你可能会感到很吃惊。你会发现出现了很多源代码里没有的方法。如果你看一下这些方法的修饰符的话,可能会发现里面有些方法是volatile的。顺便说一句,如果在Java面试里问到“什么是volatile方法?”,你可能会吓出一身冷汗。正确的答案是没有volatile方法。但同时,getDeclaredMethods()或者getMethods()返回的这些方法,Modifier.isVolatile(method.getModifiers())的结果却是true。

immutator的一些用户遇到过这样的问题。他们发现,使用immutator(这个项目探索了Java的一些不为人知的细节)生成的Java代码使用volatile了作为方法的关键字,而这样的代码没法通过编译。结果就是这根本没法用。

这是怎么回事?syntethic和bridge方法又是什么?
可见性

当你创建一个嵌套类的时候,它的私有变量和方法对上层的类是可见的。这个在不可变嵌套式Builder模式中用到了。这是Java语言规范里已经定义好的一个行为。

{{{package synthetic;

public class SyntheticMethodTest1 {
private A aObj = new A();

public class A {
private int i;
}

private class B {
private int i = aObj.i;
}

public static void main(String[] args) {
SyntheticMethodTest1 me = new SyntheticMethodTest1();
me.aObj.i = 1;
B bObj = me.new B();
System.out.println(bObj.i);
}
}}}}

JVM是如何处理这个的?它可不知道什么是内部类或者嵌套类的。JVM对所有的类都一视同仁,它都认为是顶级类。所有类都会被编译成顶级类,而那些内部类编译完后会生成...$... class的类文件。

{{{$ ls -Fart
../ SyntheticMethodTest2$A.class MyClass.java SyntheticMethodTest4.java SyntheticMethodTest2.java
SyntheticMethodTest2.class SyntheticMethodTest3.java ./ MyClassSon.java SyntheticMethodTest1.java}}}

如果你创建一个内部类的话,它会被彻底编译成一个顶级类。

那这些私有变量又是如何被外部类访问的呢?如果它们是个顶级类的私有变量(它们的确也是),那为什么别的类还能直接访问这些变量?

javac是这样解决这个问题的,对于任何private的字段,方法或者构造函数,如果它们也被其它顶层类所使用,就会生成一个synthetic方法。这些synthetic方法是用来访问最初的私有变量/方法/构造函数的。这些方法的生成也很智能:只有确实被外部类用到了,才会生成这样的方法。

{{{package synthetic;

import java.lang.reflect.Constructor;
import java.lang.reflect.Method;

public class SyntheticMethodTest2 {

public static class A {
private A(){}
private int x;
private void x(){};
}

public static void main(String[] args) {
A a = new A();
a.x = 2;
a.x();
System.out.println(a.x);
for (Method m : A.class.getDeclaredMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getName());
}
System.out.println("--------------------------");
for (Method m : A.class.getMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getReturnType().getSimpleName() + " " + m.getName());
}
System.out.println("--------------------------");
for( Constructor<?> c : A.class.getDeclaredConstructors() ){
System.out.println(String.format("X", c.getModifiers()) + " " + c.getName());
}
}
} }}}

这些生成的方法的名字取决于具体的实现,最后叫什么也不好说。我只能说在我运行的这个平台上,上述程序的输出是这样的:

{{{2
00001008 access$1
00001008 access$2
00001008 access$3
00000002 x
--------------------------
00000111 void wait
00000011 void wait
00000011 void wait
00000001 boolean equals
00000001 String toString
00000101 int hashCode
00000111 Class getClass
00000111 void notify
00000111 void notifyAll
--------------------------
00000002 synthetic.SyntheticMethodTest2$A
00001000 synthetic.SyntheticMethodTest2$A }}}

在上面这个程序中,我们给变量x赋值,然后又调用了一个同名的方法。这会触发编译器生成对应的synthetic方法。你会看到它生成了三个方法,应该是x变量的setter和getter方法,以及x()方法对应的一个synthetic方法。这些方法并不存在于getMethods方法里返回的列表中,因为它们是synthetic方法,是不能直接被调用的。从这点来看,它们和私有方法差不多。

看一下java.lang.reflect.Modifier里面定义的常量,可以明白这些十六进制的数字代表的是什么:

{{{00001008 SYNTHETIC|STATIC
00000002 PRIVATE
00000111 NATIVE|FINAL|PUBLIC
00000011 FINAL|PUBLIC
00000001 PUBLIC
00001000 SYNTHETIC }}}

列表中有两个是构造方法。还有一个私有方法以及一个synthetic方法。存在这个私有方法是因为我们确实定义了它。而synthetic方法的出现是因为我们从外部类调用了它内部的私有成员。到目前为止,还没有出现过bridge方法。
泛型和继承

到目前为止,看起来还不错。不过我们还没有看到”volatile”方法。

看一下java.lang.reflect.Modifier的源码你会发现0x00000040这个常量被定义了两次。一次是定义成VOLATILE,还有一次是BRIDGE(后者是包内部私有的,并不对外开放)。

想出现volatile方法的话,写个简单的程序就行了:

{{{package synthetic;

import java.lang.reflect.Method;
import java.util.LinkedList;

public class SyntheticMethodTest3 {

public static class MyLink extends LinkedList<String> {
@Override
public String get(int i) {
return "";
}
}

public static void main(String[] args) {

for (Method m : MyLink.class.getDeclaredMethods()) {
System.out.println(String.format("X", m.getModifiers()) + " " + m.getReturnType().getSimpleName() + " " + m.getName());
}
}
}}}}

这个链表有一个返回String的get(int)方法。先别讨论代码整不整洁的问题了。这只是段示例代码而已。整洁的代码当然也会出现同样的问题,不过越复杂的代码越难定位问题罢了。

输出的结果是这样的:

{{{00000001 String get
00001041 Object get }}}

这里有两个get方法。一个是代码里的那个,另外一个是synthetic和bridge方法。用javap反编译后会是这样的:

{{{public java.lang.String get(int);
Code:
Stack=1, Locals=2, Args_size=2
0: ldc #2; //String
2: areturn
LineNumberTable:
line 12: 0

public java.lang.Object get(int);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: iload_1
2: invokevirtual #3; //Method get:(I)Ljava/lang/String;
5: areturn}}}

有趣的是,两个方法的签名是一模一样的,只有返回类型不同。这个在JVM里面是合法的,不过在Java语言里可不允许。bridge的这个方法不干别的,就只是去调用了下原始的那个方法。

为什么我们需要这个synthetic方法呢,谁会调用它?比如现在有段代码想要调用一个非MyLink类型变量的get(int)方法:

{{{List<?> a = new MyLink();
Object z = a.get(0); }}}

它不能调用返回String的方法,因为List里没这样的方法。为了解释的更清楚一点,我们重写下add方法而不是get方法:

{{{package synthetic;

import java.util.LinkedList;
import java.util.List;

public class SyntheticMethodTest4 {

public static class MyLink extends LinkedList<String> {
@Override
public boolean add(String s) {
return true;
}
}

public static void main(String[] args) {
List a = new MyLink();
a.add("");
a.add(13);
}
} }}}

我们会发现这个bridge方法

{{{public boolean add(java.lang.Object);
Code:
Stack=2, Locals=2, Args_size=2
0: aload_0
1: aload_1
2: checkcast #2; //class java/lang/String
5: invokevirtual #3; //Method add:(Ljava/lang/String;)Z
8: ireturn }}}

它不仅调用了原始的方法,它还进行了类型检查。这个检查是在运行时进行的,并不是由JVM自己来完成。正如你所想,在18行的地方会抛出一个异常:

{{{Exception in thread "main" java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
at synthetic.SyntheticMethodTest4$MyLink.add(SyntheticMethodTest4.java:1)
at synthetic.SyntheticMethodTest4.main(SyntheticMethodTest4.java:18) }}}

下次如果你在面试中被问到volatile方法的话,说不定面试官知道的还没你多:-)

译者注:其实作者说到最后也没讲完到底什么是volatile方法,其实volatile方法如篇首所说,是不存在的,所谓的volatile方法就是指bridge方法。由于在修饰符中volatile和bridge是同一个值,在之前版本的javap中存在一个BUG,一个bridge方法在反编译后会显示成volatile,所以存在”volatile方法”的说法。

原创文章转载请注明出处:[Java那些不为人知的特殊方法](http://it.deepinmind.com/java/ ... 5.html)

[英文原文链接](http://www.javacodegeeks.com/2 ... s.html)

SmileMiner:国人李海峰开发的开源Java机器学习库

综合讨论区besy 发表了文章 • 0 个评论 • 195 次浏览 • 2015-10-10 09:33 • 来自相关话题

**SmileMiner**是一个汇集了各种机器学习算法的纯Java函数库,它是自包含的,仅仅需要Java标准库。主要部件为:Smile,-Math,-Data,-Graph,-Interpolation,-NLP。不可多得的Java机器学习库,其文档和示例都挺赞!

链接:[https://github.com/haifengl/smile](https://github.com/haifengl/smile)

![请输入图片名称](http://img.blog.csdn.net/20151010083309813) 查看全部
**SmileMiner**是一个汇集了各种机器学习算法的纯Java函数库,它是自包含的,仅仅需要Java标准库。主要部件为:Smile,-Math,-Data,-Graph,-Interpolation,-NLP。不可多得的Java机器学习库,其文档和示例都挺赞!

链接:[https://github.com/haifengl/smile](https://github.com/haifengl/smile)

![请输入图片名称](http://img.blog.csdn.net/20151010083309813)

求助!使用myeclipse2015 引号自动补全无法关闭!

回复

下载|安装|配置|更新dickey_910 发起了问题 • 1 人关注 • 0 个回复 • 19 次浏览 • 2015-10-04 13:21 • 来自相关话题

myeclipse2015stable 新建webproject 目录下多了几个配置文件

回复

综合讨论区Abdu 发起了问题 • 1 人关注 • 0 个回复 • 15 次浏览 • 2015-09-27 09:01 • 来自相关话题

神器推荐!团队软件分发管理从此不用愁!

综合讨论区besy 发表了文章 • 0 个评论 • 96 次浏览 • 2015-09-23 17:04 • 来自相关话题

## 它能帮你实现 ##

统一安装软件

统一安装插件

统一部署配置

统一授权维护

统一工具堆栈

让团队成员保持同步


## 它支持这些软件 ##

Eclipse

MyEclipse

IntelliJ IDEA

WebStorm

……


它大名叫

## Secure Delivery Center ##


小名叫

## SDC ##


**一张图让你了解它的与众不同:**









快快来[下载体验SDC神器](http://www.myeclipsecn.com/download)!!!
另友情赠送MyEclipse官方中文网精(tu)心(xie)译制整理的[中文版SDC入门文档pdf版](http://www.myeclipsecn.com/dem ... .1.pdf)

如果你觉得有用欢迎分享给更多小伙伴~ 查看全部
## 它能帮你实现 ##

统一安装软件

统一安装插件

统一部署配置

统一授权维护

统一工具堆栈

让团队成员保持同步


## 它支持这些软件 ##

Eclipse

MyEclipse

IntelliJ IDEA

WebStorm

……


它大名叫

## Secure Delivery Center ##


小名叫

## SDC ##


**一张图让你了解它的与众不同:**


me-rollout.png




快快来[下载体验SDC神器](http://www.myeclipsecn.com/download)!!!
另友情赠送MyEclipse官方中文网精(tu)心(xie)译制整理的[中文版SDC入门文档pdf版](http://www.myeclipsecn.com/dem ... .1.pdf)

如果你觉得有用欢迎分享给更多小伙伴~

MyEclipse2014编辑jsp或html时特别卡,这是为什么,怎么破?

回复

Java EE开发JoeyBruce 发起了问题 • 1 人关注 • 0 个回复 • 37 次浏览 • 2015-09-13 11:50 • 来自相关话题

只为更优秀的你!送书活动继续 ↑ ↑ ↑

回复

MyEclipse IDE公告besy 发起了问题 • 1 人关注 • 0 个回复 • 31 次浏览 • 2015-09-08 16:24 • 来自相关话题

良心推荐:帮程序员减压放松的10个网站

综合讨论区besy 发表了文章 • 0 个评论 • 162 次浏览 • 2015-09-06 15:48 • 来自相关话题

同学们工作之余,不妨放下微博跟朋友圈,来这10个网站感受一下看着就醉了的情境.今天推荐的网站,利用代入感强的图片与音频,迅速帮你抹平焦虑,获得平和心态,特别献给常常加班的程序员们。

[Calm](http://www.calm.com/)

这是同类型中最火的网站了,站如其名,「平和」,通过自然的图像(阳光下的暖流、淙淙的小溪等)与缓缓的音乐,帮你在短时间内放松下来。

左侧有时间设定,从 2 分钟到 20 分钟,右底部可以改变音频、图像,调节音量等。还有 IOS 客户端下载呦。


[Do Nothing For 2 Minutes](http://www.donothingfor2minutes.com/)
「木头人,两分钟」,这是一个简单到极致的网站,当你打开的时候,自动开始计时,这时间你不能触碰键盘和鼠标,否则 2 分钟会重置。

你需要做的,就是放下手头的工作,静静地享受潮声,这也很棒,不是吗?两分钟足够你冷静下来,休息一下了。


[Get Relaxed](http://www.getrelaxed.com/)
如果两分钟不足以让你彻底放松,试试这个。如下图,打开网站后,头枕着双手往后仰,欣赏自然风光,聆听网站为你精心挑选的音乐。

图像 3 秒一换,有 15 种,每种持续大概 2 – 4 分钟,现在,开始吧!

提醒:网站有简陋广告,稍微影响体验。


[LoungeV Studio](http://www.loungev.com/)
前三个都是图像,现在来个新鲜的。这个网站提供高清的自然风光视频 + 音乐。有沙滩、瀑布、水下景色等等,网站背景是一个温馨的客厅,右侧有视频可选,对喜欢看视频的同学来说,还是蛮不错的。



[A Soft Murmur](http://asoftmurmur.com/)
这个网站太棒了!小编玩了好久都舍不得停下来。网站让你自由创造美妙的声音。你可以通过混合不同的声音(雨声、火柴燃烧的声音、打雷声、海潮声…..不一而足。但是,总有一款令你爱不释手!)当然,声音的大小也可以自己调节。

如果你对混合的声音非常满意,也可以分享到脸书、谷歌等….


[Nature Sounds For Me](http://naturesoundsfor.me/)
这个比上面那个界面稍逊,但是玩起来更嗨!它提供的声音除了以上的自然类声音,还有很多你想不到的:绵羊咩咩、骏马跺脚喷气、不同的鸟叫声,甚至是心脏跳动、厨房叮当的声音,不仅令人身临其境,而且搭配起来简直不能更欢乐!

当然,它还有 IOS 客户端。


[Noisli](http://www.noisli.com/)
这个网站根据你的情绪变化,选择不同的音乐和背景颜色。颜色大多朴素平和,背景声音也有对应的图标可以选择。还有一点贴心的设计是,网站右侧有便签本,你可以一边享受静谧时光一边随手记点事。

为了造福大众,网站还提供 IOS 版。



[Soundrown](http://soundrown.com/)
网站一进去,有 3 个关键词:放松、专注、逃离。的确,它成功做到了这一点。它有 10 种不同的声音帮助你放松心情,也可以混合使用。不同的声音对应不同的背景,网站非常有设计感,相信你会重新回来体验一次。



[The Thoughts Room](http://thequietplaceproject.com/)
一句话简洁:世界的秘密——树洞类网站。你可以在这里向全世界倾诉你的任何想法,网站支持 37 种语言,不过看了一下,没有中国…


[Raining.Fm](http://raining.fm/)
有时候,我们需要的仅仅是一点点雨声来帮助我们平静。网站专门提供雨声,因为单一,所以也更加专业。网站有 3 种不同的雨声类型,右侧有定时器可以在你放松时提醒你,简单也好用的一个网站,赞一个。



原文出处:http://www.uisdc.com/website-make-you-relax# 查看全部
同学们工作之余,不妨放下微博跟朋友圈,来这10个网站感受一下看着就醉了的情境.今天推荐的网站,利用代入感强的图片与音频,迅速帮你抹平焦虑,获得平和心态,特别献给常常加班的程序员们。

[Calm](http://www.calm.com/)

这是同类型中最火的网站了,站如其名,「平和」,通过自然的图像(阳光下的暖流、淙淙的小溪等)与缓缓的音乐,帮你在短时间内放松下来。

左侧有时间设定,从 2 分钟到 20 分钟,右底部可以改变音频、图像,调节音量等。还有 IOS 客户端下载呦。


[Do Nothing For 2 Minutes](http://www.donothingfor2minutes.com/)
「木头人,两分钟」,这是一个简单到极致的网站,当你打开的时候,自动开始计时,这时间你不能触碰键盘和鼠标,否则 2 分钟会重置。

你需要做的,就是放下手头的工作,静静地享受潮声,这也很棒,不是吗?两分钟足够你冷静下来,休息一下了。


[Get Relaxed](http://www.getrelaxed.com/)
如果两分钟不足以让你彻底放松,试试这个。如下图,打开网站后,头枕着双手往后仰,欣赏自然风光,聆听网站为你精心挑选的音乐。

图像 3 秒一换,有 15 种,每种持续大概 2 – 4 分钟,现在,开始吧!

提醒:网站有简陋广告,稍微影响体验。


[LoungeV Studio](http://www.loungev.com/)
前三个都是图像,现在来个新鲜的。这个网站提供高清的自然风光视频 + 音乐。有沙滩、瀑布、水下景色等等,网站背景是一个温馨的客厅,右侧有视频可选,对喜欢看视频的同学来说,还是蛮不错的。



[A Soft Murmur](http://asoftmurmur.com/)
这个网站太棒了!小编玩了好久都舍不得停下来。网站让你自由创造美妙的声音。你可以通过混合不同的声音(雨声、火柴燃烧的声音、打雷声、海潮声…..不一而足。但是,总有一款令你爱不释手!)当然,声音的大小也可以自己调节。

如果你对混合的声音非常满意,也可以分享到脸书、谷歌等….


[Nature Sounds For Me](http://naturesoundsfor.me/)
这个比上面那个界面稍逊,但是玩起来更嗨!它提供的声音除了以上的自然类声音,还有很多你想不到的:绵羊咩咩、骏马跺脚喷气、不同的鸟叫声,甚至是心脏跳动、厨房叮当的声音,不仅令人身临其境,而且搭配起来简直不能更欢乐!

当然,它还有 IOS 客户端。


[Noisli](http://www.noisli.com/)
这个网站根据你的情绪变化,选择不同的音乐和背景颜色。颜色大多朴素平和,背景声音也有对应的图标可以选择。还有一点贴心的设计是,网站右侧有便签本,你可以一边享受静谧时光一边随手记点事。

为了造福大众,网站还提供 IOS 版。



[Soundrown](http://soundrown.com/)
网站一进去,有 3 个关键词:放松、专注、逃离。的确,它成功做到了这一点。它有 10 种不同的声音帮助你放松心情,也可以混合使用。不同的声音对应不同的背景,网站非常有设计感,相信你会重新回来体验一次。



[The Thoughts Room](http://thequietplaceproject.com/)
一句话简洁:世界的秘密——树洞类网站。你可以在这里向全世界倾诉你的任何想法,网站支持 37 种语言,不过看了一下,没有中国…


[Raining.Fm](http://raining.fm/)
有时候,我们需要的仅仅是一点点雨声来帮助我们平静。网站专门提供雨声,因为单一,所以也更加专业。网站有 3 种不同的雨声类型,右侧有定时器可以在你放松时提醒你,简单也好用的一个网站,赞一个。



原文出处:http://www.uisdc.com/website-make-you-relax#

MyEclispe2015 for mac **成功之后,过来一会,出现闪退的情况

回复

下载|安装|配置|更新hu1991die 发起了问题 • 1 人关注 • 0 个回复 • 34 次浏览 • 2015-08-31 13:23 • 来自相关话题

java中委派时间处理机制

回复

综合讨论区cbypp 发起了问题 • 2 人关注 • 0 个回复 • 19 次浏览 • 2015-08-27 05:56 • 来自相关话题

各位这块菜单点击子菜单不出来该从哪里找起

回复

MyEclipse IDE公告童年的山丘 发起了问题 • 1 人关注 • 0 个回复 • 6 次浏览 • 2015-08-26 11:21 • 来自相关话题

我在myeclipse2015 swing中对一个JMenuItem进行鼠标事件操作的问题

回复

Java EE开发cbypp 发起了问题 • 1 人关注 • 0 个回复 • 15 次浏览 • 2015-08-24 20:41 • 来自相关话题

又一个Maven的问题

回复

下载|安装|配置|更新Montauk 发起了问题 • 1 人关注 • 0 个回复 • 42 次浏览 • 2015-08-19 18:03 • 来自相关话题

导入或检出项目时提示的migration具体是做了些什么?

回复

综合讨论区az452228391 发起了问题 • 1 人关注 • 0 个回复 • 9 次浏览 • 2015-08-18 18:13 • 来自相关话题

送 书 活 动 第 2 波 ↑ ↑ ↑

回复

MyEclipse IDE公告besy 发起了问题 • 1 人关注 • 0 个回复 • 22 次浏览 • 2015-08-07 11:35 • 来自相关话题

Myeclispse打造spring、struts3 和mybatis框架图文

回复

Java EE开发铭心 发起了问题 • 2 人关注 • 0 个回复 • 152 次浏览 • 2015-08-06 11:59 • 来自相关话题

MyEclipse2015非常慢,在“Restting Selection”上会花上5到10分钟

回复

下载|安装|配置|更新planetbear 发起了问题 • 3 人关注 • 0 个回复 • 57 次浏览 • 2015-07-31 18:32 • 来自相关话题