`
MouseLearnJava
  • 浏览: 467430 次
  • 性别: 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
分享到:
评论

相关推荐

    Java Collections集合继承结构_动力节点Java学院整理

    Java Collections框架是Java编程语言中用于管理集合的重要组成部分,它提供了对对象集合的高效操作和组织方式。在Java中,集合主要用于存储一组对象,而数组虽然也能存储对象,但其长度固定,不适合处理动态变化的...

    Collections工具类_动力节点Java学院整理

    在实际应用中,我们可以使用这些方法来对List集合进行排序和操作。例如: ```java public void testSort() { System.out.println("原始顺序:" + list); Collections.reverse(list); System.out.println(...

    underscore之Collections_动力节点Java学院整理

    这意味着无论是处理数组还是对象,开发者都可以使用相似的方法进行操作,无需关心数据结构的差异。然而,Collections并不支持Map和Set这两种ES6引入的集合类型。 `map`和`filter`是Collections中两个基础且常用的...

    Java常用代码整理

    8. **实用工具类**:Java.util.*包包含许多实用工具类,如Arrays、Collections、Date、Calendar、Random等,它们提供了大量静态方法,简化了常见任务的实现。 在"txt JAVA技术集合"中,可能包含了各种Java技术的...

    Collections:吓收集的东西,待整理

    "Collections:吓收集的东西,待整理"这个标题暗示了我们正面临一个包含多种JavaScript资源的集合,这些资源可能包括代码片段、教程、库或者工具,尚未经过系统的分类和整理。下面,我们将详细探讨JavaScript中的集合...

    Java面试题整理.docx

    ### Java面试题整理知识点 #### 数据结构理解与应用 **数据结构定义与分类:** - **集合结构**:集合中的元素除同属于一种类型外,彼此间没有其他关系。 - **线性结构**:线性结构中的数据元素之间存在一对一的...

    开发中遇到问题,解决后笔记整理

    这篇笔记主要记录了在使用JavaScript、ExtJS、Struts和Hibernate等技术时的一些问题及其解决方法。 首先,关于JavaScript读写XML文件的问题。JavaScript可以用于客户端的XML处理,但受限于安全策略,无法直接修改...

    Java面试题以及答案整理.pdf

    可以使用Java内置的`Collections.sort()`方法对集合进行排序,实现序列化则需实现`Serializable`接口。 14. **在COLLECTION框架中,实现比较要实现的接口** 要实现`Comparable&lt;T&gt;`接口,以便在集合中进行自然排序...

    容器的分类

    本篇文章将详细讲解容器的分类,重点探讨Java中的集合框架,包括List、Set以及重写toString方法的重要性,同时也会简单提及Collections类的使用。 首先,我们来了解容器的分类。在Java中,容器主要分为两大类:集合...

    java基础知识整理

    【Java基础知识整理】 Java是一种广泛使用的面向对象的编程语言,其基础知识构成了开发人员的基本技能集。以下是一些关键概念的详细解释: 1. **基本数据类型**:Java有8种基本数据类型,包括byte、short、int、...

    Java面试精选72题及答案整理.pdf

    Java是世界上最广泛使用的编程语言之一,特别是在企业级应用和服务器端开发中占据着主导地位。在面试中,Java相关的技术知识往往成为考察候选者技能的关键点。以下是对给定问题的详细解答: 1. **多线程实现与同步...

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

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

    C#基类整理C#比较全的基类集合

    这个压缩包文件“C#基类整理C#比较全的基类集合”可能包含了一系列C#基础类的代码示例和解释,帮助开发者理解和运用这些类。 首先,我们来看一下C#中的几个关键基类: 1. **System.Object**:所有C#类的终极基类,...

    java复习重点整理

    Java编程语言复习重点整理 1. **访问修饰符的区别**: - `public`:所有类都可以访问。 - `private`:仅限于在同一类内部访问。 - `protected`:同一包内的类和任何子类可以访问。 - 默认(friendly):同一包...

    JAVA核心面试知识整理-最全

    3. Collections工具类:提供集合操作的方法,如排序、查找、填充等。 五、多线程 1. Thread类:创建线程的方式之一,通过继承Thread类并重写run()方法。 2. Runnable接口:另一种创建线程方式,实现Runnable接口并...

    Java基础整理

    - **特点与用法**:静态成员(变量或方法)属于类本身而不是某个对象。 - **注意点**:静态成员在类加载时就创建了,不依赖于任何对象的存在。 - **使用时机**:当某个属性或方法被所有对象共享时,应考虑使用...

    java并发整理

    对于非线程安全的容器,可以考虑使用`Collections.synchronizedList`等工具类提供的线程安全版本,或者自定义同步机制来确保线程安全。 综上所述,Java并发编程是一个复杂但又极其重要的领域。掌握好基本概念和最佳...

    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容器对象整理

    - `Collections`类提供了大量静态方法,用于容器的操作和转换,例如排序、反转、填充等,体现了函数式编程思想。 这些知识点仅仅是Java容器对象的一部分,实际的博客可能会包含更多细节,如源码分析、性能对比和...

    Java面试题整理.zip

    3. **集合(Collections)**:Java集合框架包括List、Set、Map等接口及其实现类,如ArrayList、LinkedList、HashSet、HashMap等。面试官可能会考察你对这些类的理解,以及它们之间的区别和使用场景。 4. **反射...

Global site tag (gtag.js) - Google Analytics