프로젝트도 자바를 쓰고 코테도 자바를 써야되서 공부하고 있다.
진짜 자바 쓰는사람들은 불편한걸 모르나? 싶다
아니 적어도 System.out.println 이 코드를 print 하나로 만들어주는게 그렇게 어려운가?
이번 글은 코테와 실제 코딩에서 쓰는 문법들을 위주로 적을 것이다.
import java.util.*;
import java.io.*;
util과 io 출력을 모두 해결하는 마법의 코드이다.
와일드 카드라고 하는데 성능에 문제가 없어서 그냥 쓰면된다고 한다.
String[] arr1= new String[3];
int[] arr2 = {1,2,3,4,5}
여기서, 배열은 고정값이기 때문에 내용의 추가나 삭제를 할 수 없다
String[] arr1 = new String[3];
arr1[0] = "Hello";
arr1[1] = "World";
arr1[2] = "!";
System.out.print(String.join(", ",arr1));
// Hello, World, !
//배열을 출력하려면 .join을 써야지 재대로 출력된다. 그냥 출력하면 주소값 나옴.
System.out.println(arr1);
//[Ljava.lang.String;@75b84c92
//위 처럼 정상적인 값이 나오질 않는다.
List<String> lst = new ArrayList<String>();
lst.add("Hello");
lst.add("World");
lst.add("!");
System.out.print(lst);
//[Hello, World, !]
// 하지만 리스트는 잘 나온다.
String str1 = "abc";
String str2 = "abc";
System.out.print(str1 == str2);
//false
System.out.print(str1.equals(str2));
//true
print구문과 비슷하다. string을 하나하나의 객체로 인식하기 때문에
str1과 str2는 같은 데이터를 가지더라도 다른 객체로 인식이 되서
false가 출력이 되고,
데이터를 비교해야 하기 때문에 equals를 사용한다.
하지만 int값은 정상적으로 true가 뜬다.
아마도 static값을 주소로 가지고 연산을 했을때 주소값이 바뀌나 보다.
int[] arr = {1,2,3,4,8,6,5,9,7}
Arrays.sort(arr); // [1,2,3,4,5,6,7,8,9]
List<String> lst = new ArrayList<>();
lst.add("World"); // {"World"}
lst.add(0,"Hello"); // {"Hello", "World"} index 지정
lst.set(1,"java"); // {"Hello", "java"} 수정
lst.remove(1); // {"java"} 삭제
lst.contains("python"); // false 포함 여부 확인
lst.indesOf("java"); // 0 리스트 index 반환
Iterator itr = lst.iterator(); // 이터레이터 설정
while(itr.hasNext()){ // 다음으로
}
while(itr.hasPrevious()){ // 이전으로
}
if (lst.indexOf(value) < 0){ // 중복 x
lst.add(value);
}
for(int i = 0; i < lst.size(); i++) { // lst 값 하나씩
lst.get(i).intValue();
}
++ 추가
자바는 객체 지향형 언어라서 class와 메서드를 만들어줘야됨.
public List<Integer> method(int[] ....){
~~~
}
와 같은 형테의 메서드라면
return ~List 형태의 값 ~ 이 성립됨.
Queue<Integer> q = new LinkedList<>(); // LinkedList로 선언
Queue<Integer> q = new LinkedList<>(Collections.reverseOrder()); //역순
q.add(10); // {10} 큐가 꽉 찬 경우 IllegalStateException 에러 발생
q.offer(20); // {20} 큐가 꽉 찬 경우 false 반환
q.remove(); // 첫번째 값 제거, 큐가 비어있는 경우 NoSuchElementException 에러 발생
q.poll(); // 첫번째 값 반환, 큐가 비어있는 경우 null 반환
q.clear(); // 큐 비우기. 큐의 내용을 싹 없애버림
q.element(); // 큐가 비어있는 경우 NoSuchElementException 에러 발생
q.peek(); // 첫번째 값 참조큐가 비어있는 경우 null 반환
q.isEmpty(); // 큐가 비어있는지 확인
Queue<Integer> que = new LinkedList<>();
que.add(new int[]{0,0});
Math.max(5,10); // 10
Math.min(5,10); // 5
Math.abs(-3); // 3
Math.ceil(-3.2); //-3
Math.floor(4.1); //4
Math.rount(5.5); //6
String[] arr = s.split(""); // String -> Array
List<String> lst = Arrays.asList(arr); // String->List
ArrayList<String> lst = new ArrayList<String>(Arrays.asList(arr));
// String -> ArrayList
String str = String.join(",",lst);// array->String
String str = String.join(",",lst);//List->String
String str = lst.toString();//ArrayList->String
자료형 중에 List와 ArrayList가 있는데, List 안에 ArrayList가 있다고 보면 된다.
array->string, list->string 둘다 join 쓰면 된다.
하지만 ArrayList는 join을 사용하지 못한다.
list -> string 방법은 .split()을 사용해 string->list 변환을 통해 만들어진 것만 확인이 되었는데, 다른 자료형이 들어가면 틀릴 수도 있다.
그리고 자바를 공부하는 내 기분
편하다고 하던데 c++보다 복잡한거같다.