Java에서 어레이를 만드는 방법
5개의 문자열 배열 개체가 있다고 가정합니다.
String[] array1 = new String[];
String[] array2 = new String[];
String[] array3 = new String[];
String[] array4 = new String[];
String[] array5 = new String[];
5개의 문자열 배열 개체를 포함하는 다른 배열 개체를 원합니다.제가 그걸 어떻게 합니까?다른 배열에 넣을 수 있나요?
다음과 같이 합니다.
String[][] arrays = { array1, array2, array3, array4, array5 };
또는
String[][] arrays = new String[][] { array1, array2, array3, array4, array5 };
(변수 선언 포인트 이외의 할당에서는 후자의 구문을 사용할 수 있지만 짧은 구문은 선언에서만 사용할 수 있습니다).
해라
String[][] arrays = new String[5][];
그 방법을 설명하는 두 가지 훌륭한 답변이 있지만, 또 다른 답변이 부족한 것 같습니다.대부분의 경우 당신은 그것을 전혀 하지 말아야 한다.
어레이는 번거롭기 때문에 대부분의 경우 Collection API를 사용하는 것이 좋습니다.
Collections를 사용하면 요소를 추가하거나 제거할 수 있으며 다양한 기능(인덱스 기반 검색, 정렬, 고유성, FIFO 액세스, 동시성 등)을 위한 전용 Collection이 있습니다.
어레이와 그 사용법을 아는 것은 물론 좋지만 대부분의 경우 컬렉션을 사용하면 API를 훨씬 더 관리하기 쉬워집니다(Google Guava와 같은 새로운 라이브러리는 어레이를 거의 사용하지 않습니다).
따라서 귀사의 시나리오에서는 목록 목록을 선호하고 Guava를 사용하여 목록을 작성합니다.
List<List<String>> listOfLists = Lists.newArrayList();
listOfLists.add(Lists.newArrayList("abc","def","ghi"));
listOfLists.add(Lists.newArrayList("jkl","mno","pqr"));
Sean Patrick Floyd와 함께 했던 코멘트에서 언급한 클래스가 있습니다.WeakReference가 필요한 특수한 용도로 사용했지만, 어떤 오브젝트에서도 쉽게 변경할 수 있습니다.
언젠가 누군가에게 도움이 되기를 바랍니다. :)
import java.lang.ref.WeakReference;
import java.util.LinkedList;
import java.util.NoSuchElementException;
import java.util.Queue;
/**
*
* @author leBenj
*/
public class Array2DWeakRefsBuffered<T>
{
private final WeakReference<T>[][] _array;
private final Queue<T> _buffer;
private final int _width;
private final int _height;
private final int _bufferSize;
@SuppressWarnings( "unchecked" )
public Array2DWeakRefsBuffered( int w , int h , int bufferSize )
{
_width = w;
_height = h;
_bufferSize = bufferSize;
_array = new WeakReference[_width][_height];
_buffer = new LinkedList<T>();
}
/**
* Tests the existence of the encapsulated object
* /!\ This DOES NOT ensure that the object will be available on next call !
* @param x
* @param y
* @return
* @throws IndexOutOfBoundsException
*/public boolean exists( int x , int y ) throws IndexOutOfBoundsException
{
if( x >= _width || x < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (get) : [ x = " + x + "]" );
}
if( y >= _height || y < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (get) : [ y = " + y + "]" );
}
if( _array[x][y] != null )
{
T elem = _array[x][y].get();
if( elem != null )
{
return true;
}
}
return false;
}
/**
* Gets the encapsulated object
* @param x
* @param y
* @return
* @throws IndexOutOfBoundsException
* @throws NoSuchElementException
*/
public T get( int x , int y ) throws IndexOutOfBoundsException , NoSuchElementException
{
T retour = null;
if( x >= _width || x < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (get) : [ x = " + x + "]" );
}
if( y >= _height || y < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (get) : [ y = " + y + "]" );
}
if( _array[x][y] != null )
{
retour = _array[x][y].get();
if( retour == null )
{
throw new NoSuchElementException( "Dereferenced WeakReference element at [ " + x + " ; " + y + "]" );
}
}
else
{
throw new NoSuchElementException( "No WeakReference element at [ " + x + " ; " + y + "]" );
}
return retour;
}
/**
* Add/replace an object
* @param o
* @param x
* @param y
* @throws IndexOutOfBoundsException
*/
public void set( T o , int x , int y ) throws IndexOutOfBoundsException
{
if( x >= _width || x < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (set) : [ x = " + x + "]" );
}
if( y >= _height || y < 0 )
{
throw new IndexOutOfBoundsException( "Index out of bounds (set) : [ y = " + y + "]" );
}
_array[x][y] = new WeakReference<T>( o );
// store local "visible" references : avoids deletion, works in FIFO mode
_buffer.add( o );
if(_buffer.size() > _bufferSize)
{
_buffer.poll();
}
}
}
사용 방법의 예:
// a 5x5 array, with at most 10 elements "bufferized" -> the last 10 elements will not be taken by GC process
Array2DWeakRefsBuffered<Image> myArray = new Array2DWeakRefsBuffered<Image>(5,5,10);
Image img = myArray.set(anImage,0,0);
if(myArray.exists(3,3))
{
System.out.println("Image at 3,3 is still in memory");
}
언급URL : https://stackoverflow.com/questions/4781100/how-to-make-an-array-of-arrays-in-java
'programing' 카테고리의 다른 글
사전을 상태 개체로 사용할 때 Vuex + vue가 반응하지 않음 (0) | 2023.01.21 |
---|---|
VUE 컴포넌트의 mapState에서 "this"를 호출하려면 어떻게 해야 합니까? (0) | 2023.01.01 |
Maria를 사용하여 Json 개체 내부의 특정 값으로 필드 업데이트DB (0) | 2023.01.01 |
「…로부터.import와 import를 비교합니다. (0) | 2023.01.01 |
SQL 쿼리가 atomic인지 확인하는 방법 (0) | 2023.01.01 |