有个二维数组,怎样以行为单位将数组倒序。谁有好的算法,把思路讲一下,因为那个二维数组有5k多条记录,所以要追求速度。谢谢!!!

解决方案 »

  1.   

    倒它干吗的呀?
    就两重循环,不能再快了吧有一种替代的方法就是实际不倒,但通过自己写一个访问函数就可以了,如:
    int getItem(int[][] array, int row, int col){
       return array[row][array[row].length - col-1];
    }
      

  2.   

    PS:实在需要,5k的数组,遍历一下也不会很慢吧
      

  3.   

    for(int i;;)
      for(int j;;)
        getItem(array,i,j);
      

  4.   

    sorry 是我的问题问的不好。有一个JTable加载了上面说的二维数组,现在要求可以动态控制JTable显示结果的升序以及降序。问题是JTable每次都要挨个加载二维数组的字段,速度很慢。
    所以要找一个优化点的算法。
      

  5.   

    JDK6的新特性之十三:JTable的排序和过滤
    原来的JTable基本上是只能显示数据,在JDK6新增了对JTable的排序和过滤功能,下面代码演示了这两个功能public class JTableTester {
        static String data[][] = {
            {"China","Beijing","Chinese"},
            {"America","Washington","English"},
            {"Korea","Seoul","Korean"},
            {"Japan","Tokyo","Japanese"},
            {"France","Paris","French"},
            {"England","London","English"},
            {"Germany","Berlin","German"},
        };
        static String titles[] = {"Country","Capital","Language"};
        public static void main(String[] args) {        
            DefaultTableModel m = new DefaultTableModel(data,titles);
            JTable t = new JTable(m);
            final TableRowSorter sorter = new TableRowSorter(m); 
            t.setRowSorter(sorter); //为JTable设置排序器
            
            JScrollPane sPane = new JScrollPane();
            sPane.setViewportView(t);
            
            JPanel p = new JPanel();
            p.setLayout(new BoxLayout(p,BoxLayout.X_AXIS));
            JLabel l = new JLabel("Criteria:");
            final JTextField tf = new JTextField();
            JButton b = new JButton("Do Filter");
            p.add(l);
            p.add(tf);
            p.add(b);
            b.addActionListener(new ActionListener() {
                public void actionPerformed(ActionEvent e) {
                    if(tf.getText().length()==0){
                        sorter.setRowFilter(null);
                    }else{
                        sorter.setRowFilter(RowFilter.regexFilter(tf.getText()));//为JTable设置基于正则表达式的过滤条件
                    }
                }
            });
            
            JFrame f = new JFrame("JTable Sorting and Filtering");
            f.getContentPane().add(sPane,BorderLayout.CENTER);        
            f.getContentPane().add(p,BorderLayout.SOUTH);
            f.setSize(400,300);
            f.setVisible(true);
        }
      

  6.   

    先谢谢lsd,可是我们公司的jdk是1.4的。1.6的方法不能用。
      

  7.   

    定义一个比较器,用比较器排序,JTable的数据模型不要用二维数组,最好用动态数组ArrayList或者Vectorimport java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;public class A {
      public static void main(String[] args) {
        ArrayList<int[]> a = new ArrayList<int[]>();
        a.add(new int[] { 3, 2 });
        a.add(new int[] { 1, 2 });
        a.add(new int[] { 4, 2 });
        a.add(new int[] { 7, 2 });
        a.add(new int[] { 2, 2 });
        System.out.println("原数组:");
        print(a);
        Collections.sort(a, new MyCom());
        System.out.println("升序:");
        print(a);
        Collections.sort(a, new MyCom2());
        System.out.println("降序:");
        print(a);
      }  static void print(ArrayList<int[]> a) {
        for (int i = 0; i < a.size(); i++) {
          for (int j = 0; j < a.get(i).length; j++) {
            System.out.print(a.get(i)[j] + " ");
          }
          System.out.println();
        }
      }
    }class MyCom implements Comparator<int[]> {//以第一列升序
      public int compare(int[] o1, int[] o2) {
        return o1[0] - o2[0];
      }
    }class MyCom2 implements Comparator<int[]> {//以第一列降序
      public int compare(int[] o1, int[] o2) {
        return o2[0] - o1[0];
      }
    }
      

  8.   

    还可以把两个比较器合并
    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;public class A {
      public static void main(String[] args) {
        ArrayList<int[]> a = new ArrayList<int[]>();
        a.add(new int[] { 3, 2 });
        a.add(new int[] { 1, 2 });
        a.add(new int[] { 4, 2 });
        a.add(new int[] { 7, 2 });
        a.add(new int[] { 2, 2 });
        System.out.println("原数组:");
        print(a);
        Collections.sort(a, new MyCom(0));
        System.out.println("升序:");
        print(a);
        Collections.sort(a, new MyCom(1));
        System.out.println("降序:");
        print(a);
      }  static void print(ArrayList<int[]> a) {
        for (int i = 0; i < a.size(); i++) {
          for (int j = 0; j < a.get(i).length; j++) {
            System.out.print(a.get(i)[j] + " ");
          }
          System.out.println();
        }
      }
    }class MyCom implements Comparator<int[]> {//以第一列升序
      int type;  public int compare(int[] o1, int[] o2) {
        return type == 0 ? o1[0] - o2[0] : o2[0] - o1[0];
      }  public MyCom(int type) {
        this.type = type;
      }
    }
      

  9.   

    专业的搜索引擎技术提供商(磐志搜索),访问www.panzhi.net了解详细介绍。第一,提高搜索速度,0.005秒;
    第二、提高搜索准确性,专业的中文分词;  
    第三,智能分析关键词,纠错,相关词提取等;  
    第四、方法搜索 关键词的关系(与 或 非)等;