Java Collections工具类

本文详细介绍了Java中Collections工具类的功能及用法,包括为List集合提供的排序和查找方法,以及如何获取集合中的最大值和最小值。此外还讨论了线程安全的集合创建方法。

        Collections作为Collection接口的工具类,为Collection接口对象的使用提供了大量的方法。注意Collection是接口,定义的是一组标准;而Collections是为Collection的对象提供操作方便的工具,二者不存在继承或实现的关系。此类完全由静态方法组成,下面介绍下Collections的常用方法。

List集合常用操作

 因为List集合具有元素可重复特点,相比其它类型集合少了对象的比较方法,在Collections工具类中为List集合提供了一些特有的比较方法。

// 按自然顺序对指定的对象列表按升序进行排序

static <T extends Comparable<? super T>> void sort(List<T> list);  

// 按指定比较器产生的顺序对指定List按升序进行排序

static <T extends Comparable<? super T>> void sort(LIst<T> list, Comparator<? super T> c);  

// 使用二分查找,获取指定对象;使用对象比较器

static <T> binarySearch(List<? extends Comparable<? super T>> list, T key);  

// 使用二分查找,获取指定对象;使用指定比较器

static <T> binarySearch(List<? extends T> list, T key, Comparator<? super T> c);

import java.util.ArrayList;
import java.util.Collections;
import java.util.Comparator;
import java.util.List;

public class CollectionsDemo {
	public static void main(String args[]) {
		// 获取一个ArrayList
		List<String> list = getList();
		System.out.println(list);
		
		// 根据自然顺序对指定的List集合按升序排序
		Collections.sort(list);
		System.out.println("自然排序:" + list);
		// 获取List集合中指定元素的位置,使用对象比较器
		int num = Collections.binarySearch(list, "bc");
		System.out.println("num: " + num);
		
		// 根据比较器指定的顺序对List集合排序
		Collections.sort(list, new StrLenComparator());
		System.out.println("客户排序:" + list);
		// 获取List集合中指定元素的位置,使用指定比较器
		num = Collections.binarySearch(list, "bc", new StrLenComparator());
		System.out.println("num: " + num);
	}
	// 初始化一个List
	public static List<String> getList() {
		List<String> list = new ArrayList<String>();
		list.add("a");
		list.add("bc");
		list.add("abc");
		list.add("efgh");
		list.add("bac");
		return list;
	}
}

// 实现一个字符串按长度比较的类
class StrLenComparator implements Comparator<String> {
	public int compare(String s1, String s2) {
		int num = s1.length() - s2.length();
		if (num == 0) {
			return s1.compareTo(s2);
		}
		return num;
	}
}
Collections类为List集合单独提供了排序和查找的方法,排序方法使用的还是对象的比较方法compareTo(),或者指定比较器;使用查找方法时一定要保证List集合是有序的,并且List集合的排序比较方式和查找方法中的比较方式一致(这是有二分查找原理决定的)。

Collections类常用方法

------  获取Collection最值方法,当有多个相同最值时,只会返回其中一个对象
// 根据元素的自然顺序,返回给定collection的最大元素

static <T extends Object & Comparable<? super T>> T max(collection<? extends T> coll);  

// 根据指定比较器产生的顺序,返回给定collection的最大元素

static <T> T max(Collection<? extends T> coll, Comparator<? super T> comp);

// 根据元素的自然顺序,返回给定collection的最小元素

static <T extends Object & Comparable<? super T>> T min(collection<? extends T> coll);

// 根据指定比较器产生的顺序,返回给定collection的最小元素

static <T> T min(Collection<? extends T> coll, Comparator<? super T> comp);

------  synchronized方法通过内部类继承Collection、Map接口,并重写里面的方法,定义Object mutex锁对象来实现对集合对象的操作的同步。注意在对集合进行迭代操作的时候,迭代代码块是要手动加锁。JDK给出如下示例。

<span style="white-space:pre">	</span>Set s = Collections.synchronizedSet(new HashSet());
	...
	synchronized(s) {
	<span style="white-space:pre">	</span>Iterator i = s.iterator(); // Must be in the synchronized block
		while (i.hasNext())
		    foo(i.next());
<span style="white-space:pre">	</span>}
还在下面强调:不遵从此建议将导致无法确定的行为。那是因为如果不锁定,在迭代操作时,其它线程修改了s的元素,就会导致迭代出错。由此也可看出Collections中的synchronized方法也不是绝对线程安全的。

