Как преобразовать массив в набор в Java

Двумерная матрица N * N является квадратной матрицей

Идея:

Мы должны проходить в четырех разных направлениях, чтобы пересечь как спираль. Мы должны пересечь внутреннюю матрицу после того, как закончится один слой спирали. Итак, всего, нам нужно 5 петель, 4 петли для прохождения по спирали и 1 петля для прохождения через слои.

public void printSpiralForm(int[][] a, int length)
{

  for( int i = 0 , j = length-1 ; i < j ; i++ , j-- )
  {

    for( int k = i ; k < j ; k++ )
    {
      System.out.print( a[i][k] + " " ) ;
    }

    for( int k = i ; k < j ; k++ )
    {
      System.out.print(a[k][j] + " ");
    }

    for( int k = j ; k > i ; k-- )
    {
      System.out.print(a[j][k] + " ") ;
    }

    for( int k = j ; k > i ; k-- )
    {
      System.out.print( a[k][i] + " " ) ;
    }

  }

  if ( length % 2 == 1 )
  {
    System.out.println( a[ length/2 ][ length/2 ] ) ;
  }

}

651
задан Bob Gilmore 11 April 2016 в 20:23
поделиться

5 ответов

Примерно так:

Set<T> mySet = new HashSet<>(Arrays.asList(someArray));

В Java 9+, если неизменяемый набор в порядке:

Set<T> mySet = Set.of(someArray);

В Java 10+ параметр универсального типа может быть выведен из типа компонента массива:

var mySet = Set.of(someArray);
1175
ответ дан 22 November 2019 в 21:42
поделиться

С Guava вы можете:

T[] array = ...
Set<T> set = Sets.newHashSet(array);
121
ответ дан 22 November 2019 в 21:42
поделиться

После выполнения Arrays.asList(array) вы можете выполнить Set set = new HashSet(list);

Вот пример метода, который вы можете написать:

public <T> Set<T> GetSetFromArray(T[] array) {
    return new HashSet<T>(Arrays.asList(array));
}
18
ответ дан 22 November 2019 в 21:42
поделиться
Set<T> mySet = new HashSet<T>();
Collections.addAll(mySet, myArray);

Это Collections.addAll(java.util.Collection, T...) из JDK 6.

Дополнительно: что если наш массив полон примитивов?

Для JDK < 8 я бы просто написал очевидный цикл for, чтобы выполнить обертывание и добавление к множеству за один проход.

Для JDK >= 8 привлекательным вариантом будет что-то вроде:

Arrays.stream(intArray).boxed().collect(Collectors.toSet());
210
ответ дан 22 November 2019 в 21:42
поделиться

новый HashSet (Arrays.asList (Object [] a));

Но я думаю, что это было бы более эффективно:

final Set s = new HashSet<Object>();    
for (Object o : a) { s.add(o); }         
-2
ответ дан 22 November 2019 в 21:42
поделиться
Другие вопросы по тегам:

Похожие вопросы: