Эта программа работает для любой n * n-матрицы.
public class circ {
public void get_circ_arr (int n,int [][] a)
{
int z=n;
{
for (int i=0;i<n;i++)
{
for (int l=z-1-i;l>=i;l--)
{
int k=i;
System.out.printf("%d",a[k][l]);
}
for (int j=i+1;j<=z-1-i;j++)
{
int k=i;
{
System.out.printf("%d",a[j][k]);
}
}
for (int j=i+1;j<=z-i-1;j++)
{
int k=z-1-i;
{
System.out.printf("%d",a[k][j]);
}
}
for (int j=z-2-i;j>=i+1;j--)
{
int k=z-i-1;
{
System.out.printf("%d",a[j][k]);
}
}
}
}
}
}
Надеюсь, что это поможет
Вектор
синхронизируется при каждой отдельной операции. Это почти никогда не то, что вам нужно.
Обычно вы хотите синхронизировать всю последовательность операций. Синхронизация отдельных операций менее безопасна (например, если вы выполняете итерацию по вектору
, вам все равно необходимо снять блокировку, чтобы никто другой не изменил коллекцию одновременно, что может вызвать ошибку ] ConcurrentModificationException
в повторяющемся потоке), но также медленнее (зачем снимать блокировку многократно, если одного раза будет достаточно)?
Конечно, это также накладывает накладные расходы на блокировку, даже когда вам это не нужно.
По сути, это очень ошибочный подход к синхронизации в большинстве ситуаций. Как отметил Брайан Хенк , вы можете украсить коллекцию, используя такие вызовы, как Collections.synchronizedList
- тот факт, что Vector
объединяет реализацию коллекции «массив с измененным размером» с битом «синхронизировать каждую операцию», является еще одним примером плохой дизайн; подход декорирования дает более четкое разделение проблем.
Что касается эквивалента Stack
- я бы сначала посмотрел на Deque
/ ArrayDeque
.
Вы можете использовать метод synchronizedCollection / List в java.util.Collection
, чтобы получить поточно-безопасную коллекцию из небезопасной для потоков.
Вектор был частью 1.0 - исходная реализация имела два недостатка:
1. Именование: векторы на самом деле представляют собой просто списки, к которым можно обращаться как к массивам, поэтому его следовало назвать ArrayList
(который является заменой коллекций Java 1.2 для Vector
). ] 2. Параллелизм: Все методы get ()
, set ()
синхронизированы
, поэтому вы не можете иметь детальный контроль над синхронизацией.
Нет большой разницы между ArrayList
и Vector
, но вы должны использовать ArrayList
.
Из документа API.
Начиная с версии Платформа Java 2 v1.2, это класс был модифицирован для реализации Список интерфейса, что делает его членом каркас коллекций Java. В отличие от новые реализации коллекции, Вектор синхронизирован.
Экземпляр перечисления может иметь любое значение, присваиваемое базовому типу (т. е. int.MinValue
- int.MaxValue
для любого обычного перечисления).Вы можете получить список именованных значений, вызвав Enum.GetNames
и Enum.GetValues
.