0 0

双层for循环排序,如何优化0

public class Category {
	private Integer cid;          //分类ID
	private String cname;         //分类名称
	private List<Product> pList;  //分类中的产品集合
}
public class Product 
{
	private Integer pid;     //ID
	private String pname;    //产品名称
	private Double price;    //价格
	private Date createTime; //录入时间
}

public class Client {
	private static final String[] category_sort_name = {"数码", "服装", "美食", "医药"};
	/**
	 * 判断字符串obj是否在数组array中存在
	 */
	private static boolean exists(String[] array, String obj)
	{
		for(String arr : array)
		{
			if(arr.equals(obj))
			{
				return true;
			}
		}
		return false;
	}
	
	/**
	 * 排序要求:
	 * 1:先取出 List<Category> 中的Category.cname 在category_sort_name里面的分类
	 * 2:Category的cname排序要求和category_sort_name里面的顺序一样
	 *   取出Category里面的List<Product>要求根据产品的price asc, createTime desc排序
	 * 3:取出所有剩余Category.cname不在category_sort_name里面的分类,
	 *   List<Product>要求根据createTime desc排序
	 */
	public static List<Product> sort(List<Category> clist)
	{
		List<Product> result = new ArrayList<>();
		
		ProductSort sort1 = new ProductSort(1);
		ProductSort sort2 = new ProductSort(2);
		/**
		 * 先排序指定的分类
		 */
		for(String cname : category_sort_name)
		{
			for(Category category : clist)
			{
				if(category.getCname().equals(cname))
				{
					Collections.sort(category.getpList(), sort1);
					result.addAll(category.getpList());
				}
			}
		}

		//这里有双层的for循环,请问,如何优化

		/**
		 * 排序剩余的分类
		 */
		List<Product> tempList = new ArrayList<>();
		for(Category category : clist)
		{
			if(!exists(category_sort_name,category.getCname()))
			{
				tempList.addAll(category.getpList());
			}
		}
		
		Collections.sort(tempList, sort2);
		result.addAll(tempList);

		return result;
	}
}

class ProductSort implements Comparator<Product>{
	/**
	 * 1 : 根据产品的price asc, createTime desc排序
	 * 2 : 根据产品的createTime desc排序
	 */
	private int type = 1;
	public ProductSort(int type)
	{
		this.type = type;
	}
	public int compare(Product o1, Product o2)
	{
		int result = 0;
		if(type == 1)
		{
			if(o1.getPrice().compareTo(o2.getPrice()) != 0)
			{
				result = o1.getPrice().compareTo(o2.getPrice());
			}
			else
			{
				result = o1.getCreateTime().compareTo(o2.getCreateTime());
			}
		}
		else
		{
			result = o1.getCreateTime().compareTo(o2.getCreateTime());
		}
		return result;
	}
}


求思路,谢谢
2014年8月07日 09:59
目前还没有答案

