package Study;

public class SubStringStudy {

	public static void main(String[] args) {
		
		/*순서를 기준으로 나누기*/
		String str1 = "012345";//0~5, String 클래스는 문자를 배열에 넣어 문자열을 만들기 때문에 0번부터 시작
		str1.substring(3);//3번째 이후 문자열을 반환
		str1.substring(1, 5);//1번부터 5번 사이의 문자열을 반환 : 1234
		System.out.println(str1.substring(1, 5));//1234

	
		/*특정 문자를 기준으로 나누기*/
		String str2 = "010-1111-2222";
		String[] arrStr = str2.split("-");//-를 기준으로 나누기, arrStr = [[010],[1111],[2222]]

		for(int i=0; i<arrStr.length; i++) {
			System.out.println("arrStr["+i+"] : "+arrStr[i]);
		}
			
	}

}

'Programming > JAVA' 카테고리의 다른 글

[JAVA] Serializable(직렬화) 와 Deserialize(역직렬화)  (0) 2020.09.16
[JAVA] IndexOf  (0) 2020.09.14
[JAVA] List  (0) 2020.09.13
[JAVA] Map  (0) 2020.09.13
[JAVA] GetBytes  (0) 2020.09.13

컬렉션 Collection(Set, List, Queue, Map) 중 하나

 

배열(Array)과 차이점이라면 배열은 중간에 값이 삭제되면 null값이 발생한다

리스트(List)는 중간에 값이 삭제되면 정렬시켜 null값이 발생하지 않도록 한다

또한 제네릭<>을 사용해 타입을 지정할 수 있고

배열처럼 사이즈 지정을 하지 않아거나 초과하면 동적으로 사이즈가늘어난다 

 

배열은 정적 리스트는 동적으로 알고 있으면 편하다

 

리스트 인터페이스(Interface) 상속받은 클래스는 아래와 같다

  • ArrayList : 리스트에 객체를 넣어서 보관, 검색속도가 빠름
  • Vector : ArrayList와 동일하나 동기화를 지원, 속도가 느림
  • LinkedList : 위 리스트와 다른 구조(헤더-노드-노드..)인접 노드와 연결(Link)를 해서 연결, 삽입, 삭제 속도가 빠름

 

package Study;

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
import java.util.Vector;

public class ListStudy {

	public static void main(String[] args) {
		List<String> arrayList = new ArrayList<String>(10);//리스트에 데이터를 넣어서 관리, 사이즈를 지정해도 초과하면 자동으로 늘어남
		List<String> vector = new Vector<String>();//arrayList와 동일하나 동기화를 지원
		
		/*ArrayList와 Vector는 동기화 유무 이외엔 차이가 없음*/
		arrayList.add("jony");//삽입
		arrayList.add(2, "kim");//n번째에 삽입
		arrayList.contains("jony");//리스트에 해당 데이터가 있는지 검색해서 true, false로 반환
		arrayList.size();//리스트의 사이즈를 반환
		arrayList.remove(2);//리스트 n번째에 있는 데이터 삭제
		arrayList.clear();//리스트 비우기
		
		/*LinkedList : header-node-node-node... */
		LinkedList<String> linkedList = new LinkedList<String>();//인접 노드의 연결(link)함, 연결된 전후 노드가 삭제되면 그 다음 노드에 연결함
		
		linkedList.add("jony");//삽입
		linkedList.add(2, "kim");//n번째에 삽입
		linkedList.addFirst("tim");//가장 처음(header)에 삽입
		linkedList.addLast("yamada");//가장 마지막에 삽입
		linkedList.size();//리스트의 사이즈를 반환
		
		linkedList.removeFirst();//가장 앞의 데이터 삭제
		linkedList.removeLast();//가장 뒤의 데이터 삭제
		linkedList.remove(2);//n번째 데이터 삭제
		linkedList.clear();//리스트 비우기
	}

}

 

'Programming > JAVA' 카테고리의 다른 글

[JAVA] IndexOf  (0) 2020.09.14
[JAVA] 문자열 자르기  (0) 2020.09.14
[JAVA] Map  (0) 2020.09.13
[JAVA] GetBytes  (0) 2020.09.13
[JAVA] HashCode  (0) 2020.09.12

