Java 常用的几个算法(菜鸟初学)

【数组,数组列表,链表求最大值的算法比较(只是例子,可以举一反三)】

方法类

/**
 * 算法练习
 * @author Jason
 *
 */
public class Methods {
    /**
     * 在数组中查找最大值算法(一般)
     * compareTo 不支持int 比较 所以要转成Integer
     * 22行 报错详情:Cannot invoke(包含) compareTo(int) on the primitive(原始的) type int
     */
    public void SearchMaxFromArray(int prams[]){
        if (prams.length==0)
            throw new NoSuchElementException();
        int    largest=prams[0];
        for (int i = 0; i < prams.length; i++) {
            if (Integer.valueOf(largest).compareTo(Integer.valueOf(prams[i]))<0) {
                largest=prams[i];
            }
        }
        System.out.println(largest);
    }
    /**
     * 在数组列表中找出最大元素
     * 与数组算法有点小的差别
     */
    public void SearchMaxFromArrayList(List<Integer> prams){
        if (prams.size()==0)
            throw new NoSuchElementException();
            Integer    largest=prams.get(0);
        for (int i = 0; i < prams.size(); i++) {
            if (Integer.valueOf(largest).compareTo(Integer.valueOf(prams.get(i)))<0) {
                largest=prams.get(i);
            }
        }
        System.out.println(largest);
    }
    /**
     * Linked 链表 无法高效的随机访问,但可以使用迭代器
     */
    public void SearchMaxFromLinked(List<Integer> list){
        if (list.isEmpty())
            throw new NoSuchElementException();
        Iterator<Integer> iter=list.iterator();
        Integer largest=iter.next();
        while (iter.hasNext()) {
            Integer next= (Integer) iter.next();
            if (Integer.valueOf(largest).compareTo(next)<0) {
                largest=next;
            }
        }
        System.out.println(largest);
    }
}

测试类

public class test {
    public static void main(String[] args) {
        /**
         * 测试第一个算法
         */
        int a[] =new int[]{1,4,3,6,78};
        Methods m=new Methods();
        m.SearchMaxFromArray(a);

        /**
         * 测试数组列表算法
         * 添加数据的时候要按下标序
         * 如果25,26换下位置就报错(这是码的时候有意测试的,错了就记录一下以便以后复习)
         */
        List<Integer> list =new ArrayList<Integer>();
        list.add(0, 12);
        list.add(1,100);
        list.add(2,12);
        list.add(3,43);
        m.SearchMaxFromArrayList(list);

        /**
         * 测试LinkedList(链表算法)
         */
        List<Integer> list2 =new LinkedList<Integer>();
        list2.add(0, 12);
        list2.add(1,100);
        list2.add(2,12);
        list2.add(3,43);
        m.SearchMaxFromLinked(list2);

    }
}

但有时候这些循环代码很容易出错,也不想每次都实现下面一系列的方法:

  1. static <T extends Comparable> T max(T[] a)
  2. static <T extends Comparable> T max(ArrayList<T> a)
  3. static <T extends Comparable> T max(LinkedList<T> a)

为了高效使用最小的集合接口,采用set get方法进行随机访问比直接迭代层次高,上述计算链表最大值的过程中已经看到,这项任务并不需要进行随机访问,直接使用迭代就可以实现。因此可以简化上述方法:(使用一个方法实现上述3个方法的功能)

小弟初学,下面的代码老是报hot Code 编码警告我不清楚具体原因,还请大家指教,谢谢!

/**     * 可以使用于数组,数组列表,LinkedList(链表)     */public static <T extends Comparable<T>> T max(Collection<T> c)
    {
        if (c.isEmpty()) throw  new NoSuchElementException();
        Iterator<T> iter=c.iterator(); //迭代
        T largest=iter.next();
        while (iter.hasNext()) {
            T next=iter.next();
            if (largest.compareTo(next)<0) {
                largest=next;
            }
        }
        return largest;
    }//main方法中直接调用 测试一句话我就不写了。
时间: 2024-10-29 10:46:39

