Двумерная матрица 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 ] ) ;
}
}
Примерно так:
Set<T> mySet = new HashSet<>(Arrays.asList(someArray));
В Java 9+, если неизменяемый набор в порядке:
Set<T> mySet = Set.of(someArray);
В Java 10+ параметр универсального типа может быть выведен из типа компонента массива:
var mySet = Set.of(someArray);
С Guava вы можете:
T[] array = ...
Set<T> set = Sets.newHashSet(array);
После выполнения Arrays.asList(array)
вы можете выполнить Set set = new HashSet(list);
Вот пример метода, который вы можете написать:
public <T> Set<T> GetSetFromArray(T[] array) {
return new HashSet<T>(Arrays.asList(array));
}
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());
новый HashSet
Но я думаю, что это было бы более эффективно:
final Set s = new HashSet<Object>();
for (Object o : a) { s.add(o); }