[Java #13 / 250324] Collection

temi·2025년 3월 28일

Java

목록 보기
13/15
post-thumbnail

학원에서 학습한 내용을 개인정리한 글입니다.


수업

Collection 컬렉션

  • ArrayList 객체가 제공하는 메소드를 이용해서 데이터를 저장 관리함

선언

//List Interface
//X	List list = new List;  

//class implement list Interactive
//리스트를 구현한 클래스를 이용
//ArrayList, LinkedList
//선형자료구조를 가지고 있으며 Index number가있음
//데이터 순서가 있음
//중복값 저장이 가능
//클래스 이용방식으로 이용
ArrayList arrList;
arrList = new ArrayList();

선언

//저장히기
//add(Object): 맨 뒤에 추가 / add(index, object): 원하는 위치에 추가
arrList.add("OOO");//save 0 index
arrList.add("ㅁㅁㅁ");//save 1 index
System.out.println(arrList);

//별도의 설정이 없다면 Object타입으로 저장
arrList.add(10);
System.out.println(arrList);
arrList.add(true);
System.out.println(arrList);
//특정 인덱스에 데이터 추가
//add(index, 값)
arrList.add(2,180.5);
System.out.println(arrList);

수정

//데이터 수정하기
//특정 인덱스의 값을 변경하기
//set(index, 값)
arrList.set(0,"OUO");
System.out.println(arrList);

삭제

//clear(): 전체 데이터를 삭제
//remove(index): 특정인덱스의 값을 삭제할때
//remmove(Object): 인자값과 일치하는 값을 삭제
//*주의점: 비교하는 클래스에 equals, hasecode 메소드가 정의되어있어야함
arrList.clear();
System.out.println(arrList);
arrList.remove(0);
System.out.println(arrList);
arrList.remove(true);
System.out.println(arrList);

클래스 ArrayList로 관리

//클래스 선언해서 ArrayList로 관리
ArrayList foods = new ArrayList();
foods.add(new Food("냉면", 8000, "한식", 4));
foods.add(new Fo**od**("짜장면", 9000, "중식", 3));
System.out.println(foods);
foods.add(1, new Food("돈까스", 12000, "양식", 3));
System.out.println(foods);

foods.set(1, new Food("콩국수", 10000, "한식", 3));
System.out.println(foods);

foods.remove(0);
System.out.println(foods);
foods.remove(new Food("콩국수", 10000, "한식", 3));
System.out.println(foods);

foods.clear();
System.out.println(foods);

조회

//저장된 값 조회
//get(index)
Object o = arrList.get(0);
String name = (String)arrList.get(0);
System.out.println(name);
boolean flag = (Boolean)arrList.get(3);
System.out.println(flag);
Food temp = (Food)foods.get(0);
System.out.println(temp);

길이 구하기

//ArrayList 길이 구하기
//size()
System.out.println(foods.size());
System.out.println(arrList.size());
//반복문 이용해서 데이터 조회하기
for(int i = 0; i<arrList.size(); i++) {
	System.out.println(arrList.get(i));
}

//foods에서 전체 데이터타입, 이름, 가격 출력
for(int i = 0; i<foods.size(); i++) {
	Food n = (Food) foods.get(i);
	System.out.println(n.getType() + " " + n.getName() + " " + n.getPrice());
}

for(Object n: foods) {
	Food f =(Food)n;
	System.out.println(f.getType() + " " + f.getName() + " " + f.getPrice());
}

iterator

	//iterator()메소드를 이용해서 데이터를 조회하기 
	//Iterator Interface 구현체를 반환
	Iterator it = foods.iterator();
	while(it.hasNext()){
		Food f = (Food) it.next(); // 저장된 객체 한개 반환 
		System.out.println(f.getName());
	}
  • next
    • 데이터를 가져오면 그 안의 데이터가 사라짐.
    • 저장된 객체 한개 반환 토크나이저 nextToken과 비슷
  • hasNext
    • boolean형. 엘리먼트가 있으면 true 반환

List interface 제공하는 Dafault 메소드 이용

//List interface가 제공하는 Default메소드를 이용
foods.forEach(new Consumer() {
	@Override
	public void accept(Object o) {
		Food f = (Food) o1;
		System.out.println(f.getName());
	}
});
foods.forEach((o1) -> System.out.println(o1));
foods.forEach(System.out::println);
if(personList.contains(new Person("권ㅇㅇ", 29, 173.3, '남'))) {
			personList.add(new Person("권ㅇㅇ", 29, 173.3, '남'));
		}

contains

if(personList.contains(new Person("권ㅇㅇ", 29, 173.3, '남'))) {
			personList.add(new Person("권ㅇㅇ", 29, 173.3, '남'));
	}

indexOf/ lastIndexOf()

	int index = list.indexOf(new Person("김ㅇㄴ", 31, 174.3, '남'));
	System.out.println(index);
	((Person)list.get(index)).setName("김ㅁㅁ);

list.toArray()

//3.List 자료형을 객체 배열로 반환해주는 메소드
//toArray()함수 이용 -> Object[]로 반환
Object[] personArr = list.toArray();
for(Object o:personArr) {
	System.out.print(o);
}

list.toArray(value -> {
	System.out.println(value);
	Object[] obj = new Object[list.size()];
	Object o = list.get(value)
;			return new Object[] {o};
});

for(Object o: personArr) {
	System.out.println(o);
}
		

Arrays.asList()

//객체 배열을 List로 반환
//Arrays.asList() Method 이용
String[] names = {"OOO", "AAA", "BBB"};
System.out.println(names);;
//		List nameList = Arrays.asList(names);
List nameList = new ArrayList(Arrays.asList(names)); // 이렇게 쓰면 추가이용가능
System.out.println(nameList);

//		nameList.add("CCC"); // 불변 read Only, 길이 변경이 불가능
nameList.set(1, "GGG");
System.out.println(nameList);

List of()

//초기화한 List 생성하기
//List.of()
List numbers = List.of(1,2,3,4,5,6,7);
System.out.println(numbers);
//		numbers.add(8); // set과 add 둘다 불가능.완전 고정값
// 아예 새로 제작해서 늘려주는 방법 사용

Method 참조

Class Person
public static void referenceMethodTest(Object o) {
		if(o instanceof Person) {
			Person p = (Person)o;
			if(p.age >20) {
				System.out.println(p);
			}
		}
	}
List Controller
//Method 참조
list.forEach(System.out::println);
list.forEach(Person::referenceMethodTest);

Sort

//Comparator interface @Functional Interface
//정렬에 사용하는 기준이 되는 값을 반환하는 추상메소드 선언
//int compare(Object o, Object o2)
//양수:변경해
//음수:변경하지마
//0: 변경하지마 -> 같은값
numbers.sort(new Comparator() {
 	@Override
 	public int compare(Object prev, Object next) {
 		Integer i = (Integer)prev;
 		Integer j = (Integer)next;
 		if(i>j) return 1;
 		else if(i<j) return -1;
			return 0;
 	}
});

System.out.println(numbers);

numbers.sort((o, o2)->{
	Integer prev=(Integer)o;
	Integer next=(Integer)o2;
	if(prev < next) return 1;
	else if(prev > next) return -1;
	return 0;
});

numbers.sort((o, o2)->{
	Integer prev=(Integer)o;
	Integer next=(Integer)o2;
	return prev - next;
});

String 정렬

public class PersonNameAsc implements Comparator{
	@Override
	public int compare(Object o1, Object o2) {
		Person prev = (Person)o1;
		Person next = (Person)o2;
		
		//오름차순 정렬
		return prev.getName().compareTo(next.getName());
	}
}
		list.sort(new PersonNameAsc());

실습 메소드 Override, 사람 키 비교


//compareable 인터페이스를 이용해서 객체의 기본 우선순위를 설정할 수 있음
//int compareTo(Object) Method를 재정의 
public class PersonHeightAsc implements Comparator{

	@Override
	public int compare(Object o1, Object o2) {
		Person prev = (Person) o1;
		Person next = (Person) o2;
		return (int)prev.getHeight() - (int)next.getHeight();
	}
	
}
list.sort(new PersonHeightAsc());
list.sort((o, o1) ->{;
			Person pre = (Person)o;
			Person next = (Person)o1;
			return next.getName().compareTo(pre.getName());
		});
list.forEach(System.out::println);

Collections.sort

//Collection Class 에서 제공하는 sort 메소드 이용
Collections.sort(list);
list.forEach(System.out::println);
//Tree 저장소에 넣을때 반드시 필요 
@Override
public int compareTo(Object o) {
	return (int)Math.ceil(height - ((Person)o).height);
}

LinkedList

public static void linkedList() {
		//연결된 리스트
		//ArrayList와 동일하다
		LinkedList llist = new LinkedList();
		llist.add("hi");
		llist.add(10);
		System.out.println(llist);
		llist.add(1, "middle add");
		System.out.println(llist);
		llist.addFirst("hoho");
		System.out.println(llist);
		llist.addLast("hihi");
		System.out.println(llist);
		System.out.println(llist.getFirst());
		for(int i = 0; i < llist.size(); i++) {
			System.out.println(llist.get(i));
		}
		Collections.sort(llist);
		
		
		List list = new ArrayList();
		list = new LinkedList();
		Collection c = new ArrayList();
		c = new LinkedList();
		new ArrayList();
}

profile
250304~

0개의 댓글