如何在JSONArray中存储唯一元素

时间:2014-06-06 07:51:11

标签: java

我试图只存储从JSONArray中的Database中获取的唯一元素

HashSet<String> hs = new HashSet<String>();
JSONArray mainarray=new JSONArray();

PreparedStatement stmt = connection.prepareStatement("SELECT * from categories");
ResultSet rs=stmt.executeQuery();

while(rs.next())
{
    String T1 = rs.getString("T1");
    hs.add(T1);
    if(!hs.contains(T1))
    {
        mainarray.put(T1);
    }
}


System.out.println(mainarray); 

Starngely输出是一个空数组[]

顺便说一句,我正在使用org.json.JSONArray

请有人帮忙吗?

2 个答案:

答案 0 :(得分:3)

 hs.add(T1);
 if(!hs.contains(T1)) { ...

条件总是假的......因为你刚刚添加了元素!

因此,您永远不会向mainarray添加任何内容。


对于它的价值,这里有一个修复你的错误:

// Inelegant version
if (!hs.contains(T1)) {
    hs.add(T1);
    mainarray.put(T1);
}

// Elegant version that avoids two probes of the hashset
// ... see javadocs for `Set.add` to understand why this works.
if (hs.add(T1)) {
    mainarray.put(T1);
}

答案 1 :(得分:0)

调整查询,无需处理Java代码中的重复项。

JSONArray mainarray=new JSONArray();

PreparedStatement stmt = connection.prepareStatement("SELECT DISTINCT T1 from categories");
ResultSet rs=stmt.executeQuery();

while(rs.next()) {
    String T1 = rs.getString("T1");
    mainarray.put(T1);
}
System.out.println(mainarray);