`

java.util包的集合框架应用

阅读更多
package mix.test;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

/**
 * @function 【武汉】歪尘(531314208) 2011-10-26 20:55:54<BR>
 *           set集合有一些javabean,我要怎么进行过滤?<BR>
 *           name 数量 <BR>
 *           a 10<BR>
 *           b 3<BR>
 *           a 3<BR>
 *           b 5<BR>
 * 
 *           name 数量 <BR>
 *           a 13<BR>
 *           b 8<BR>
 * 
 * @author ocaicai@yeah.net
 * 
 * @date 2011-10-27
 */
public class ListTest {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		List<Product> list = genernateProduct();
		list = getCountByName(list);
		System.out.println(Arrays.toString(list.toArray()));
	}

	public static List<Product> genernateProduct() {
		List<Product> list = new ArrayList<Product>();
		list.add(new Product("a", 10));
		list.add(new Product("b", 3));
		list.add(new Product("a", 3));
		list.add(new Product("c", 5));
		list.add(new Product("b", 5));
		list.add(new Product("c", 7));
		return list;
	}

	public static List<Product> getCountByName(List<Product> list) {

		List<Product> targetList = new ArrayList<Product>();
		int count = 0;
		Product product = null;

		// 去除掉重复name,得到有序的name
		Set<String> nameSet = new HashSet<String>();
		List<String> nameList = new ArrayList<String>();
		for (int i = 0; i < list.size(); i++)
			nameSet.add(list.get(i).getName());
		for (String name : nameSet)
			nameList.add(name);
		Collections.sort(nameList);

		// 获取每个name的count和
		for (String name : nameList) {
			count = 0;
			for (int i = 0; i < list.size(); i++) {
				product = list.get(i);
				if (product.getName().equals(name)) {
					count += product.getCount();
					list.remove(i);
					i--;
				}
			}
			targetList.add(new Product(name, count));
		}

		return targetList;
	}
}



package mix.test;

public class Product {
	private String name;
	private int count;

	public Product(String name, int count) {
		super();
		this.name = name;
		this.count = count;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getCount() {
		return count;
	}

	public void setCount(int count) {
		this.count = count;
	}

	@Override
	public String toString() {
		return this.name + ":" + this.count;
	}
}



输出结果:

[a:13, b:8, c:12]


第二种方法,感觉思路更清晰,运算复杂度更小:getCountByName方法

	public static List<Product> getCountByName(List<Product> productList) {

		List<Product> targetList = new ArrayList<Product>();
		Product product = null;

		// 寻找该name的总count,然后删除该name
		String name = null;
		int count = 0;

		while (productList.size() > 0) {
			name = productList.get(0).getName();
			count = 0;
			for (int i = 0; i < productList.size(); i++) {
				product = productList.get(i);
				if (product.getName().equals(name)) {
					count += product.getCount();
					productList.remove(i);
					i--;
				}
			}
			targetList.add(new Product(name, count));
		}

		return targetList;
	}





.

分享到:
评论

相关推荐

    java.util包总结

    Java.util包是Java标准库中的核心包之一,它包含了大量用于日常编程的工具类和接口。这个包在Java 2版本中得到了显著增强,引入了许多重要的数据结构和算法,为Java程序员提供了更丰富的功能。 首先,Java.util包中...

    java的.awt包和java.util包的区别

    Java中的`java`包是标准Java开发工具包的一部分,它提供了基础的编程功能,包括但不限于IO处理、图形用户界面、集合框架等。而`javax`则被视为Java的扩展包,主要用于Java企业级应用的开发,如J2EE中的Servlets、JSP...

    java.util.pdf

    在java.util包中,包含了一些Java集合框架的基础类,比如Enumeration、Hashtable、Stack、Vector等,以及日期和时间处理相关的类,如Calendar、Date、TimeZone等。同时,提及了Timer和TimerTask,它们用于任务调度,...

    java.util.vector中vector小结

    在Java编程语言中,`java.util....总之,`Vector`是Java集合框架的一部分,提供了一种线程安全的方式来管理动态数组。理解其特性和用法对于编写多线程Java程序至关重要,但同时也要权衡其性能和线程安全之间的平衡。

    JDK7源码 包含rt.jar包下的 sun包源码 sun.security包等源码

    例如`java.lang`包下的基础类如`Object`、`String`,`java.util`包中的集合框架,以及`javax.swing`和`javax.servlet`等用于图形用户界面和Web应用开发的API。这些源码对于学习和理解Java API的设计原则和实现细节...

    java-util-iterator.pdf java-util-iterator.pdf

    本文通过对`java.util.Iterator`接口的深入分析,展示了其在Java集合框架中的重要作用。通过使用`Iterator`模式,我们能够以统一的方式遍历不同类型的集合,同时保持代码的简洁性和可维护性。这对于理解和开发高质量...

    java.util.concurrent 测试源文件

    Java.util.concurrent(JUC)是Java平台中的一个核心包,专门用于处理多线程并发问题。这个包包含了大量的工具类和接口,极大地简化了并发编程的复杂性,提高了程序的性能和可伸缩性。本测试源文件主要是针对JUC并发...

    java-util-1.3.1.jar.zip

    1. **集合框架扩展**:可能包含对Java内置集合类(如List、Set、Map)的增强,提供更高效的操作,例如快速排序、线程安全的实现等。 2. **日期和时间处理**:提供更加灵活和强大的日期时间操作,弥补Java 8之前的...

    java.util源码-java-util:javautil源代码

    1. **集合框架**:Java的集合框架是`java.util`包的核心部分,包括List、Set、Queue和Map接口,以及它们的实现类。例如: - `ArrayList` 和 `LinkedList`:这两个类分别实现了List接口,它们分别基于动态数组和双向...

    java.util.concurrent介绍(重要).pdf

    Java.util.concurrent 包是 Java 并发编程的重要组成部分,提供了高级并发工具和线程管理机制。这个包中包含的主要类和接口如下: 1. **线程池**: - `ExecutorService`:线程池接口,提供管理和控制线程的框架。 ...

    Java集合框架.ppt

    集合是将多个元素组成一个单元的...Java集合框架,为我们提供了一套性能优良、使用方便的接口和类,我们不必再重新发明轮子,只需学会如何使用它们,就可以处理实际应用中出现的问题了Java集合框架位于java.util包中

    JAVA_API1.6文档(中文)

    java.util.prefs 此包允许应用程序存储并获取用户和系统首选项和配置数据。 java.util.regex 用于匹配字符序列与正则表达式指定模式的类。 java.util.spi java.util 包中类的服务提供者类。 java.util.zip 提供...

    Java常用工具类大全,工作5年精心整理.zip

    1. **`java.util.ArrayList`与`java.util.LinkedList`**:这两个是Java集合框架中的重要类,分别代表动态数组和链表。ArrayList适合于随机访问,而LinkedList适用于频繁的插入和删除操作。 2. **`java.util.HashMap...

    Thinking in java(第四版)源码 + 书中net.mindview.util包

    源码部分提供了书中示例的完整实现,这些示例涵盖了面向对象编程的基础,如封装、继承、多态,以及高级主题,如集合框架、并发编程、网络编程、I/O流等。通过对这些代码的阅读和分析,读者可以更深入地理解Java编程...

    Java中使用Json的net.sf.json包

    `commons-logging`是一个通用的日志框架,它允许`net.sf.json`库根据应用的配置使用不同的日志实现,如Log4j或Java内置的日志系统。 总结来说,`net.sf.json`包是Java中处理JSON数据的一个强大工具,它提供了丰富的...

    Java.API文档中文版

    2. **集合框架**:Java集合框架由`java.util`包及其子包构成,包括List、Set、Map等接口以及ArrayList、HashSet、HashMap等实现。这些类和接口提供了强大的数据组织和操作能力,如泛型支持、迭代器、并发控制等。 3...

    java 参考手册 (.chm)

    10. **集合框架**:`java.util`包中的`List`、`Set`、`Map`等接口以及它们的实现类,如`ArrayList`、`HashSet`、`HashMap`,构成了Java强大的集合框架,用于存储和操作对象。 Java参考手册是每个Java开发者不可或缺...

    java rt.jar包

    - `java.util`: 提供了各种工具类和集合框架,如`ArrayList`、`HashMap`、`Date`和`Calendar`。 - `java.io`: 处理输入/输出操作,包括文件读写、流操作等。 - `java.net`: 支持网络编程,包括套接字(Socket)、...

    java集合框架详解以及区别

    Java集合框架是Java编程语言中一个重要的组成部分,它提供了一组高级数据结构,使得程序员能够高效地管理和操作数据。在本篇文章中,我们将深入探讨Java集合框架中的主要接口和类,以及它们之间的区别。 首先,Java...

Global site tag (gtag.js) - Google Analytics