class Employee { String name; Employee(String n) { name = n; } } public class ArrayListEx { public static void main(String[] args) { Employee[] employees = new Employee[10]; //배열 정의 Employee steve = new Employee("Steve"); employees[0] = steve; //탐색 for(int index = 0; index<employees.length; index++) { if(employees[index].name.equalsIgnoreCase("Steve")) { System.out.println("Steve is employee at index : " + index); break; } } System.out.println(employees[0].name); //삭제 employees[0] = null; System.out.println("Steve is fire"); } }
2) 연결리스트 자료구조
-배열이 가진 고정된 크기의 문제를 해결하고 객체의 추가, 삭제 방법을 제공한다.
- 연결리스트는 노드의 집합니다.
- 각 노드는 객체와 다음 노드를 참조하는 정보를 가지고 있다.
연결리스트 :
노드추가 :
노드삽입 :
노드삭제 :
- 자바에서는 java.util.LikedList 클래스를 통해 연결리스트를 이미 구현해 놓았다.
- 연결리스트는 노드에 대한 임의 접근이 안되고 리스트의 시작위치와 끝위치부터 참조할수 있다.
- 연결리스트는 노드를 반복적으로 삽입하거나 삭제할때 좋은 구조지만
객체의 검색이나 다르게 정렬된 순서의 객체를 출력하는 것에는 좋지 않다.
3) 스택 자료구조
- 맨 위에 추가할수 있지만 임의 위치에 추가 할수 없다.
- 맨 위에 있는 데이터를 볼수있지만 그 아래것은 볼수 없다.
- 맨 위의 자료는 꺼낼수 있지만 중간에 있는 자료는 꺼낼 수 없다.
- 삽입연산을 위해서는 지정 위치에 다다를때까지 데이터들을 전부 꺼낸다음 새로운 데이터를 넣고
꺼냈던 데이터들을 다시 집어 넣는 과정을 거친다.(중간 위치 데이터의 삭제 과정도 같다)
//push : 스택의 맨 위에 객체를 올려놓는다.
//peek : 스택의 맨 위에 있는 객체를 읽는다.
//pop : 스택의 맨 위에 있는 객체를 꺼낸다.
4) 큐 자료구조
- 큐의 끝에 아이템을 추가할 수 있다.
- 큐의 앞에 있는 아이템을 제거할 수 있다.
5) 해시 테이블 자료구조
- 테이블에 있는 수치 값을 계산하여 아이템을 참조하도록 만든 자료구조
- 테이블은 해시코드와 아이템으로 구성된 두개의 열을 가지고 있다.
- 삽입 : 해시코드를 사용해 해시테이블의 인덱스 위치에 객체 삽입
- 검색 : 해시코드를 계산하여 테이블에서 직접 찾는다.
- 충돌 : 두 객체가 같은 해시 코드로 계산되면 충돌이 발생한다.
- 해시테이블은 충돌을 피하기 위해 데이터의 최대 크기보다 20%정도 큰 크기를 갖도록 한다.
System.out.println("3. StringBuffer(CharSequence seq) 활용"); System.out.println("=>버퍼 정의를 해줄시 문자열을 직접 정의를 해준다."); System.out.println(); StringBuffer msg2 = new StringBuffer("자바 수업입니다."); System.out.println("msg2는? "+msg2); System.out.println("==================="); // CharSequence seq는 문자열을 말한다.
//3. StringBuffer(CharSequence seq) 활용 //=>버퍼 정의를 해줄시 문자열을 직접 정의를 해준다.
//msg2는? 자바 수업입니다. //===================
System.out.println("4. StringBuffer(String str) 활용"); System.out.println("=> 버퍼에서 새로운 문자열을 생성할 수 있다."); System.out.println(); StringBuffer msg3 = new StringBuffer(new String("후후후")); System.out.println("msg3는? "+msg3); System.out.println("===================");
//4. StringBuffer(String str) 활용 //=> 버퍼에서 새로운 문자열을 생성할 수 있다.
//msg3는? 후후후 //===================
StringBuffer ex = new StringBuffer(); // 연습용 버퍼 정의
System.out.println("5. StringBuffer / append(boolean b) 활용"); System.out.println("=> false/true로 blooen값으로 append할 수 있다."); System.out.println(); ex.append(true); System.out.println("ex의 출력값은? "+ex); System.out.println("===================");
//5. StringBuffer / append(boolean b) 활용 //=> false/true로 blooen값으로 append할 수 있다.
//ex의 출력값은? true //===================
System.out.println("6. StringBuffer / append(char c) 활용"); System.out.println("=> charater 값으로 append할 수 있다."); System.out.println(); ex.append('A'); System.out.println("ex의 출력값은? "+ex); // append는 똑같은 변수에 다른 값을 넣으면 초기화되는 것이 아니라 이어서 나오게 된다. // 여기서는 계속 버퍼를 정의를 해주는 번거로움을 피하기 위해 출력값은 붙여서 나오게 될 것이다. System.out.println("===================");
//6. StringBuffer / append(char c) 활용 //=> charater 값으로 append할 수 있다.
System.out.println("12. StringBuffer / replace(int start, int end, String str) 활용"); System.out.println("=>문자열에 범위를 정하여 대신할 문자열을 대입할 수 있다."); System.out.println(); ex4.replace(2,9,"히 주무세요"); System.out.println("ex4의 출력값은? "+ex4); System.out.println("===================");
//12. StringBuffer / replace(int start, int end, String str) 활용 //=>문자열에 범위를 정하여 대신할 문자열을 대입할 수 있다.
//ex4의 출력값은? 안녕히 주무세요 //===================
System.out.println("13. StringBuffer / reverse() 활용"); System.out.println("=>문자열을 거꾸로 출력할 수 있다."); System.out.println(); ex4.reverse(); System.out.println("ex4의 출력값은? "+ex4); System.out.println("===================");
//13. StringBuffer / reverse() 활용 //=>문자열을 거꾸로 출력할 수 있다.
//ex4의 출력값은? 요세무주 히녕안 //===================
System.out.println("14. CharSequence / subSequence(int start, int end) 활용"); System.out.println("=>입력한 범위는 남겨두고 나머지는 잘라낸다."); System.out.println(); System.out.println("ex4의 출력값은? "+ex4.subSequence(2,4)); System.out.println("==================="); //출력할시에 함께 입력해주어야 필요없는 부분을 잘라낸다.
StringBuffer ex5 = new StringBuffer(" 자바를 열심히 해봅시다. ");
//14. CharSequence / subSequence(int start, int end) 활용 //=>입력한 범위는 남겨두고 나머지는 잘라낸다.
//ex4의 출력값은? 무주 //===================
System.out.println("15. void / trimToSize() 활용"); System.out.println("=>스페이스로 인한 공간만큼의 용량을 빼준다."); System.out.println(); System.out.println("trimToSize() 이전 ex5의 출력값은? "+ex5); System.out.println("trimToSize() 이전 용량 ? "+ex5.capacity()); ex5.trimToSize(); System.out.println("trimToSize() 이후 ex5의 출력값은? "+ex5); System.out.println("trimToSize() 이후 용량 ? "+ex5.capacity()); System.out.println("==================="); //겉으로는 변화되는 모습은 확인할 수 없는 것 같다.
//15. void / trimToSize() 활용 //=>스페이스로 인한 공간만큼의 용량을 빼준다.
//trimToSize() 이전 ex5의 출력값은? 자바를 열심히 해봅시다. //trimToSize() 이전 용량 ? 31 //trimToSize() 이후 ex5의 출력값은? 자바를 열심히 해봅시다. //trimToSize() 이후 용량 ? 15 //===================
System.out.println("16. String toString() 활용"); System.out.println("=> 이미 만들어져 있는 문자열을 새로운 String 변수에 복사할 수 있다."); System.out.println(); String ex6 = ex5.toString(); System.out.println("ex5 문자열 : "+ex5); System.out.println("ex5로부터 ex6으로 복사된 문자열 : "+ex6); System.out.println("===================");
//16. String toString() 활용 //=> 이미 만들어져 있는 문자열을 새로운 String 변수에 복사할 수 있다.
//ex5 문자열 : 자바를 열심히 해봅시다. //ex5로부터 ex6으로 복사된 문자열 : 자바를 열심히 해봅시다. //===================
System.out.println("17. String 클래스의 String(StringBuffer buffer) 활용"); System.out.println("=> 16번과 똑같은 것이다."); System.out.println(); String ex7 = new String(ex5); System.out.println("ex7은? "+ex7); System.out.println("===================");
//17. String 클래스의 String(StringBuffer buffer) 활용 //=> 16번과 똑같은 것이다.
System.out.println("출처 : http://blog.naver.com/rukiner"); // contentEquals는 String 클래스 문자열을 상대와 비교하게 된다. // 그렇기에 위의 ex7 자리에 StringBuffer로 정의된 ex5를 입력하게 되면 에러가 난다. }
주어진 문자열을 토큰으로 분리해서 StringTokenizer 생성. 분리자는 매개변수로 전달된 delim,
만약 returnDelim 값이 true이면 분리자도 토큰에 포함
메소드
설명
int countTokens()
토큰의 개수를 반환
boolean hasMoreElements()
hasMoreTokens메소드와 같은 값 반환
boolean hasMoreTokens()
StringTokenizer 객체의 문자열로부터 사용 가능한 토큰이 있는지 검사
Object nextElement()
nextToken 메소드와 같은 값 반환
단, Object 객체를 반환한다.
String nextToken()
다음 토큰을 반환
String nextToken(String delim)
현재 남아있는 문자열에서 새로운 구분자(delim)를 사용하여 토큰을 반환한다.
import java.util.*;
//StringTokenizer클래스는 String이나 StringBuffer와 같은 패키지 안에 있지 않다.
public class StringTokenizerEx { public static void main(String[] args) { String source = "1,2,3,4,5,6,7,8,9"; StringTokenizer st = new StringTokenizer(source, ",", false); while(st.hasMoreTokens()) { String value = st.nextToken();
//nextToken()은 while문안에 한번만 쓰도록 하자. System.out.println(value); } } }