컬렉션 Collection(Set, List, Queue, Map) 중 하나

 

자바 맵(Map)은 3가지가 있다 

맵의 공통점으로는 키의 중복은 허용하지 않으며, 값의 중복은 허용된다.

 

  • HashTable : 동기화 가능, 속도 느림
  • HashMap : 동기화 불가능, Table보다 빠름
  • SortedMap : 맵에 저장된 키, 값을 정렬시켜 보여 줌
package Study;

import java.util.HashMap;
import java.util.Hashtable;
import java.util.SortedMap;
import java.util.TreeMap;

public class MapStudy {

	public static void main(String[] args) {
		
		/*HashMap<key, value>  동기화(Synchronization) 미지원*/
		HashMap<String, String> hashMap = new HashMap<String, String>();
		
		hashMap.put("name", "jony");//키와 값을 저장
		hashMap.get("name");//해당 키의 값을 리턴
		
		System.out.println(hashMap.size());//.size() : 해당 맵의 키/값의 수를 리턴
		System.out.println(hashMap.containsKey("name"));//.containsKey(키) : 해당 키를 가지고 있다면 true 없다면 false
		System.out.println(hashMap.containsValue("jony"));//.containsValue(값) : 해당 값을 가지고 있다면 true 없다면 false
		System.out.println(hashMap.isEmpty());//.isEmpty() : 맵이 비어있다면 true 아니면 false
		
		hashMap.remove("name");//해당키와 값을 제거
		hashMap.clear();//모든 키와 값을 제거

		
		/*HashTable<key, value>   동기화(Synchronization) 지원*/
		Hashtable<String, Object> hashTable = new Hashtable<String, Object>();
		BeanStudy bean = new BeanStudy();//Bean(DTO, VO) 생성
		
		/*Object는 자바 최상위 Class, Integer, String, Object를 담을 수 있음*/
		hashTable.put("member", bean);//키와 값을 저장
		hashTable.get("member");//해당 키의 값을 리턴
		
		System.out.println(hashTable.size());//.size() : 해당 맵의 키/값의 수를 리턴
		System.out.println(hashTable.containsKey("member"));//.containsKey(키) : 해당 키를 가지고 있다면 true 없다면 false
		System.out.println(hashTable.containsValue(bean));//.containsValue(값) : 해당 값을 가지고 있다면 true 없다면 false
		System.out.println(hashTable.isEmpty());//.isEmpty() : 맵이 비어있다면 true 아니면 false
		
		hashTable.remove("member");
		hashTable.clear();
		
		SortedMap<String, String> sortedMap = new TreeMap<String, String>();
	}

}

 

 

 

사용 빈도로는 HashMap>HashTable>SortedMap(거의 사용되지 않아서 코드는 생략함)

'Programming > JAVA' 카테고리의 다른 글

[JAVA] 문자열 자르기  (0) 2020.09.14
[JAVA] List  (0) 2020.09.13
[JAVA] GetBytes  (0) 2020.09.13
[JAVA] HashCode  (0) 2020.09.12
[JAVA] Generic Class, Generic Method  (0) 2020.09.12
package Study;


public class GetBytesStudy {

	public static void main(String[] args) {
		String str1 = "ABC123";
		String str2 = "안녕";
		
		try {			
			byte[] byteArr1 = str1.getBytes("UTF-8");
			byte[] byteArr2 = str2.getBytes("UTF-8");
			
			System.out.println(byteArr1);//[B@15db9742
			System.out.println(byteArr2);//[B@6d06d69c
			
			System.out.println(new String(byteArr1, "UTF-8"));//ABC123
			System.out.println(new String(byteArr2, "UTF-8"));//안녕
			
			for(int i=0; i<byteArr1.length;i++) {
				System.out.print(byteArr1[i]);//아스키 코드로 출력
				System.out.print("[" + (char)byteArr1[i] + "] ");//아스키 코드로 출력
			}

		} catch (Exception e) {
			e.printStackTrace();
		}
		
	}

}

String객체를 바이트배열(byte[])로 변환해주는 메서드