// 返回一个线程安全的collection

static <T> Collection<T> synchronizedCollection(Collection<T> c);
// 返回一个线程安全的List

static <T> List<T> synchronizedList(List<T> list);

// 返回一个线程安全的Set

static <T> Set<T> synchronizedSet(Set<T> s);

// 返回一个线程安全的Map

static <K, V> Map<K, V> synchronizedMap(Map<K, V> m);

### 回答1: 说的是java的集合工具类java中提供了很多集合工具类,如java.util.Collections。这个类提供了一些静态方法,用于操作集合,如排序、搜索、交换等。例如,sort方法可以对List进行排序,reverse方法可以将List的顺序反转,shuffle方法可以随机打乱List的顺序。 Collections类还提供了一些限制访问的集合,如unmodifiableList,unmodifiableSet等。这些集合可以防止对集合的修改,因此在多线程环境中非常有用。 此外,还有一些其他的集合工具类,如Arrays,它提供了一些静态方法,用于操作数组,如排序、搜索等。 总的来说,java的集合工具类为开发人员提供了很多方便的工具,可以大大简化开发工作。 ### 回答2: Java Collections是一个类库,用于存储和操作对象集合。它包含了一些常见的数据结构,如列表、集合、映射等,并提供了许多通用的算法和操作方法,这些方法可以快速地实现操作集合并且能够提高编程的效率。常用的集合类有ArrayList、LinkedList、HashSet、TreeSet、HashMap和TreeMap,它们都是实现了相应数据结构的类。 Collections工具类则是集合框架中的一个工具类,提供了一些静态方法,可以方便地对集合进行排序、查找、替换、反转、洗牌等操作。常用的方法有sort()、binarySearch()、reverse()、shuffle()、addAll()等。其中sort()方法是对集合进行升序排序的方法,shuffle()方法用于打乱集合元素的顺序,binarySearch()方法用于在有序集合中查找元素的位置,reverse()方法用于反转集合元素的顺序,addAll()方法用于向集合中添加多个元素等。 除了以上提到的方法,还有很多其他常用的方法,比如max()、min()、replaceAll()、rotate()等,它们也能在实际程序中提高开发效率。 总之,Collections工具类Java集合框架中非常实用的一个工具类,它提供了一些快速而便捷地操作集合的方法,能够简化程序的编写并提高程序的效率。在实际应用中,我们应该熟练掌握这些方法的使用,并灵活运用它们来提高自己的编程技能。 ### 回答3: Java CollectionsJava中的一个重要工具类,它提供了一系列用于存储和操作对象的数据结构,如List、Set、Map等,方便对数据进行管理和操作。Java Collections 提供了以下集合框架接口和类: 1. Collection接口:是Java集合中的“根”。所有集合接口中定义的公共方法都包含在此接口中,如添加、删除、清除、以及获取集合元素等。 2. List接口:是有序集合,可以通过索引访问其中的元素,并可以允许重复元素存在。其中ArrayList是基于动态数组实现,而LinkedList则是基于双向链表实现。 3. Set接口:是用于存储不重复元素的集合,不允许重复元素存在。HashSet是基于哈希表实现,而TreeSet则是基于红黑树实现。 4. Map接口:以键值对的形式存储元素,允许键和值都可以为 null。HashMap是基于哈希表实现,而TreeMap则是基于红黑树实现。 5. Queue接口:是一个FIFO(先进先出)的集合,常用的实现类有LinkedList和PriorityQueue。 6. Stack接口:是一个LIFO(后进先出)的集合,常用的实现类有Stack。 Java Collections 提供的工具类主要有: 1. Collections:提供了对集合的排序、查找、复制、填充、反转等操作。 2. Arrays:提供了对数组的排序、查找、等操作。 3. Comparator:提供了比较器接口,可以实现自定义排序。 4. Iterator:提供了对集合的迭代器,可以遍历集合中的元素。 5. Enumeration:提供了对集合的枚举器,用于遍历早期版本集合类中的元素。 Java Collections 的应用非常广泛,例如在数据库开发中,常常使用 Map 来表示一条记录,List 来表示一张表,通过迭代器遍历列表进行操作等。掌握和熟练使用 Java Collections 工具类,可以提高 Java程序设计师的开发效率以及代码质量。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值