[英]How to avoid unnecessary object creation in Java in a for loop
我正在使用Java創建以下json文件
JSONObject json = new JSONObject();
JSONArray vertex = new JSONArray();
for (int i = 0; i < num; i++) {
JSONObject usr1 = new JSONObject();
JSONObject usr2 = new JSONObject();
// String na="name"+i
usr1.put("type", "string");
usr1.put("value", "name" + i);
usr2.put("name", usr1);
usr2.put("_id", Integer.toString(i));
usr2.put("_type", "vertex");
// v2.put(usr2);
vertex.put(usr2);
// email
JSONObject usr3 = new JSONObject();
JSONObject usr4 = new JSONObject();
usr3.put("type", "string");
usr3.put("value", "email" + i + "@gmail.com");
usr4.put("email", usr3);
usr4.put("_id", Integer.toString(i + num));
usr4.put("_type", "vertex");
vertex.put(usr4);
}
json.put("vertex", vertex);
該num
可以約60,000-200,000。
但是在這里,我一次又一次地創建java對象,這非常昂貴。 我希望將對象創建減至最少,也不想過多更改代碼結構。 如何在不過多更改代碼結構的情況下實現這一目標?
我正在使用org.codehaus.jettison.json
包中的JSON *類, org.codehaus.jettison.json
必須將其寫入json對象的文件中
為了快速生成JSON而不創建中間對象,可以使用JSONWriter
:
StringWriter sw = new StringWriter();
JSONWriter writer = new JSONWriter(sw);
writer.object().key("vertex").array();
for (int i = 0; i < num; i++) {
writer
.object() // usr2
.key("name")
.object() // usr1
.key("type").value("string")
.key("value").value("name"+i)
.endObject()
.key("_id").value(Integer.toString(i))
.key("_type").value("vertex")
.endObject()
.object() // usr4
.key("email")
.object() // usr3
.key("type").value("string")
.key("value").value("email"+i+"@gmail.com")
.endObject()
.key("_id").value(Integer.toString(i+num))
.key("_type").value("vertex")
.endObject();
}
writer.endArray().endObject();
String json = sw.toString();
在這里, StringWriter
用於存儲中間JSON文本。 或者,您可以直接寫入文件或網絡套接字,而根本不將其保留在內存中。
你的json似乎像
{
"vertex": [
{
"name": {
"type": "string",
"value": "name0"
},
"_id": 0,
"_type": "vertex"
},
{
"email": {
"type": "string",
"value": "email0@gmail.com"
},
"_id": 0,
"_type": "vertex"
},
.....
]
}
在每個后續循環中...在文本json數組上設置了2個jsonobject ...您可以將大小減小一半...通過在每個后續循環中創建1個jsonobject
像這樣的東西
{
"vertex": [
{
"_id": 0,
"_type": "vertex",
"name": "name0",
"email": "email0@gmail.com"
},
....
]
}
你不會在json創建上做太多...
盡管我也找不到包含“ _id”和“ _type”鍵的含義……因為“ _id”包含從0到num的索引,並且您可以使用頂點數組來獲取該索引...
因此,您可以將json的結構用作
{
"vertex": [
{
"name": "name0",
"email": "email0@gmail.com"
},
....
]
}
並且您的Java代碼可能會減少到此...
JSONObject json = new JSONObject();
JSONArray vertex = new JSONArray();
for (int i = 0; i < num; i++) {
vertex.put(new JSONObject().put("name", "name" + i).put("email", "email" + i + "@gmail.com"));
}
json.put("vertex", vertex);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.