数据没有按顺序显示

时间:2015-04-21 06:26:56

标签: java

当我的数据打印出来时,它的顺序是我在我的代码中指示的ORDER BY。

这里有一些我的代码可能有所帮助。记住一些错误,因为我必须在发布之前删除一些行。

String dataFinder = "SELECT DISTINCT dG2 FROM DAE ORDER BY dG2";

HashMap<String, StringWriter> fSW= new HashMap<String, StringWriter>();     

HashMap<String, HashMap<String, String>> DGGSW = new HashMap<String, HashMap<String, String>>();

            this.setSQL(dataFinder);
            ResultSet rs = this.retrieveAllData(handler, tracker);
            while ( rs.next() )
            {
                if ( rs.getString("dG2") != null )
                {
                    fSW.put(rs.getString("dG2").trim().toUpperCase(), new StringWriter());
                    DGGSW.put(rs.getString("dG2").trim().toUpperCase(), new HashMap<String, String>());
                }
            }

            StringWriter stringWriter = new StringWriter();

            while ( rs.next() )
            {
                String dataList = "";

                if ( rs.getString("diagM") != null )
                    dataList = rs.getString("diagM");
            }

            String resultString = stringWriter.toString();

            for ( String diaG : DDGSW.keySet() )
                resultString += diaG + "," + DDGSW.get(gateNo).toString();

            this.WriteToFile(resultString);
        } 

    }

}

2 个答案:

答案 0 :(得分:2)

您的数据结构选择不正确。

如果您想要插入的顺序,则应使用LinkedHashMap代替HashMap(无法保证插入的顺序)。

由于您在订单中提取记录并将其插入HashMap,因此记录以随机顺序插入,因为它是通过哈希函数传递的。

答案 1 :(得分:1)

您使用的是HashMap,其中包含以下内容:

  

此课程不保证地图的顺序;特别是,它不保证订单会随着时间的推移保持不变。

使用LinkedHashMap

  

Map接口的哈希表和链表实现,具有可预测的迭代顺序。此实现与HashMap的不同之处在于它维护了一个贯穿其所有条目的双向链表。此链接列表定义迭代排序,通常是键插入映射的顺序(插入顺序)。请注意,如果将键重新插入地图,则插入顺序不会受到影响。 (如果m.containsKey(k)在调用之前立即返回true,则调用m.put(k,v)时,将密钥k重新插入到映射m中。)