변환한 문자열(String)은 아스키 코드(10진)로 들어간다(Character set에 따라 달라짐)

 

바이트 배열은 ByteArrayInputputStream, ByteArrayOutputStream을 통해 입출력이 가능한데

애초에 굳이 바이트배열로 변환을 하지않아도 문자열 자체만으로도 입출력이 가능하기 때문에 굳이 쓸필요는 없다

 

ByteArrayInputputStream, ByteArrayOutputStream는 InputStream과 OutputStream을 상속(extends)받은 클래스이다

ByteArrayInputputStream, ByteArrayOutputStream 사용 예시

 

package Study;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;


public class ByteArrayInputStreamStudy {

	public static void main(String[] args) {
		String str = "ABC123";
		int i;
		
		try {
			byte[] byteArr = str.getBytes("UTF-8");//문자열을 바이트배열로 변환
			
			ByteArrayInputStream  bais = new ByteArrayInputStream(byteArr);//바이트배열읽기스트림으로 읽어들임
			ByteArrayOutputStream  baos = new ByteArrayOutputStream();
			
			while ( (i=bais.read()) != -1 ){//읽어서 변수 i에 넣고, 값이 더 이상 없다면 read()는 -1을 반환 
				baos.write(i);//바이트배열쓰기스트림에 입력
				}

			byte[] byteArrCopy = baos.toByteArray();//바이트 배열 복사
			
			for(i=0; i<byteArrCopy.length; i++) {
				System.out.print(byteArrCopy[i]);//아스키 코드로 출력
				System.out.print("[" + (char)byteArrCopy[i] + "] ");//아스키 코드로 출력
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

}

'Programming > JAVA' 카테고리의 다른 글

[JAVA] List  (0) 2020.09.13
[JAVA] Map  (0) 2020.09.13
[JAVA] HashCode  (0) 2020.09.12
[JAVA] Generic Class, Generic Method  (0) 2020.09.12
[JAVA] Generic  (0) 2020.09.11
package Study;

public class HashCodeStudy {

	public static void main(String[] args) {
		
		/*HashCode : 객체의 주소를 기반으로 생성되는 정수 값 */
		HashCodeStudy study1 = new HashCodeStudy();
		HashCodeStudy study2 = new HashCodeStudy();
		HashCodeStudy study3 = study2;//study2라는 객체를 생성할 때 사용 된 주소가 study3에 그대로 사용 됨
		
		System.out.println("study1 : " + study1.hashCode());//키 : 366712642     값 : study1 
		System.out.println("study2 : " + study2.hashCode());//키 : 1829164700    값 : study2
		System.out.println("study3 : " + study3.hashCode());//키 : 1829164700    값 : study2
		
		/*String 클래스에 한해서는 고유의 값이 아님*/
		String str1 = "ABC123";
		String str2 = "ABC123";
		String str3 = "DEF456";
		
		System.out.println(str1.hashCode());//키 : 1923891888  값 : ABC123  
		System.out.println(str2.hashCode());//키 : 1923891888  값 : ABC123  
		System.out.println(str3.hashCode());//키 : 2012642256  값 : DEF456  
		
	}

}

 

해시코드(HashCode)란 객체가 생성될 때 사용된 주소를 기반으로 생성되는 정수 값이다

 

study1과 study2는 같은 클래스를 이용해 객체를 생성했어도 생성 주기가 다르기 때문에 해시코드도 다르다

하지만 study3는 이미 생성된 study2를 기반으로 생성되었기 때문에 해시코드 값이 동일하다

 

또한 String 클래스에 한해서는 객체가 생성될때 사용된 주소가 아닌 문자열을 기반으로 정수 값이 생성된다

 

즉, 중복된 해시코드가 존재할 가능성이 있다

해시코드를 고유값으로 처리하는 건 보지 못했다

'Programming > JAVA' 카테고리의 다른 글

[JAVA] Map  (0) 2020.09.13
[JAVA] GetBytes  (0) 2020.09.13
[JAVA] Generic Class, Generic Method  (0) 2020.09.12
[JAVA] Generic  (0) 2020.09.11
[JAVA] NullCheck  (0) 2020.09.11

+ Recent posts