본문 바로가기

Java

(54)
내부 클래스 내부 클래스 class OutClass { private int num = 10; private static int snum = 20; private InClass inClass; public OutClass() { inClass = new InClass(); } class InClass { int inum = 100; void intest() { System.out.println(num); System.out.println(snum); } } public void using() { inClass.intest(); } } 클래스 안에 클래스가 포함 된 상황. 일반적으로 클래스 안에서만 사용하기 위해서 생성. 메소드 안에서 inner 클래스가 생성될 때는 그 변수들의 값을 변경 불가 -> 지역 변수이기 때문
HashSet , HashMap 순회 어떤 id의 객체 remove시에 hashSet 은 iterator로 찾아서 해당 id와 객체의 id가 같은지 비교 후에 제거 하고 hashMap은 해당 id를 포함하는지 봐서 포함하면 그 id를 바로 삭제한다. (contains 사용) if(map.contains(id)) map.remove(id); 이런식. 차이가 존재 하는 이유는 hashSet은 인자로 하나만 들어간다. 즉 id와 Member객체가 같이 들어가는 것이 아니고 Member만 들어가므로 Member를 꺼내서 그 아이디를 비교해서 맞으면 Member를 삭제하는 식인데 Hashmap은 id와 그 id의 해당 Member도 같이 들어가므로 id를 알면 그 id를 삭제해 버리면 Member도 삭제됨. HashMap 순회 HashMap은 순회할..
TreeSet TreeSet은 정렬을 위한 메소드를 구성해야 함. TreeSet의 타입 class에 (만약 Member라면) public class Member implements Comparable { @Override public int compareTo(Member member) { return (this.id - member.id); } 이렇게 하면 id에 대한 오름 차순. String은 이름의 순서대로 이미 구현 되어 있음. 이름으로 구현 해 주고 싶으면 @Override public int compareTo(Member member) { return this.name.compareTo(member.getName()); //이름은 String이므로 String에 대해 이미 구현된 compareTo사용 } @O..
Set 중복 처리 Set에서 중복데이터의 기준이 만약 객체의 id라면 id가 같은것이 논리적인 같은 객체라는 것을 정의 해 주기 위해서 해당 class에서 equals를 override해서 id가 같을 때 true를 반환하도록 하면 됨.
객체를 참조하는 Set 인터페이스 public class Memset{ private HashSet hashSet; public Memset() { hashSet = new HashSet(); } public void add(Member member) { hashSet.add(member); } public boolean remove(int id) { Iterator ir = hashSet.iterator(); while(ir.hasNext()) { Member member = ir.next(); if(member.getMemberId() == id) { hashSet.remove(member); return true; } } System.out.println(id+"존재 x"); return false; } public void sho..
Set 인터페이스 set은 순서대로 입력되지 않으므로 반환받을 때 iterator로 참조해서 뽑아야됨. 사실 for문 변형문도 사용 가능. ArrayList는 get 메소드로 가능. Set은 중복을 허용하지 않음 HashSet set = new HashSet(); set.add("이"); set.add("김"); set.add("이"); 이는 하나만 저장됨. Iterator ir = set.iterator(); while(ir.hasNext()) { String str = ir.next(); System.out.println(str); } hasNext는 다음 멤버가 있는지 따지는 것. ir.next()는 그 다음 변수고 타입이 String이므로 str에 받아서 출력가능.
Stack , Queue Stack과 Queue는 ArrayList의 기능으로 금방 구현 가능. class Mystack{ private ArrayList sta = new ArrayList(); public void push(String data) { sta.add(data); } public String pop() { int len = sta.size(); if(len == 0) { System.out.println("empty"); return null; } return sta.remove(len-1); } } ------------------------------------------------ class MyQueue{ private ArrayList que = new ArrayList(); public void pus..
제너릭 프로그래밍 제너릭 프로그래밍 =: 템플릿 프로그래밍. 제너릭 클래스 public class Generic { private T material; } 1) 제너릭 타입만 정해진다고 new가 되는 것이 아니고 해당 타입으로 정해준 후에 set을 해줘야 함 2) 제너릭 클래스 타입을 한정짓고 싶으면 상위 클래스를 만들어서 그것을 상속하는 클래스들만 타입으로 할 수 있도록 설정함. 3) 상위 클래스를 추상클래스로 만들고 추상메소드를 만들면 상위 클래스를 상속받는 클래스들이 구현하게 되므로 그 클래스들을 제너릭 타입으로 쓰는 클래스에서는 해당 타입 객체 인스턴스를 이용해서 여러 함수를 사용가능. public class Generic { //T로 들어올 수 있는 객체중에 Material을 상속받은 객체만 들어올 수 있음. p..