Skip to content

Yet another programming solutions log

Sample bits from programming for the future generations.

Technologies Technologies
  • Algorithms and Data Structures
  • Java Tutorials
  • JUnit Tutorial
  • MongoDB Tutorial
  • Quartz Scheduler Tutorial
  • Spock Framework Tutorial
  • Spring Framework
  • Bash Tutorial
  • Clojure Tutorial
  • Design Patterns
  • Developer’s Tools
  • Productivity
  • About
Expand Search Form

Java Collections nCopies

farenda 2015-07-31 0

Problem:

How to create a Java List with copies of the same element? Java Collections.nCopies(n, T) does that, but has its quirks. Read on…

Solution:

One way to create a List consisting only of the same element is to use java.util.Collections.nCopies(n, T). The method creates an immutable List with n the same items.

The following example explains how nCopies(n, T) works:

package com.farenda.java;

import java.util.Collections;

public class CollectionsNCopies {

    static class MyObject {
        int x = 3;
    }

    public static void main(String[] args) {
        MyObject o = new MyObject();
        System.out.println("object: " + o + " with x = " + o.x);

        nTimes(3, o);

        // changes all items in list:
        o.x = 42;
        nTimes(3, o);
    }

    private static void nTimes(int i, MyObject proto) {
        System.out.println("Result:");
        for (MyObject mo : Collections.nCopies(i, proto)) {
            System.out.println(mo + " with x = " + mo.x);
        }
    }
}

Remember that returned List is immutable and cannot be changed. Also, nCopies(n, T) throws IllegalArgumentException when n < 0, but zero is allowed.

Running the above Java program gives the following:

object: com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 3
Result:
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 3
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 3
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 3
Result:
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 42
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 42
com.farenda.java.CollectionsNCopies$MyObject@677327b6 with x = 42

Note that all objects in returned lists refer to the same reference: 677327b6. So the element is never duplicated and changing any of them – changes all.

Share with the World!
Categories Java Tags java-collections
Previous: Java zip file
Next: Java Collections newSetFromMap

Recent Posts

  • Java 8 Date Time concepts
  • Maven dependency to local JAR
  • Caesar cipher in Java
  • Java casting trick
  • Java 8 flatMap practical example
  • Linked List – remove element
  • Linked List – insert element at position
  • Linked List add element at the end
  • Create Java Streams
  • Floyd Cycle detection in Java

Pages

  • About Farenda
  • Algorithms and Data Structures
  • Bash Tutorial
  • Bean Validation Tutorial
  • Clojure Tutorial
  • Design Patterns
  • Java 8 Streams and Lambda Expressions Tutorial
  • Java Basics Tutorial
  • Java Collections Tutorial
  • Java Concurrency Tutorial
  • Java IO Tutorial
  • Java Tutorials
  • Java Util Tutorial
  • Java XML Tutorial
  • JUnit Tutorial
  • MongoDB Tutorial
  • Quartz Scheduler Tutorial
  • Software Developer’s Tools
  • Spock Framework Tutorial
  • Spring Framework

Tags

algorithms bash bean-validation books clojure design-patterns embedmongo exercises git gof gradle groovy hateoas hsqldb i18n java java-basics java-collections java-concurrency java-io java-lang java-time java-util java-xml java8 java8-files junit linux lists log4j logging maven mongodb performance quartz refactoring regex rest slf4j solid spring spring-boot spring-core sql unit-tests

Yet another programming solutions log © 2021

sponsored