산업 제조
산업용 사물 인터넷 | 산업자재 | 장비 유지 보수 및 수리 | 산업 프로그래밍 |
home  MfgRobots >> 산업 제조 >  >> Industrial programming >> java

자바 WeakHashMap

자바 WeakHashMap

이 자습서에서는 예제를 통해 Java WeakHashMap 및 해당 작업에 대해 배웁니다. WeakHashMap과 HashMap의 차이점에 대해서도 알아보겠습니다.

WeakHashMap Java 컬렉션 프레임워크의 클래스는 해시 테이블 데이터 구조의 기능을 제공합니다.

지도 인터페이스를 구현합니다.

참고 :약한 해시맵의 키는 WeakReference 유형.

약한 참조 유형의 개체는 참조가 프로그램에서 더 이상 사용되지 않는 경우 Java에서 가비지 수집될 수 있습니다.

먼저 약한 해시 맵을 만드는 방법을 알아보겠습니다. 그런 다음 해시맵과 어떻게 다른지 알아보겠습니다.

<시간>

WeakHashMap 만들기

약한 해시맵을 생성하려면 java.util.WeakHashMap을 가져와야 합니다. 먼저 패키지. 패키지를 가져온 후 Java에서 약한 해시맵을 만드는 방법은 다음과 같습니다.

//WeakHashMap creation with capacity 8 and load factor 0.6
WeakHashMap<Key, Value> numbers = new WeakHashMap<>(8, 0.6);

위의 코드에서 numbers라는 약한 해시맵을 만들었습니다. .

여기,

new WeakHashMap<>(8, 0.6) 부분을 확인하세요. . 여기서 첫 번째 매개변수는 용량입니다. 두 번째 매개변수는 loadFactor입니다. .

기본 용량 및 부하율

용량과 부하율을 정의하지 않고 약한 해시맵을 생성하는 것이 가능합니다. 예를 들어,

// WeakHashMap with default capacity and load factor
WeakHashMap<Key, Value> numbers1 = new WeakHashMap<>();

기본적으로

<시간>

HashMap과 WeakHashMap의 차이점

Java에서 약한 해시맵의 구현을 살펴보겠습니다.

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of numbers
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>();

        String two = new String("Two");
        Integer twoValue = 2;
        String four = new String("Four");
        Integer fourValue = 4;

        // Inserting elements
        numbers.put(two, twoValue);
        numbers.put(four, fourValue);
        System.out.println("WeakHashMap: " + numbers);

        // Make the reference null
        two = null;

        // Perform garbage collection
        System.gc();

        System.out.println("WeakHashMap after garbage collection: " + numbers);
    }
}

출력

WeakHashMap: {Four=4, Two=2}
WeakHashMap after garbage collection: {Four}

보시다시피 2 키가 약한 해시맵의 null으로 설정됨 가비지 수집을 수행하면 키가 제거됩니다.

해시맵과 달리 약한 해시맵의 키는 약한 참조이기 때문입니다. 유형. 이는 해당 항목에 대한 키가 더 이상 사용되지 않는 경우 가비지 수집기에 의해 맵 항목이 제거됨을 의미합니다. 이것은 자원을 절약하는 데 유용합니다.

이제 해시맵에서 동일한 구현을 살펴보겠습니다.

import java.util.HashMap;

class Main {
    public static void main(String[] args) {
        // Creating HashMap of even numbers
        HashMap<String, Integer> numbers = new HashMap<>();

        String two = new String("Two");
        Integer twoValue = 2;
        String four = new String("Four");
        Integer fourValue = 4;

        // Inserting elements
        numbers.put(two, twoValue);
        numbers.put(four, fourValue);
        System.out.println("HashMap: " + numbers);

        // Make the reference null
        two = null;

        // Perform garbage collection
        System.gc();

        System.out.println("HashMap after garbage collection: " + numbers);
    }
}

출력

HashMap: {Four=4, Two=2}
HashMap after garbage collection: {Four=4, Two=2}

여기서 키 2일 때 해시맵의 null로 설정됩니다. 가비지 수집을 수행하면 키가 제거되지 않습니다.

이는 약한 해시맵과 달리 해시맵의 키는 강력한 참조이기 때문입니다. 유형. 이는 해당 항목의 키가 더 이상 사용되지 않더라도 지도 항목이 가비지 수집기에 의해 제거되지 않음을 의미합니다.

참고 :약한 해시맵의 키는 약한 참조인 반면 해시맵의 키는 강한 참조라는 점을 제외하고 해시맵과 약한 해시맵의 모든 기능은 유사합니다.

<시간>

다른 지도에서 WeakHashMap 만들기

다음은 다른 지도에서 약한 해시맵을 만드는 방법입니다.

