
list set map



ArrayList()
ArrayList(Collection c) //컬렉션을 넣어서
ArrayList(int initialCapacity) //배열의 길이 넣어주기
메서드들 - 책에 있음.
public class List {
public static void main(String[] args) {
ArrayList list1 = new ArrayList(10);
//ArrayList에는 객체만 저장가능
//하지만 autoboxing에 의해 기본형도 저장 가능
list1.add(5);
list1.add(new Integer(4));
list1.add(new Integer(2));
list1.add(new Integer(0));
list1.add(new Integer(1));
list1.add(new Integer(3));
//1번째부터 3번째까지 복사해서 새 배열 생성
//이건 새 배열 만들려고 이렇게 생성자 사용한거고, 그냥 읽기 전용할거면 생성자 사용 안해도 됨
ArrayList list2 = new ArrayList(list1.subList(1,4));
//list1과 list2를 정렬한다
Collections.sort(list1);
Collections.sort(list2);
//list1에 list2가 전부 다 잘 들어갔는지
System.out.println(list1.containsAll(list2));
//삽입
list2.add("B");
list2.add("C");
list2.add(3,"A");
}
}
🟥add(1), remove(1)은 1을 삭제, 더하는게 아니라 인텍스1을 삭제, 더하는 것



삭제하는 경우(배열 복사 발생)🟨🟨



더블리 링크드 리스트


스택 : 배열이 효율적(링크드 리스트도 가능은 함)

큐 : 링크드 리스크가 효율적(배열도 가능은 함)
Stack st = new Stack();
Queue 1 = new LinkedList();
st.push("0");
st.push("1");
st.push("2");
q.offer("0");
q.offer("1");
q.offer("2");
while(!st.empty()) {
System.out.println(st.pop()); }
while(!q.isEmpty()) {
System.out.println(q.poll()); }
st는 2,1,0 나오고
q는 0,1,2 나옴.
둘이 나오는 순서가 다름

ex) 괄호 갯수 맞는지 검사 (스택)
public static void main(String[] args) {
Stack st = new Stack();
String expression = "((())))) )";
System.out.println("expression:" + expression);
try {
for (int i=0; i<expression.length(); i++) {
char ch = expression.charAt(i);
if (ch == '(') {
st.push(ch+"");
} else if(ch == ')'){
st.pop();
}
}
if(st.isEmpty()) {
System.out.println("괄호가 일치합니다.");
} else {
System.out.println("괄호가 일치하지 않습니다");
}
} catch(EmptyStackException e) {
System.out.println("괄호가 일치하지 않습니다222");
}
}


hashtable은 동기화 되어있음
hashmap은 동기화 안 되어있음

Set ectrySet() : 저장된 모든 키-값 쌍을 불러옴

hashNExt() 읽어오기 next()! 이 두개만 쓰면 됨!List list = new ArrayList();
Iterator it = list.iterator(); //iterator 객체를 반환
while(it.hasNext()) { //요소 있는지 확인
System.out.println(it.next()); //요소 읽어오기
}

12345가 두 번 안 나오는 이유: 이미 iterator를 다 써버렸기때문.
iterator는 일회용입니다. 한 번 다 끝까지 읽고나면 iterator를 다시 얻어와야 합니다.

이렇게 두 가지 방법으로 읽어오기 가능.
그런데 arraylist를 hashset으로 바꾼다면? hashset은 get()이 없습니다. 그래서 동작을 안 해요.
Map map = new HashMap();
...
Iterator in = map.entrySet().iterator();

정렬기준 제공)를 정의한 인터페이스public interface comparator {
int compare(Object o1, Object o2);
boolean equals(Object obj); //equals를 오버라이딩 하라는 뜻.
신경쓰지마세요.
}
public interface Comparable {
int comparTo (Object o); //주어진 객체(o)를 자신과 비교
}
public final class Integer extends Number implements Comparable {
...
public int compareTo(integer anotherInteger) {
int v1 = this.values;
int v2 = anotherInteger value;
//같으면 0, 오른쪽 값이 크면 -1, 작으면 1을 반환
return (v1 < v2 ? -1 : (v1==v2? -: 1));
}
}
integer나 String은 기본적으로 Comparable을 구현하고 있다. ==자체적으로 기본 정렬 기준을 갖고 있다.
Q. 정렬 기준만 있어도 정렬이 돼요?
Array.sort()와 같은 메서드가 정렬을 수행하는 과정에서, compareTo()를 호출한다.
순서를 유지하려면, LinkedHashSet클래스를 사용하면 됨
Set set = new HashSet();
for (int i=0; set.size()<6; i++) {
int num = (int) (Math.random()*45) +1;
set.add(num); }
//sort 하기 위해 hashset을 List로 바꾸기 작업
List list = new LinkedList(set);
Collections.sort(list);
Systemm.out.println(list);
}
}
✅왜 sort 하기 전 lisr로 바꾸기 작업 할까? sort(List list)다. 그니까 sort는 list(또는 arrayList)만 적용될수 있다.
HashSet()은 객체를 저장하기 전에 기존에 같은 객체가 있는지 확인
범위 검색과 정렬에 유리한 컬렉션 클래스

add() size() remove() isEmpty() iterator()도 당연히 있음. public static void main(String[] args) {
Set set = new TreeSet();
for (int i=0; set.size()<6; i++) {
int num = (int) (Math.random()*45) +1;
//Test 객체를 저장해라
set.add(new Test()); //set.add(new Integer(num));으로 하면 오류 안남
오류 나는 코드
}
>> 왜? Treeset은 비교하면서 저장(set)하기 때문에 비교 기준이 없는 Test클래스 객체 경우에는 Error 발
}
✅비교하면서 set한다~! 잊지말것. treeset은 순서유지 성질을 갖고 있음!