📌  相关文章
📜  从Java中的Array中删除所有出现的元素

📅  最后修改于: 2022-05-13 01:55:11.157000             🧑  作者: Mango

从Java中的Array中删除所有出现的元素

给定一个数组和一个键,任务是从Java中的数组中删除所有出现的指定键。

例子:

Input: array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 }, key = 3
Output: [9, 2, 1, 7, 2, 5]

Input: array = { 10, 20, 10, 30, 50, 10 }, key = 10
Output: [20, 30, 50]
  1. 使用 Arrays.copyOf:

    // Java program remove all occurrences
    // of an element from Array using naive method
      
    import java.util.Arrays;
      
    class GFG {
      
        // function to remove all occurrences
        // of an element from an array
        public static int[] removeElements(int[] arr, int key)
        {
              // Move all other elements to beginning 
              int index = 0;
              for (int i=0; i
    输出:
    [9, 2, 1, 7, 2, 5]
    
    1. 使用Java 8 流:

      1. 获取数组和密钥。
      2. 过滤列表中等于给定键的所有元素
      3. 将列表转换回数组并返回。

      下面是上述方法的实现:

      // Java program remove all occurrences
      // of an element from Array
      // Using Java 8 Stream API
        
      import java.util.Arrays;
        
      class GFG {
        
          // function to remove all occurrences
          // of an element from an array
          public static int[] removeElements(int[] arr, int key)
          {
        
              // return a new array except given key
              return Arrays.stream(arr)
                  .filter(val -> val != key)
                  .toArray();
          }
        
          // Driver code
          public static void main(String[] args)
          {
        
              // Get the array
              int[] array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 };
        
              // Get the key
              int key = 3;
        
              // Remove the key
              array = removeElements(array, key);
        
              // Print the modified array
              System.out.println(Arrays.toString(array));
          }
      }
      
      输出:
      [9, 2, 1, 7, 2, 5]
      
    2. 使用Java数组列表:

      1. 获取数组和密钥。
      2. 创建一个空的 ArrayList
      3. 将数组中的所有元素插入到列表中,除了指定的键
      4. 将列表转换回数组并返回。

      下面是上述方法的实现:

      程序:

      // Java program remove all occurrences
      // of an element from Array
      // Using Java ArrayLists
        
      import java.util.*;
        
      class GFG {
        
          // function to remove all occurrences
          // of an element from an array
          public static int[] removeElements(int[] arr, int key)
          {
        
              // create an empty ArrayList
              List result = new ArrayList();
        
              // insert all elements from the array into the list
              // except the specified key
              for (int i : arr) {
                  if (i != key) {
                      result.add(i);
                  }
              }
        
              // convert the list back to an array and return it
              return result.stream()
                  .mapToInt(Integer::intValue)
                  .toArray();
          }
        
          // Driver code
          public static void main(String[] args)
          {
        
              // Get the array
              int[] array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 };
        
              // Get the key
              int key = 3;
        
              // Remove the key
              array = removeElements(array, key);
        
              // Print the modified array
              System.out.println(Arrays.toString(array));
          }
      }
      
      输出:
      [9, 2, 1, 7, 2, 5]
      
    3. 替代方法:

      1. 首先创建一个数组列表。
      2. 将数组的所有元素删除到列表中,其为指定键。
      3. 将列表转换回数组并返回它。

        下面是上述方法的实现:

        程序:

        // Java program remove all occurrences
        // of an element from Array
        // Using Java List
          
        import java.util.Arrays;
        import java.util.List;
        import java.util.stream.Collectors;
        import java.util.stream.IntStream;
          
        class GFG {
          
            // function to remove all occurrences
            // of an element from an array
            public static int[] removeElements(int[] arr, int key)
            {
          
                // Create a List
                // Insert all element of array into List
                List result = IntStream.of(arr) // IntStream
                                           .boxed()
                                           .collect(Collectors.toList());
          
                // check every element if found then remove
                for (int i = 0; i < result.size(); i++) {
                    if (result.get(i).equals(key)) {
                        result.remove(i--);
                    }
                }
          
                // convert the list back to an array and return it
                return result.stream()
                    .mapToInt(Integer::intValue)
                    .toArray();
            }
          
            // Driver code
            public static void main(String[] args)
            {
          
                // Get the array
                int[] array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 };
          
                // Get the key
                int key = 3;
          
                // Remove the key
                array = removeElements(array, key);
          
                // Print the modified array
                System.out.println(Arrays.toString(array));
            }
        }
        
        输出:
        [9, 2, 1, 7, 2, 5]
        
      4. 使用 List.removeAll():

        1. 首先创建一个空的数组列表。
        2. 将数组的所有元素插入到列表中
        3. 删除所有要删除的元素
        4. 将列表转换回数组并返回它。

        下面是上述方法的实现:

        程序:

        // Java program remove all occurrences
        // of an element from Array
          
        import java.util.*;
        import java.util.stream.*;
          
        class GFG {
          
            // function to remove all occurrences of key
            public static int[] removeElements(int[] arr, int key)
            {
          
                // Create a List
                // Insert all element of array into List
                List result = IntStream.of(arr) // IntStream
                                           .boxed()
                                           .collect(Collectors.toList());
          
                // remove all specific values and
                // an immutable set containing only the specified object
                result.removeAll(Collections.singleton(key));
          
                // sequential Stream over the elements in this collection
                // and return a new array
                return result.stream()
                    .mapToInt(Integer::intValue)
                    .toArray();
            }
          
            // Driver code
            public static void main(String[] args)
            {
          
                // Get the array
                int[] array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 };
          
                // Get the key
                int key = 3;
          
                // Remove the key
                array = removeElements(array, key);
          
                // Print the modified array
                System.out.println(Arrays.toString(array));
            }
        }
        
        输出:
        [9, 2, 1, 7, 2, 5]
        
      5. 使用 List.removeIf():

        1. 首先创建一个空的数组列表。
        2. 将数组的所有元素插入到列表中
        3. 使用 equals() 方法删除所有要删除的元素
        4. 将列表转换回数组并返回它。

        下面是上述方法的实现:

        程序:

        // Java program remove all occurrences
        // of an element from Array
          
        import java.util.*;
        import java.util.stream.*;
          
        class GFG {
          
            // function to remove all occurrences of key
            public static int[] removeElements(int[] arr, int key)
            {
          
                // Create a List
                // Insert all element of array into List
                List result = IntStream.of(arr) // IntStream
                                           .boxed()
                                           .collect(Collectors.toList());
          
                // remove all specific values if match
                result.removeIf(n -> (n.equals(key)));
          
                // convert list into new array and return
                return result.stream()
                    .mapToInt(Integer::intValue)
                    .toArray();
            }
          
            // Driver code
            public static void main(String[] args)
            {
          
                // Get the array
                int[] array = { 3, 9, 2, 3, 1, 7, 2, 3, 5 };
          
                // Get the key
                int key = 3;
          
                // Remove the key
                array = removeElements(array, key);
          
                // Print the modified array
                System.out.println(Arrays.toString(array));
            }
        }
        
        输出:
        [9, 2, 1, 7, 2, 5]