Java에서 목록을 만드는 다양한 방법

목록은 정말 중요합니다. 요소를 추가하거나 제거할 때 자동으로 크기를 조정할 수 있는 유연성을 추가합니다. 이것은 어떤 형식으로 사용자로부터 입력을 받고 어떤 배열에 얼마나 많은 객체를 저장해야 하는지 모를 때 특히 유용합니다. 배열은 초기화될 때 고정된 크기이므로 크기를 조정하려면 더 큰 배열을 새로 만들고 요소를 복사해야 합니다. 이것은 완벽하게 가능하지만 List 유형이 이 작업을 수행합니다.

그래서 우리는 그 이유를 알고 있습니다. 목록을 생성할 수 있는 여러 가지 방법을 살펴보겠습니다.

배열 목록<>()



우리 대부분이 사용할 첫 번째 목록 유형은 ArrayList 입니다. 요소가 입력된 순서대로 정렬된 요소를 유지합니다. String 요소를 사용하여 이 유형의 List를 선언하고 초기화하는 가장 간단한 방법은 다음과 같습니다.

List<String> list = new ArrayList<>();
list.add("Here");
list.add("we");
list.add("add");
list.add("elements");


요소를 만들고 추가하는 이 방법은 다른 데이터 구조나 입력을 반복하면서 입력이 멈출 때까지 요소를 가져올 때 특히 유용합니다. 예를 들어Scanner 및 IDE의 표준 입력 스트림

Scanner scan = new Scanner(System.in);
// user input = 1 2 3 4 e
while(scan.hasNextInt()) { // returns true if element is an int
    list.add(scan.nextInt());
}
// list = {1,2,3,4}


Arrays.asList()



이는 알 수 없는 수의 요소를 List로 가져오는 좋은 방법이지만, 이미 배열이 있는 경우 List로 변환해야 하는 경우는 어떻게 될까요? 이를 위한 앱 유틸리티 방법이 있습니다! Arrays 클래스에서;

String[] strings = new String[]{"Here's", "some", "strings",
    "in a", "string array"};
List<String> asList = Arrays.asList(strings);


Voila, 우리String[]가 이제 목록입니다. 원하는 대로 요소를 추가하거나 제거할 수 있습니다. 그러나 Arrays.asList(array) 에 대한 인수로 입력한 배열이 목록의 기초로 사용되어 사용된다는 점에 유의하십시오(목록은 배열에 의해 뒷받침됨). 원래 배열에 대한 모든 변경 사항은 목록에 반영됩니다. 이것은 반대의 경우도 마찬가지입니다. 목록을 변경하면 배열에 반영됩니다.

strings[1] = "altered the string array"; // change the element at 
                                         // index 1
System.out.println(asList); // [Here's, altered the string array, 
                            // strings, in a, string array]


따라서 소스 배열에 주의하십시오. 그렇지 않으면 예상치 못한 결과가 나타날 수 있습니다.

목록.of()



목록을 빠르게 만드는 다음 방법은 List.of() 입니다. 이것은 List 인터페이스의 정적 메서드입니다. 정적은 다음과 같이 개체 인스턴스 없이 메서드를 호출할 수 있음을 의미합니다.

Person personInstance = new Person();
int age = personInstance.getAge(); // instance method

double pi = Math.PI; // static field from the Math class


List.of()의 단점(또는 이점)은 변경할 수 없는 목록을 반환한다는 것입니다. 즉, 요소를 추가하거나 제거할 수 없습니다. 염두에 두어야 할 사항이며 상황에 따라 필요에 따라 다를 수 있습니다.

List<String> listOfList = List.of("Can't", "change", "this", 
    "list");
listOfList.add("add me please"); // throws 
                                 // UnsupportedOperationException


그러나 요소의 내부 상태는 여전히 변경될 수 있음을 알아야 합니다. 즉, Person() 목록이 있는 경우 다음 명령문을 호출할 수 있습니다.

listOf.get(1).setAge(32);


예외가 발생하지 않고.

Arrays.stream()



목록을 생성하기 위해 제안할 마지막 방법은 스트림을 사용하는 것입니다. 스트림은 2014년 버전 8에서 Java에 추가되었습니다. 스트림은 큰 주제이며 일단 익숙해지면 데이터 구조 작업을 훨씬 쉽게 해주기 때문에 살펴볼 가치가 있습니다. 본질적으로, 당신은 한쪽 끝에서 개체 그룹을 보내고 중간에서 이 그룹에 대해 다양한 작업을 수행한 다음(중간 작업), 끝에서 모두 다시 수집(터미널 작업)하고 데이터 구조로 다시 패키지합니다. 당신의 즐거운.

List<String> streamList = 
    Arrays.stream(strings).collect(Collectors.toList());


이것은 목록을 생성하기 위한 위의 방법에 비해 과한 것 같지만 스트림을 사용하는 일부 중간 작업은 filter() 입니다. 여기서 "s"로 시작하는 문자열을 제거할 수 있습니다(예: skip(n)는 처음 n개 요소를 건너뛰거나 sorted() )는 자연스러운 순서에 따라 스트림의 요소를 정렬합니다. 내가 말했듯이 스트림을 사용하면 좋은 점과 유용한 이점이 많이 있습니다.

그게 다야, 우리는 끝났어. 유용한 정보를 찾으셨기를 바랍니다. 제 사실을 확인하기 위해 이 글을 쓰고 문서를 읽는 것을 즐겼습니다. 추가하고 싶은 것이 있으면(제 첫 번째 Dev.to 게시물에, 그 이하도 아닙니다!) 아래에 의견을 말하십시오.

읽어 주셔서 감사합니다!

좋은 웹페이지 즐겨찾기