Java 常用的几个算法(菜鸟初学)的相关文章

[转载]图解程序员必须掌握的Java常用8大排序算法

这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,分享给大家一起学习. 分类1)插入排序(直接插入排序.希尔排序)2)交换排序(冒泡排序.快速排序)3)选择排序(直接选择排序.堆排序)4)归并排序5)分配排序(基数排序) 所需辅助空间最多:归并排序所需辅助空间最少:堆排序平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一

Java常用排序算法+程序员必须掌握的8大排序算法+二分法查找法

Java 常用排序算法/程序员必须掌握的 8大排序算法 本文由网络资料整理转载而来,如有问题,欢迎指正! 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2]

Java常用的7大排序算法汇总(转载)

这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x “腾位置”,最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1). /** * @param int[]

Java常用三种算法排序比较

Java常用三种算法排序比较 冒泡排序: package demo1; /** * * @author xiaoye 2014-5-13 */ /** * 有N 个数据需要排序,则从第0 个数开始,依次比较第0 和第1 个数据, * 如果第0 个大于第1 个则两者交换,否则什么动作都不做,继续比较第 1 个第2个-, * 这样依次类推,直至所有数据都"冒泡"到数据顶上. 冒泡排序的效率 O(N*N ),比较 N*N/2 ,交换N*N/4 . */ public class Bubble

java常用的7大排序算法汇总

这段时间闲了下来,就抽了点时间总结了下java中常用的七大排序算法,希望以后可以回顾! 1.插入排序算法 插入排序的基本思想是在遍历数组的过程中,假设在序号 i 之前的元素即 [0..i-1] 都已经排好序,本趟需要找到 i 对应的元素 x 的正确位置 k ,并且在寻找这个位置 k 的过程中逐个将比较过的元素往后移一位,为元素 x "腾位置",最后将 k 对应的元素值赋为 x ,一般情况下,插入排序的时间复杂度和空间复杂度分别为 O(n2 ) 和 O(1). 1 2 3 4 5 6 7

Java 常用排序算法/程序员必须掌握的 8大排序算法

Java 常用排序算法/程序员必须掌握的 8大排序算法 分类: 1)插入排序(直接插入排序.希尔排序) 2)交换排序(冒泡排序.快速排序) 3)选择排序(直接选择排序.堆排序) 4)归并排序 5)分配排序(基数排序) 所需辅助空间最多:归并排序 所需辅助空间最少:堆排序 平均速度最快:快速排序 不稳定:快速排序,希尔排序,堆排序. 先来看看 8种排序之间的关系: 1.直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排 好顺序的,现在要把第n 个数插到前

Java哈希散列算法简介 - MD5 &amp; SHA-512

Java哈希散列算法简介 - MD5 & SHA-512 在日常的开发工作中,我们常常会碰到这样的一个场景:我们需要有一种可靠的行之有效的方法来检验跟判断数据在传输过程当中的完整性.最常见的一种情况就是当我们传输文件的时候,由于网络故障或者其他的一些因素,可能会出现我们下载下来的文件不完整,这给我们日常的开发和维护带了一些难题:另外的一个较为常用的场景就是:有没有一种行之有效的方法让我们可以很方便的判断服务器上的文件是不是有最新的数据更新,比如我们现在的移动Hybird App开发,我们经常会发

(2)Java数据结构--二叉树 -和排序算法实现

=== 注释:此人博客对很多个数据结构类都有讲解-并加以实例 Java API —— ArrayList类 & Vector类 & LinkList类Java API —— BigDecimal类Java API —— BigInteger类Java API —— Calendar类Java API —— DateFormat类Java API —— Date类Java API —— HashMap类 & LinkedHashMap类Java API —— JDK5新特性Java

Java常用英语汇总(面试必备)

Java常用英语汇总(面试必备) abstract (关键字)             抽象 ['.bstr.kt] access                            vt.访问,存取 ['.kses]‘(n.入口,使用权) algorithm                     n.算法 ['.lg.riem] annotation                     [java]代码注释 [.n.u'tei..n] anonymous