`
MouseLearnJava
  • 浏览: 459817 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Collections用法整理

阅读更多

Collections (java.util.Collections) 工具类包含了很多有关集合操作的静态方法,使用这些方法能帮我们简化代码。

本文将整理Collections工具类的一些基本方法。

1. 获取List中的最小值

 

List<Integer> intList = Arrays.asList(33, 24, 18, 6, 9, 99);
// 6
System.out.println(java.util.Collections.min(intList));

 2. 获取List中的最大值

 

 

List<Integer> intList = Arrays.asList(33, 24, 18, 6, 9, 99);
// 99
System.out.println(java.util.Collections.max(intList));

 

 

3. Shuffle

Shuffle方法可以使一个集合的元素乱序化。比如,一副牌的集合为cardList (类型List<Card>), 使用Collections.shuffle(cardList)就能使一副牌处于乱序,达到洗牌的目的。

 

List<Integer> intList = Arrays.asList(33, 24, 18, 6, 9, 99);
Collections.shuffle(intList);
// 一次测试的结果
// [6, 18, 33, 24, 99, 9]
System.out.println(intList);

 

4. nCopies

该方法用于返回一个不可变列表组成的n个拷贝的指定对象。

 

// 生成一个由10个100组成的整数列表
List<Integer> nCopiesList = Collections.nCopies(10, 100);
//[100, 100, 100, 100, 100, 100, 100, 100, 100, 100]
    System.out.println(nCopiesList);

 

5. sort

该方法用于对集合排序。

 

List<Integer> intList = Arrays.asList(33, 24, 18, 6, 9, 99);
Collections.sort(intList);

 

 

 

上述例子没有包含Comparator参数,。我们也可以结合Comparator对对象集合进行排序。 比如对存放Person类的对象集按照年龄进行排序。

 

package com.thecodesmaple.example.collection;
 
public class Person {
 
    private int age;
 
    private String firstName;
 
    private String lastName;
 
    public Person(int age, String firstName, String lastName) {
        this.age = age;
        this.firstName = firstName;
        this.lastName = lastName;
    }
 
    public int getAge() {
        return age;
    }
 
    public void setAge(int age) {
        this.age = age;
    }
 
    public String getFirstName() {
        return firstName;
    }
 
    public void setFirstName(String firstName) {
        this.firstName = firstName;
    }
 
    public String getLastName() {
        return lastName;
    }
 
    public void setLastName(String lastName) {
        this.lastName = lastName;
    }
 
    public String toString() {
        return "Age: " + age + " FirstName " + firstName + " LastName: "
                + lastName;
    }
 
}

 

List<Person> personList = Arrays.asList(new Person(21, "Eric", "W"),
				new Person(17, "John", "A"), new Person(28, "Allan", "H"),
				new Person(15, "Jonas", "B"));
		// [Age: 21 FirstName Eric LastName: W, Age: 17 FirstName John LastName:
		// A, Age: 28 FirstName Allan LastName: H, Age: 15 FirstName Jonas
		// LastName: B]
		System.out.println(personList);

		Collections.sort(personList, new Comparator<Person>() {

			@Override
			public int compare(Person p1, Person p2) {
				return p1.getAge() - p2.getAge();
			}

		});

		// [Age: 15 FirstName Jonas LastName: B, Age: 17 FirstName John
		// LastName: A, Age: 21 FirstName Eric LastName: W, Age: 28 FirstName
		// Allan LastName: H]
		System.out.println("按照年龄排序后:");
		System.out.println(personList);

 

 

 
 

6. binarySearch

 

   List<Integer> intList = Arrays.asList(33, 24, 18, 6, 9, 99);
// 2
System.out.println(Collections.binarySearch(intList, 18));
 

 

7. copy

用两个参数,一个目标 List 和一个源 List, 将源的元素拷贝到目标,并覆盖它的内容。目标 List至少与源一样长。

List<String> listOne = Arrays.asList("A", "B", "C", "D");
        List<String> listTwo = Arrays.asList("X", "Y", "Z");
        Collections.copy(listOne, listTwo);
        System.out.println(listOne);// [X, Y, Z, D]
        System.out.println(listTwo);//[X, Y, Z]
 
List<Person> personList = Arrays.asList(new Person(21, "Eric", "W"),
                new Person(17, "John", "A"), new Person(28, "Allan", "H"),
                new Person(15, "Jonas", "B"));
        // [Age: 21 FirstName Eric LastName: W, Age: 17 FirstName John LastName:
        // A, Age: 28 FirstName Allan LastName: H, Age: 15 FirstName Jonas
        // LastName: B]
        System.out.println(personList);
 
        Collections.sort(personList, new Comparator<Person>() {
 
            @Override
            public int compare(Person p1, Person p2) {
                return p1.getAge() - p2.getAge();
            }
 
        });
 
        // [Age: 15 FirstName Jonas LastName: B, Age: 17 FirstName John
        // LastName: A, Age: 21 FirstName Eric LastName: W, Age: 28 FirstName
        // Allan LastName: H]
        System.out.println("按照年龄排序后:");
        System.out.println(personList);
 
8. disJoint

用于检查两个集合有无相同的元素,如果没有则返回true。

 

 

List<String> list3 = Arrays.asList("A", "B", "C", "D");
List<String> list4 = Arrays.asList("X", "Y", "Z");
boolean disJoint = Collections.disjoint(list3, list4);
// true
System.out.println(disJoint);
 

 

 

9. fill

使用指定元素替换指定列表中的所有元素

 

List<String> testList = Arrays.asList("A", "B", "C", "D");
Collections.fill(testList, "Z");
// [Z, Z, Z, Z]
System.out.println(testList);
 

 

 

10. frequency

获取某个元素在集合中出现的次数。

 

List<String> testList = Arrays.asList("A", "B", "C", "D");
int freq = Collections.frequency(testList, "A");
// 1
System.out.println(freq);
 

 

 

11. indexOfSubList

返回指定源列表中第一次出现指定目标列表的起始位置

 

int index = Collections.indexOfSubList(Arrays.asList("A", "B", "C"),
                Arrays.asList("B"));
        // Print 1
        System.out.println(index);
 

 

 

12. lastIndexOfSubList

返回指定源列表中最后一次出现指定目标列表的起始位置

 

int lastIndex = Collections.lastIndexOfSubList(
        Arrays.asList("A", "B", "C", "B"), Arrays.asList("B"));
// Print 3
System.out.println(lastIndex);
 

 

 

13. emptyXXX

请参考之前的文章 http://thecodesample.com/?p=80

 

14. checkedXXX

 

List<String> stringList = Arrays.asList("A", "B", "C", "D");
List<String> typeSafeList = Collections.checkedList(stringList, String.class);
//[A, B, C, D]
System.out.println(typeSafeList);
 

 

15. reverse

反转列表中的元素顺序。

 

List<String> reverseCandidate = Arrays.asList("A", "B", "C");
        Collections.reverse(reverseCandidate);
        // [C, B, A]
        System.out.println(reverseCandidate);
 

 

 

16. replaceAll

 

List<String> replaceAllCandidate = Arrays.asList("A", "B", "C");
        // 将A用Z代替
        Collections.replaceAll(replaceAllCandidate, "A", "Z");
        // [Z, B, C]
        System.out.println(replaceAllCandidate);
 

 

17. swap

指定一个目标集合以及两个元素的索引,交换这两个指定位置元素的值。

 

List<String> swapCandidate = Arrays.asList("A", "B", "C");
        // 首尾元素交换
        Collections.swap(swapCandidate, 0, 2);
        // [C, B, A]
        System.out.println(swapCandidate);
 

 

18. synchronizedXXX

 

Collection<String> c = Collections
                .synchronizedCollection(new ArrayList<String>());
        List<String> list = Collections
                .synchronizedList(new ArrayList<String>());
        Set<String> set = Collections.synchronizedSet(new HashSet<String>());
        Map<String, String> m = Collections
                .synchronizedMap(new HashMap<String, String>());
 

 

19. unmodifiableXXX

 

List<String> unmodifiableList = Collections.unmodifiableList(Arrays
        .asList("A", "B", "C"));
 unmodifiableList.add("D");//此动作会抛异常
// Exception in thread "main" java.lang.UnsupportedOperationException
// at java.util.Collections$UnmodifiableCollection.add(Unknown Source)
// at
// com.thecodesmaple.example.collection.CollectionsExample.main(CollectionsExample.java:149)
 

 

20. singletonXXX

 

String init[] = { "One", "Two", "Three", "One", "Two", "Three" };
        List list1 = new ArrayList(Arrays.asList(init));
        List list2 = new ArrayList(Arrays.asList(init));
        list1.remove("One");
        // [Two, Three, One, Two, Three]
        System.out.println(list1);
        // [Two, Three, Two, Three]
        list2.removeAll(Collections.singleton("One"));
        System.out.println(list2);
 

 

 

21. rotate

根据指定的距离循环移动指定列表中的元素

 

List<String> rotateList = Arrays.asList("A", "B", "C", "D", "E", "F");
// [F, A, B, C, D, E]
// Collections.rotate(rotateList, 1);
// System.out.println(rotateList);
 
Collections.rotate(rotateList, 3);
// [D, E, F, A, B, C]
System.out.println(rotateList);
 

 

 

22. reverseOrder

 

List<String> reverseOrderTest = Arrays.asList("A", "B", "C", "D", "E",
        "F");
Comparator c = Collections.reverseOrder();
Collections.sort(reverseOrderTest, c);
// [F, E, D, C, B, A]
System.out.println(reverseOrderTest);
 

 

 

 

本文转自http://thecodesample.com/?p=122

更多程序实例请访问http://thecodesample.com/

1
0
分享到:
评论

相关推荐

    Python中内建模块collections如何使用

    在本篇内容里小编给大家整理的是关于Python中内建模块collections的用法,有需要的朋友们可以参考下。

    JAVA面试资料大全-整理.zip

    整理的java面试有关资源:如 1、 多线程有几种实现方法?同步有几种实现方法? 2、 JDBC 中的 PreparedStatement 相比 Statement 的好处? 3、 Java 中实现多态的机制是什么? 4、 说出 ArrayList,Vector, LinkedList ...

    JAVA_Thinking in Java(中文版 由yyc,spirit整理).chm

    8.7.1 使用Collections 8.7.2 使用Lists 8.7.3 使用Sets 8.7.4 使用Maps 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 8.9 练习 第9章 违例差错控制 9.1 基本违例 9.1.1 违例...

    java json依赖包 (lbc整理,其他有点问题).rar

    此包包含:commons-beanutils-1.9.3.jar、commons-collections.jar、...注意,网上其他的commons-beanutils-1.8.0.jar会与commons-collections.jar有部分方法冲突,使编译不能通过。 本版本经过自己测试使用,没问题。

    Thinking in Java(中文版 由yyc,spirit整理).chm

    8.7.1 使用Collections 8.7.2 使用Lists 8.7.3 使用Sets 8.7.4 使用Maps 8.7.5 决定实施方案 8.7.6 未支持的操作 8.7.7 排序和搜索 8.7.8 实用工具 8.8 总结 8.9 练习 第9章 违例差错控制 9.1 基本违例 9.1.1 违例...

    容器的分类

    97_什么是容器.容器的分类.Collection的介绍.List.Set的区别.重写toString方法的必要性.Collections的使用(ED2000.COM).rar

    java-server-interview-questions:java服务端面试题整理

    答:Collections.sort方法底层会调用Arrays.sort方法,底层实现都是TimeSort实现的。TimSort算法就是找到已经排好序数据的子序列,然后对剩余部分排序,然后合并起来. foreach和while的区别(编译之后) 线程池的种类...

    java抢票软件源码-interview:java面试题整理

    中高级java面试题整理 一 前端 简述一下HTTP请求的在客户端和服务端的请求过程 解答: get和post的基本区别?说说 tcp/ip协议、三次握手、窗口滑动机制 解答: 解答: 解答: 说说http,https协议; 解答: osi五层网络...

    Java学习笔记-个人整理的

    {4.8}Collections集合工具类}{86}{section.4.8} {4.9}Comparable与Comparator}{86}{section.4.9} {4.9.1}Comparable}{86}{subsection.4.9.1} {4.9.2}Comparator}{87}{subsection.4.9.2} {4.10}包装类}{87}{...

    c#实现的操作oracle通用类

    修改整理的一个通用类,用来操作oracle数据库 十分的方便,支持直接操作sql语句和Hash表操作.现在修补MIS我都用这个类,节约了大 量的代码与... using System.Collections; using System.Reflection; namespace MyOra

    java面试题精选

    Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符,表示按位与运算,&&是逻辑运算符,表示逻辑与(and)。 11、...

    Java 基础面试题

    13. Collections提供的工具方法 14. String、StringBuffer和StringBuilder区别 15. Map的键和值可以为null吗,为什么 16. 集合排序,内排序,外排序 17. 动态代理和静态代理 18. 封装、继承、多态 19. static...

    Java常见面试题208道.docx

    19.Collection 和 Collections 有什么区别? 20.List、Set、Map 之间的区别是什么? 21.HashMap 和 Hashtable 有什么区别? 22.如何决定使用 HashMap 还是 TreeMap? 23.说一下 HashMap 的实现原理? 24.说一下 ...

    JAVA面试题最全集

    被声明为final的方法也同样只能使用,不能重载 finally?再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。 ...

    JDK 1.5的泛型實現(Generics in JDK 1.5)

    JavaTwo 2002大會上針對泛型技術給出一個講題,並將內容整理為《Java 泛型技術之發展》一文(http://www.jjhou.com/javatwo-2002.htm)。該文所談的 Java 泛型語法以及 Java泛型技術之內部實作技術,在今天(被 ...

    shopify_latest-blog-post:在您的博客中显示最新的博客文章,或每个博客的最新博客文章

    没有简单的方法可以将您商店的所有博客文章排序到一个数组中,然后只需选择例如最近的 5 篇文章。 如果有 CollectionDrop blogs.all ,就像 collections.all 一样,那么所有艰苦的工作都已经完成了。 因此,在这...

    asp.net知识库

    使用.ashx文件处理IHttpHandler实现发送文本及二进制数据的方法 制作一个简单的多页Tab功能 一完美的关于请求的目录不存在而需要url重写的解决方案! 在C#中实现MSN消息框的功能 XmlHttp实现无刷新三联动ListBox 鼠标...

    C#浏览器编程,学习使用

    using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Text; using System.Windows.Forms; using System.IO; using System.Threading; using ...

Global site tag (gtag.js) - Google Analytics