import java.util.HashMap;
import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating a hashmap of even numbers
        HashMap<String, Integer> evenNumbers = new HashMap<>();

        String two = new String("Two");
        Integer twoValue = 2;
        evenNumbers.put(two, twoValue);
        System.out.println("HashMap: " + evenNumbers);

        // Creating a weak hash map from other hashmap
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>(evenNumbers);

        System.out.println("WeakHashMap: " + numbers);
    }
}

출력

HashMap: {Two=2}
WeakHashMap: {Two=2}
<시간>

WeakHashMap 메소드

WeakHashMap 클래스는 지도에서 다양한 작업을 수행할 수 있는 메서드를 제공합니다.

<시간>

WeakHashMap에 요소 삽입

예를 들어,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> evenNumbers = new WeakHashMap<>();

        String two = new String("Two");
        Integer twoValue = 2;

        // Using put()
        evenNumbers.put(two, twoValue);

        String four = new String("Four");
        Integer fourValue = 4;

        // Using putIfAbsent()
        evenNumbers.putIfAbsent(four, fourValue);
        System.out.println("WeakHashMap of even numbers: " + evenNumbers);

        //Creating WeakHashMap of numbers
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>();

        String one = new String("One");
        Integer oneValue = 1;
        numbers.put(one, oneValue);

        // Using putAll()
        numbers.putAll(evenNumbers);
        System.out.println("WeakHashMap of numbers: " + numbers);
    }
}

출력

WeakHashMap of even numbers: {Four=4, Two=2}
WeakHashMap of numbers: {Two=2, Four=4, One=1}
<시간>

WeakHashMap 요소에 액세스

1. entrySet(), keySet() 및 values() 사용

예를 들어,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>();

        String one = new String("One");
        Integer oneValue = 1;
        numbers.put(one, oneValue);

        String two = new String("Two");
        Integer twoValue = 2;
        numbers.put(two, twoValue);

        System.out.println("WeakHashMap: " + numbers);

        // Using entrySet()
        System.out.println("Key/Value mappings: " + numbers.entrySet());

        // Using keySet()
        System.out.println("Keys: " + numbers.keySet());

        // Using values()
        System.out.println("Values: " + numbers.values());
    }
}

출력

WeakHashMap: {Two=2, One=1}
Key/Value mappings: [Two=2, One=1]
Keys: [Two, One]
Values: [1, 2]

2. get() 및 getOrDefault() 사용

예를 들어,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>();

        String one = new String("One");
        Integer oneValue = 1;
        numbers.put(one, oneValue);

        String two = new String("Two");
        Integer twoValue = 2;
        numbers.put(two, twoValue);

        System.out.println("WeakHashMap: " + numbers);

        // Using get()
        int value1 = numbers.get("Two");
        System.out.println("Using get(): " + value1);

        // Using getOrDefault()
        int value2 = numbers.getOrDefault("Four", 4);
        System.out.println("Using getOrDefault(): " + value2);

    }
}

출력

WeakHashMap: {Two=2, One=1}
Using get(): 2
Using getOrDefault(): 4
<시간>

WeakHashMap 요소 제거

예를 들어,

import java.util.WeakHashMap;

class Main {
    public static void main(String[] args) {
        // Creating WeakHashMap of even numbers
        WeakHashMap<String, Integer> numbers = new WeakHashMap<>();

        String one = new String("One");
        Integer oneValue = 1;
        numbers.put(one, oneValue);

        String two = new String("Two");
        Integer twoValue = 2;
        numbers.put(two, twoValue);

        System.out.println("WeakHashMap: " + numbers);

        // Using remove() with single parameter
        int value = numbers.remove("Two");
        System.out.println("Removed value: " + value);

        // Using remove() with 2 parameters
        boolean result = numbers.remove("One", 3);
        System.out.println("Is the entry {One=3} removed? " + result);

        System.out.println("Updated WeakHashMap: " + numbers);
    }
}

출력

WeakHashMap: {Two=2, One=1}
Removed value: 2
Is the entry {One=3} removed? False
Updated WeakHashMap: {One=1}
<시간>

WeakHashMap의 다른 방법

메소드 설명
clear() 지도에서 모든 항목을 제거합니다.
containsKey() 지도에 지정된 키가 포함되어 있는지 확인하고 부울 값을 반환합니다.
containsValue() 지도에 지정된 값이 포함되어 있는지 확인하고 부울 값을 반환합니다.
size() 지도의 크기를 반환
isEmpty() 지도가 비어 있는지 확인하고 부울 값을 반환합니다.
<시간>

자세한 내용은 Java WeakHashMap(공식 Java 설명서)을 참조하십시오.


java

  1. 자바 연산자
  2. 자바 주석
  3. 자바 for-each 루프
  4. 자바 문자열
  5. 자바 인터페이스
  6. 자바 익명 클래스
  7. 자바 리소스 사용
  8. 자바 주석
  9. 자바 어설션
  10. 자바 벡터