相关推荐

    C++ For循环优化版

    C++循环冒泡法优化 在看到for循环冒泡排序(c++) 后 再次优化了一下,它的程序不能运行,我运行优化的成功了,对初学者理解有很大帮助(还有注释)

    选择排序和冒泡排序

    - 使用双层循环结构,外层控制比较的轮次,内层负责比较和交换操作。 **2.3 代码分析** 对于C语言版本的冒泡排序,代码如下: ```c for(h=n-1; h&gt;0; h=k) { /* 循环到没有比较范围 */ for(j=0, k=0; j; j++) { /...

    C语言版的排序方法---插入排序.docx

    插入排序是一种简单直观的排序算法,它的工作原理是通过构建有序序列,对于未排序数据,在已排序序列中从后向前扫描,...在C语言中,插入排序的实现可以通过双层循环结构来完成,通过比较和移动元素实现数组的排序。

    c++冒泡排序

    在双层for循环结构中执行了冒泡排序的逻辑,其中外层循环变量j从0开始,直到9(因为最后一个元素不需要再次比较),内层循环变量i从0开始,直到9-j(每次外层循环结束后,最大的元素会被放置在正确的位置,所以每次...

    二维数组如何进行冒泡排序

    - 使用双层循环,从二维数组的每一个元素出发,将元素逐个添加到一维数组中。 - 示例代码片段: ```c int b[6]; // 定义一维数组 int k = 0; // 初始化计数器 for (int i = 0; i ; i++) { for (int j = 0; j ...

    java 冒泡排序法 PPT文档

    在Java中,冒泡排序可以使用for循环实现。你可以创建一个名为`bubbleSort`的方法,接收一个整数数组作为参数,然后在方法内部实现冒泡排序的逻辑。记得在实际编写代码时,考虑到边界条件和优化措施,以提高代码的...

    冒泡法排序c语言程序.txt

    在主函数main中,定义并初始化一个整型数组,调用bubbleSort函数进行排序,并通过两层for循环输出排序前后的数组。 冒泡排序算法在完成排序后,数组中的元素顺序便是稳定排列的,即两个相同值的元素的相对位置不会...

    冒泡法排序之c语言程序

    在数组索引方法中,我们通常利用for循环来遍历数组,并通过交换操作来实现排序。 冒泡排序算法虽然简单,但在优化方面也有一定的空间。例如,我们可以设置一个标志位来检测在某一轮排序中是否发生了交换,如果没有...

    实现冒泡排序的 Python 源码

    实现冒泡排序的关键在于使用双层循环。外层循环控制排序的总轮数,内层循环负责执行相邻元素之间的比较和可能的交换。以下是一个典型的冒泡排序的Python实现示例: ```python def bubble_sort(arr): n = len(arr) ...

    常用排序java版 常用排序java版

    Java实现时,可以通过一个for循环找到最小值,然后交换到正确位置。 - **堆排序**:利用堆这种数据结构所设计的一种排序算法。构建大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,直到所有元素都排好序。 ...

    python冒泡排序.txt

    3. 确定数组长度,并设置双层循环来完成排序。外层循环变量`i`从0遍历到数组长度`n`,内层循环变量`j`从0遍历到`n-i-1`。 4. 在内层循环中,通过比较`arr[j]`与`arr[j+1]`的值,若`arr[j]`大于`arr[j+1]`,则交换这...

    冒泡排序-Java 版本

    这种双层循环结构使得冒泡排序的时间复杂度为O(n^2),其中n是数组的长度。虽然冒泡排序效率较低,但对于小规模数据或部分有序的数据,它仍然具有一定的实用价值。 此外,冒泡排序还有优化的版本,例如“早停”策略...

    常用排序算法Java

    Java实现选择排序时,通常使用一个for循环外加一个while或if循环,时间复杂度同样为O(n^2)。 3. 插入排序(Insertion Sort) 插入排序将未排序的元素逐个插入到已排序的部分,保持有序状态。Java实现插入排序可以...

    冒泡排序 VB

    接下来是冒泡排序的核心部分,通过双层循环实现。外层循环`For i = 1 To n - 1`控制了排序的轮数,因为每一轮都会把当前未排序部分的最大元素放到正确的位置。内层循环`For j = n To i + 1 Step -1`则负责在当前未...

    Java-冒泡排序-源码

    在这段代码中,`bubbleSort`方法接受一个整型数组`array`作为参数,通过双层循环实现排序。内层循环通过比较相邻的元素,并在必要时交换它们的位置来确保较大的元素能够"冒泡"到数组的尾部。外层循环负责重复这个...

    冒泡法排序算法

    排序的核心在于双层循环。外层循环`i`控制整个排序过程的轮次,内层循环`j`负责在每一轮中进行相邻元素的比较和必要时的交换。由于每完成一轮,最大的元素都会被放置在正确的位置上,因此内层循环的范围可以逐渐...

    冒泡排序的Java实现方法BubbleSort.zip

    在主函数 `main` 中,我们定义了一个待排序的整型数组,并调用 `bubbleSort` 方法对其进行排序,最后通过一个增强型for循环输出排序后的数组元素。这段代码简洁明了,展示了冒泡排序算法的核心思想和实现逻辑。 ...

    实现冒泡排序的 JAVA 源码

    1. 双层循环的结构:外层循环控制遍历的轮数,内层循环负责每轮的两两比较和交换操作。 2. 交换逻辑:如果发现一对相邻元素是逆序的,则交换它们的位置。 3. 排序完成的判断:在每一轮遍历中,如果没有发生任何交换...

    冒泡排序JAVA

    - 双层循环遍历数组,通过比较相邻元素的大小来进行交换。 - 第一层循环控制遍历次数,第二层循环负责比较与交换。 - 使用变量 `flag` 来标记是否发生了交换,如果没有发生交换,则提前结束排序过程。 - 在每次内...

    4位数排序筛选

    由于采用了双层循环来进行两两元素之间的比较,当数据量较大时,效率会降低。 ### 总结 本文介绍了如何在C语言中实现一个特定的排序筛选功能,包括文件读写、自定义排序算法以及数组的基本操作等关键知识点。通过...

Global site tag (gtag.js) - Google Analytics