Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Java

Java Collection-algoritmes: Sorteren, shuffelen en meer

Java Collection-algoritmes

In deze tutorial verkennen we de krachtige algoritmen die Java's Collections Framework biedt, met duidelijke, praktische voorbeelden.

Het Java Collections Framework levert een rijke set statische methoden – vaak generieke algoritmen genoemd – waarmee je datastructuren kunt manipuleren zonder boilerplate-code. Deze hulpmiddelen werken met elke collectie die de Collection-interface implementeert, en bieden zowel eenvoud als prestaties.

1. Sorteren met Collections.sort()

De sort()-methode ordent elementen in natuurlijke (oplopende) volgorde. Voor aangepaste ordening lever je een Comparator-implementatie.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(4);
        getallen.add(2);
        getallen.add(3);
        System.out.println("Onsorteerde ArrayList: " + getallen);
        Collections.sort(getallen);
        System.out.println("Gesorteerde ArrayList: " + getallen);
    }
}

Output

Onsorteerde ArrayList: [4, 2, 3]
Gesorteerde ArrayList: [2, 3, 4]

Voor aflopende volgorde of domeinspecifieke criteria, gebruik een aangepaste Comparator.

2. Willekeurige volgorde met Collections.shuffle()

Gebruik shuffle() om de volgorde van elementen te randomiseren, ideaal voor spellen of steekproeven.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(1);
        getallen.add(2);
        getallen.add(3);
        System.out.println("Gesorteerde ArrayList: " + getallen);
        Collections.shuffle(getallen);
        System.out.println("ArrayList na shuffelen: " + getallen);
    }
}

Output

Gesorteerde ArrayList: [1, 2, 3]
ArrayList na shuffelen: [2, 1, 3]

Elke run produceert een andere permutatie, dankzij het onderliggende Fisher-Yates-algoritme.

3. Routinematige datamanipulatie

Java biedt een reeks hulpmethoden om collecties te transformeren:

  • reverse() – keert de elementvolgorde om
  • fill() – vervangt elk element door een gespecificeerde waarde
  • copy() – kopieert elementen van ene collectie naar een andere (dezelfde grootte)
  • swap() – wisselt twee elementen op index
  • addAll() – voegt alle elementen van ene collectie toe aan een andere
import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(1);
        getallen.add(2);
        System.out.println("ArrayList1: " + getallen);
        Collections.reverse(getallen);
        System.out.println("Omgekeerde ArrayList1: " + getallen);
        Collections.swap(getallen, 0, 1);
        System.out.println("ArrayList1 na swap(): " + getallen);
        ArrayList<Integer> nieuweGetallen = new ArrayList<>();
        nieuweGetallen.addAll(getallen);
        System.out.println("ArrayList2 met addAll(): " + nieuweGetallen);
        Collections.fill(getallen, 0);
        System.out.println("ArrayList1 na fill(): " + getallen);
        Collections.copy(nieuweGetallen, getallen);
        System.out.println("ArrayList2 na copy(): " + nieuweGetallen);
    }
}

Output

ArrayList1: [1, 2]
Omgekeerde ArrayList1: [2, 1]
ArrayList1 na swap(): [1, 2]
ArrayList2 met addAll(): [1, 2]
ArrayList1 na fill(): [0, 0]
ArrayList2 na copy(): [0, 0]

Let op: De copy()-methode vereist dat de doelcollectie minstens evenveel elementen heeft als de bron.

4. Binaire zoeken met Collections.binarySearch()

Zoek efficiënt een element in een gesorteerde collectie. De methode retourneert de index of een negatieve invoegpositie als niet gevonden.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(1);
        getallen.add(2);
        getallen.add(3);
        int pos = Collections.binarySearch(getallen, 3);
        System.out.println("De positie van 3 is " + pos);
    }
}

Output

De positie van 3 is 2.

Tip: Sorteer de collectie altijd voordat je binarySearch() aanroept; anders is het resultaat ongedefinieerd.

5. Collectiesamenstelling

Deze hulpmiddelen analyseren relaties tussen collecties:

  • frequency() – telt voorkomens van een specifiek element
  • disjoint() – controleert of twee collecties geen gemeenschappelijke elementen delen
import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(1);
        getallen.add(2);
        getallen.add(3);
        getallen.add(2);
        System.out.println("ArrayList1: " + getallen);
        int aantal = Collections.frequency(getallen, 2);
        System.out.println("Aantal 2: " + aantal);
        ArrayList<Integer> nieuweGetallen = new ArrayList<>();
        nieuweGetallen.add(5);
        nieuweGetallen.add(6);
        System.out.println("ArrayList2: " + nieuweGetallen);
        boolean disjoint = Collections.disjoint(getallen, nieuweGetallen);
        System.out.println("Twee lijsten zijn disjunct: " + disjoint);
    }
}

Output

ArrayList1: [1, 2, 3, 2]
Aantal 2: 2
ArrayList2: [5, 6]
Twee lijsten zijn disjunct: true

6. Minimum en maximum vinden

Haalt het kleinste of grootste element op met min() en max() – nuttig voor analyses en grenscontroles.

import java.util.ArrayList;
import java.util.Collections;

class Main {
    public static void main(String[] args) {
        ArrayList<Integer> getallen = new ArrayList<>();
        getallen.add(1);
        getallen.add(2);
        getallen.add(3);
        int min = Collections.min(getallen);
        System.out.println("Minimum element: " + min);
        int max = Collections.max(getallen);
        System.out.println("Maximum element: " + max);
    }
}

Output

Minimum element: 1
Maximum element: 3

Java

  1. Java-operators beheersen: typen, syntax en praktische voorbeelden
  2. Java-commentaar: typen, gebruik en best practices
  3. Java if…else beheersen: control flow uitgelegd
  4. Java Enhanced For-lus beheersen: syntax, voorbeelden en best practices
  5. Java Strings beheersen: aanmaken, methodes en best practices
  6. Java interfaces meesteren: concepten, implementatie en best practices
  7. Java anonieme inner classes meesteren: definitie, syntax en praktische voorbeelden
  8. Java Try-with-resources meesteren: automatische resource management uitgelegd
  9. Java Annotaties uitgelegd: typen, plaatsing en praktische voorbeelden
  10. Java Assertions: een praktische gids voor bugdetectie en codebetrouwbaarheid
  11. Willekeurige Getallen Genereren in Java: Praktische Gids met Random en Math.random