자료구조=컬렉션
를 바탕으로 객체들을 효율적으로 추가, 삭제, 검색 할 수 있도록 관련 인터페이스와 클래스들을 포함java.utill
패키지 포함⇒ (컬렉션 프레임워크) Collection(수집, 저장) + Framework(뼈대, 구조)List
Set
Map
import java.util.ArrayList;
import java.util.List;
public class BoardEx
{
public static void main(String[] args) {
// 게시물의 특성은 글쓴 일자/시간별로 순서대로 저장되므로 Borad(한 개의 글의 단위)저장 관리(수정, 검색, 삭제, 갱신, 추가) 제공
List<Board> boardlist = new ArrayList<Board>();
boardlist.add(new Board("제목1:컬렉션 프레임워크", "내용 : 자바의 자료 구조이다. 객체를 효율적으로 관리할 수 있다.", "sym"));
boardlist.add(new Board("제목2:컬렉션 프레임워크", "내용 : 자바의 자료 구조이다. 객체를 효율적으로 관리할 수 있다.", "sym"));
boardlist.add(new Board("제목3:컬렉션 프레임워크", "내용 : 자바의 자료 구조이다. 객체를 효율적으로 관리할 수 있다.", "sym"));
boardlist.add(new Board("제목4:컬렉션 프레임워크", "내용 : 자바의 자료 구조이다. 객체를 효율적으로 관리할 수 있다.", "sym"));
boardlist.add(new Board("제목5:컬렉션 프레임워크", "내용 : 자바의 자료 구조이다. 객체를 효율적으로 관리할 수 있다.", "sym"));
// 전체 게시판(boardlist)의 글(Board) 목록 개수
int size = boardlist.size();
System.out.println("총 글목록 수 : " +size);
// 특정 인덱스의 객체 가져오기(search : 조회)
Board board = boardlist.get(2);
System.out.println(board.getSubject() + " "+ board.getContent()+" "+ board.getWriter());
// 모든 글(Board)를 하나씩 가져오기
for(Board board1:boardlist) {
System.out.println(board1.getSubject() +" "+board.getContent()+" "+board.getWriter());
}
System.out.println();
boardlist.remove(2);
// 인덱스 3 사라짐
for(Board board1:boardlist) {
System.out.println(board1.getSubject() +" "+board.getContent()+" "+board.getWriter());
}
}
}
동일한 객체를 중복 저장 시 동일한 번지 저장
, null 저장 가능import java.util.ArrayList;
import java.util.List;
public class ArrayListEx1
{
public static void main(String[] args)
{
// 1. ArrayList 타입 list1을 생성하시오
ArrayList<Integer> list1 = new ArrayList<Integer>();
// 2. lis1에 1, 2, 3, 4, 5 값을 랜덤하게 추가해주세요.
list1 .add(1);
list1 .add(3);
list1 .add(2);
list1 .add(5);
list1 .add(2);
list1 .add(4);
// 3, list1을 print()이용해서 출력
//print(list1);
// 4. ArrayList list2를 생성하는데. list1의 인덱스 1부터 3까지의 값을 가져와서 list2를 생성
ArrayList<Integer> list2 = new ArrayList(list1.subList(1, 4));
print(list1, list2);
//5. 요소가 다 포함되어 있는지 확인 containsAll
System.out.println("list1에 list2의 요소가 모두 포함되어 있나요? "+ list1.containsAll(list2));
// 6. list1에서 list2와 겹친는 부분만 남기고 나머지는 삭제
System.out.println("list1에 list2의 요소만 남기고 다른 요소 삭제 "+list1.retainAll(list2));
print(list1, list2);
// 7. list2에서 list1에 포함된 객체들을 삭제, 인덱스를 뒤부터 요소 검사하며 삭제
for(int i = list2.size()-1; i>=0; i--) {
if(list1.contains(list2.get(i))) {
list2.remove(i);
} //get(i) 하나씩 값을 뱉어줌
} // list2는 빈리스트(empty 리스트)
print(list1, list2);
}
static void print(ArrayList arr1, ArrayList arr2) {
//ArrayList a1 = (ArrayList)arr1;
System.out.println("list1 : "+arr1);
System.out.println("list2 : "+arr2);
//for(Integer i : a1) {
//System.out.println(i);
//}
}
}
import java.util.ArrayList;
import java.util.List;
public class ArrayListEx2
{
public static void main(String[] args)
{
// 긴 문자열을 분리하는 기능을 이용하여 저장
final int LIMIT = 10; //자르고자 하는 숫자 지정
String source = "0123456789abcdefghiABCDEFGHIJ!@#$%^&()_";
int length = source.length();
List list = new ArrayList(length/LIMIT+10);
System.out.println(list);
for(int i = 0; i<length; i+=LIMIT) {
if(i+LIMIT < length) list.add(source.substring(i, i+LIMIT));
else list.add(source.substring(i));
}
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}
System.out.println(list.size()); // 4
/*String source1 = "ABCDEFGHIJK";
System.out.println(n); //아스키 코드 보는 법
for (int i = 0; i < list.size(); i++) {
if(i+LIMIT < length) list.add(source1.substring(i, i+LIMIT));
else list.add(source.substring(i));
}
for(int i=0; i<list.size(); i++) {
System.out.println(list.get(i));
}*/
// A부터 Z까지 10씩 출력해봄
source =" ";
for (char ch = 'A'; ch <= 'z'; ch++) {
source += ch;
}
length = source.length();
List<String> list1 = new ArrayList<>(length / LIMIT + 10);
for (int i = 0; i < length; i += LIMIT) {
if (i + LIMIT < length) {
list1.add(source.substring(i, i + LIMIT));
} else {
list1.add(source.substring(i));
}
}
for (int i = 0; i < list1.size(); i++) {
System.out.println(list1.get(i));
}
}
}
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class ArrayListLinkedTest
{
public static void main(String[] args)
{
ArrayList array = new ArrayList(2000000);
LinkedList link = new LinkedList();
System.out.println("순차적으로 객체를 추가");
System.out.println("array 추가 "+add1(array));
System.out.println("link 추가 "+add2(link));
System.out.println();
System.out.println("== 중간에 추가하기 =="); // 값이 달라짐
System.out.println("array 추가 "+add2(array));
System.out.println("link 추가 "+add2(link));
System.out.println();
}
static long add1(List array) {
long start = System.currentTimeMillis();
for(int i=0; i<1000000; i++) {
array.add(i+" ");
}
long end = System.currentTimeMillis();
return end-start;
}
static long add2(List link) {
long start = System.currentTimeMillis();
for(int i=0; i<1000000; i++) {
link.add(500+"X");
}
long end = System.currentTimeMillis();
return end-start;
}
}
import java.util.HashSet;
import java.util.Set;
public class HashSetEx
{
public static void main(String[] args)
{
Set<String> set = new HashSet<String>();
// 객체 저장
set.add("Java");
set.add("Java"); //중복객체이므로 저장하지 않음
set.add("JDBC");
set.add("JSP");
set.add("Springboot");
//저장된 객체 수 출력
System.out.println(set.size() ); //4 => 동일 객체 저장 x
}
}
hasCode()
메소드의 리턴값이 같고, equals() 메소드가 true를 리턴
하면 동일한 객체로 판단함iterator
중요!import java.util.HashSet;
import java.util.Iterator;
import java.util.Set;
public class Member extends Object
{
private String name;
private int age;
public Member() {};
public Member(String name, int age) {
this.name = name;
this.age = age;
}
public String getName()
{
return name;
}
public int getAge()
{
return age;
}
// Object 클래스의 hashCode() 재정의(name과 age값이 같으면 동일한 hasCode가 리턴되도록 한다.
// name.hasCode()+age 리턴
@Override
public int hashCode()
{
return name.hashCode()+age;
}
// //Object 클래스의 equals() 재정의 (name과 age값이 같으면 true 리턴되도록 합니다.)
@Override
public boolean equals(Object obj)
{
Member member = (Member) obj;
if(name.equals(member.name)&&age==member.age) {
return true;
}
return false;
/*
* // 2, 번째 방법 if(obj instanceof Member target) {
* returntarget.name.equals(this.name)&&(target,age==this.age); }
* else {return false;}
*/
}
public static void main(String[] args) {
Set<Member> set = new HashSet<Member>();
set.add(new Member("홍길동",30));
set.add(new Member("홍길동",30));
System.out.println(set.size());
// set은 인덱스가 존재하지 않기 때문에, get(i) 기능이 없다. 반복자 iterator
//iterator 패턴 익히기!, set은 Member, get 안써도 괜찮음
Iterator<Member> it = set.iterator();
while(it.hasNext()) {
Member element = it.next();
System.out.println(element.getName()+" "+element.getAge());
}
for(Member m : set) System.out.println(m.getName()+" "+m.getAge());
}
}
키와 값
으로 구성된 엔트리 객체를 저장import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
public class HashMapEx
{
public static void main(String[] args)
{
// Map 컬렉션 생성
Map<String, Integer> map = new HashMap();
map.put("김진주", 90);
map.put("이성민", 88);
map.put("강진호", 70);
map.put("박병호", 89);
map.put("장지호", 70);
map.put("장지호", 80); //key는 중복 허용하지 않음
System.out.println("map 길이 : "+map.size());
//키를 이용하여 값을 리턴
String key = "박병호";
int value = map.get(key);
System.out.println(key+"학생의 점수는 "+value);
System.out.println();
// 키 set 컬렉션을 얻어와 map의 키 값을 얻기 iterator 사용하기
Set<String> keySet = map.keySet();
Iterator<String> keyIt = keySet.iterator();
while(keyIt.hasNext()) {
String k = keyIt.next();
Integer v = map.get(k); //k(key)을 통해 값을 가져올 수 있다.
System.out.println(k+" "+v);
}
System.out.println();
// 엔트리 Set 컬렉션을 얻고, 반복해서 키와 값을 가져오기
Set<Entry<String, Integer>> entrySet = map.entrySet();
Iterator<Entry<String, Integer>> it = entrySet.iterator();
while(it.hasNext()) {
Entry<String, Integer> entry = it.next();
String k = entry.getKey();
Integer v = entry.getValue(); //k(key)을 통해 값을 가져올 수 있다.
System.out.println(k+" "+v);
}
}
}
뭔가... 컬렉션은 처음 배우는 기분 컬렉션은 앞단원이랑 이어지는 거라 몇 번 더 봐야 할 듯하다... 자바 배운지 2주인가? 밖에 안됐는데 벌써 내일부터는 오라클 sql 나간다고 한다. 학교에서는 자바만 1년 배운것 같은데 자바 잊지 않게 복습하자!!!