パフォーマンスの最適化:アルゴリズムの最適化


背景
ある理由で、私たちのシステムは別のシステムのテーブルのidを記録する必要があります.しかし、私たちが記録し終わった後、他の人のシステムはその表の中のいくつかのデータを削除する可能性があります.そうすると、私たちの側には無効なデータがたくさんあります.だから、私たちはこれらの無効なidを見つけて、削除しなければなりません.
 
最初に、私たちの実装は、記録されたすべてのidをリストに入れ、別のシステムに転送し、削除したidを返します.具体的な処理コードは以下の通りです.
public String findDeletedStuChooseCourseIds(List stuChooseCourseIds) {
	List delIds = new ArrayList();
	//         id,      
	for (String id : stuChooseCourseIds) {
		StuChooseCourse stuChooseCourse = commonEao.get(StuChooseCourse.class, id);
		if (null == stuChooseCourse) {
			delIds.add(id);
		}
	}
	return JsonUtils.toJson(delIds);
}
 
  

, , 。 , , , 。 , 5 , 。

, , , , , 。 , 。 :

public String findDeletedStuChooseCourseIds(List stuChooseCourseIds) {
	//    stuchoosecourse ids
	String  nativeSql = "select id from tableName ";
	List list = commonEao.executeGetNativeSQL(nativeSql);
	
	stuChooseCourseIds.removeAll( list );
	
	return JsonUtils.toJson(stuChooseCourseIds);
}
 
  

, , jdk removeAll ( jdk , ), 。 , , , 。

, stuChooseCourseIds.removeAll(list ) , list arrayListarrayList 。 , LinkedList, 。 , 。 , :

public String findDeletedStuChooseCourseIds(List stuChooseCourseIds) {
	List delIds = new ArrayList();
	//    stuchoosecourse ids
	String  nativeSql = "select id from tableName ";
	List list = commonEao.executeGetNativeSQL(nativeSql);
	// list  id  HashSet 
	HashSet dbSet = new HashSet();
	for(String id : list){
		dbSet.add(id);
	}
	
	// stuChooseCourseIds  id  dbSet 
	for(String givenId : stuChooseCourseIds){
		if(dbSet.add(givenId)){
			delIds.add(givenId);
		}
	}
	
	return JsonUtils.toJson(delIds);
}
 
  

HashSet 。 , Hash, 。 , Set 。 , 20 , , 。 。

 

, , , 。 , 。 , 。

 

, , , list , , ? , 。 , 。 , :

public String findDeletedStuChooseCourseIds(List stuChooseCourseIds,String schoolCalendarId) {
	List delIds = new ArrayList();
	//    stuchoosecourse ids
	String  nativeSql = "select id from tableName where schoolcalendarid='"+schoolCalendarId+"'";
	List list = commonEao.executeGetNativeSQL(nativeSql);
	// list  id  HashSet 
	HashSet dbSet = new HashSet();
	for(String id : list){
		dbSet.add(id);
	}
	
	// stuChooseCourseIds  id  dbSet 
	for(String givenId : stuChooseCourseIds){
		if(dbSet.add(givenId)){
			delIds.add(givenId);
		}
	}
	
	return JsonUtils.toJson(delIds);
}

はまた1つのパラメータを えた-- 、 ごとに するデータは に わらないので、このようにして、どのくらい に わらず、 の はもう を けません.
 
の により、データ の を しました. 、データ をよく する があるでしょう.