14일차....

고라파덕·2021년 3월 23일
0

JAVA

목록 보기
11/13
post-thumbnail

Map

keyvalue를 한쌍으로 저장하고 관리하는 클래스이다.
key값은 중복될수 없으며 value는 중복이 가능하다.
데이터 검색이 용이하다.
주요메소드

public V remove(Object key) : key에 매핑되어있는  value삭제
public V put (k key, V value) : key에 매핑되어있는 value를 한쌍으로 저장
public V get(Object key) : key에 매핑되어있는 value 리턴
public V replace(K key, V value) : key에 매핑되어있는 value를 수정
public Collection<V> values() :  value값들을 collection객체로 리턴
public Set<K> keySet() : keySet메소드를 사용해서 키값들을 모두 출력

예)

HashMap <Integer, String> hs = new HashMap<>();// key값은Integer, value 값은 String타입으로 저장할 HashMap이다.
hs.put(1,"홍길동"); // public V put메소드에 key값과 String값을 저장
hs.put(2,"이길동");
hs.put(3,"삼길동");
Scanner scan = new Scanner(System.in);
System.out.println("조회할 학생 번호 입력")
int n = scan.nextInt();
String s = hs.get(n); //public V get()메소드에 key와value 리턴
if(s==null){ // 해당 값이 없을때 null을 사용
	System.out.println("해당 학생 번호가 없다.");
}else {
	System.out.println("value"+s);
}

예)

회원 아이디를 key로 회원이름을 value로 저장하는 HashMap를 생성하고 데이터 저장
1.회원아이디로 이름 조회
2.회원 아이디로 회원 이름 삭제

HashMap<String, String> hs = new HashMap<>();// jdk7버전 이상부터 뒤에붙는 <> 생략가능
Scanner scan = new Scanner(System.in);
hs.put("user","홍길동"); // hs.put()에 key값과 value값 한쌍을 저장
hs.put("test","김미애");
hs.put("admin","이산");
System.out.println("회원 아이디 입력");
String id = scan.next();
String a = hs.get(id);// id를 입력받은 값이 key값에 저장된 값과 같다면 value를 리턴해준다.
if(a==null){ // key값이 저장한 값과 다르면 println출력
	System.out.println("해당 아이디가 존재하지 않습니다.");
}else { //key값이 저장한 값과 같으면 value 출력
	System.out.println("해당아이디는:"+a)
}
System.out.println("삭제할 아이디를 입력");
del = scan.next();
String b = hs.remove(del); // del을 입력받은 key값의 value를 삭제
if(del==null){
	System.out.println("해당 아이디가 존재하지 않습니다.");
}else{
	System.out.println("삭제한 아이디와 이름"+d+","+a);
}
public Set<K> keySet()
public Collection<V> values())

HashMap<Integer, String> hs = new HashMap<>();// 제네릭에 타입저장
hs.put(1,"아이폰"); // key,value값 저장
hs.put(2,"에어팟");
hs.put(3,"맥북");
Collection<String> c = hs.value(); value값들을 Collection객체로 리턴
Iterator<String> it = c.iterator(); // value값을 하나하나 빼내오기
while(it.hasNext()){ // .hasNext은 Iterator에 해당하는 값이 있으면 next에 값 저장
	String v = it.next();
	System.out.println(v);// 출력
}
Set<Integer> k = new keySet();// keySet메소드를 이용해서 key값에 저장된 값을 출력
Iterator it2 = k.iterator(); // key값을 하나하나 빼옴
while(it2.hasNext()){ //해당하는 값이 있으면 next()에저장
	Integer i = it2.next
      	String value = hs.get(i); //value값을 알고 위해서 get()에 key값을 추가
	System.out.println(i+value); 출력
}

향상된 for문

형식
for(자료형 변수명:배열또는 컬렉션){
반복문장
...
}

예)

int[] a = {10,20,30,40,50};
for(int n:a){ //배열의 요소를 순차적으로 꺼내온다. 증감식 안써도 된다.
System.out.println(n);
})
ArrayList<String> list = new ArrayList<>();
list.add("감귤");
list.add("한라봉");
list.add("사과");
list.add("포도");
for(String n:list){
System.out.println(n);
}

예)

Student 객체 3개를 ArrayList에 저장하고 향상된 for문을 사용해서 출력

Student클래스가 있다라는 가정
ArrayList<Student> list = new ArrayList<>();
list.add(new Student(1,"홍길동","010123"))
list.add(new Student(2,"이길동","010456"))
list.add(new Student(3,"삼길동","010789"))
for(Student n:list){
System.out.println(n);//toString()생략
}

내부클래스

클래스 내부의 또 다른 클래스를 만드는것
내부 클래스는 외부 클래스의 모든 멤버를 자신의 멤버처럼 사용할 수 있다.

예)

class Outer1{ //외부클래스
	private int a=10;
	class Inner1{//내부클래스
		private int b =20; 
		public void printlnAll(){
			System.out.println("a:"+a+"b:"+b);
		}
	}
	public void printA(){
		System.out.println("a:"+a);
	}
	public void printAB(){
		Inner1 inner1 = new Inner1();
		inner1.printAll();
	}
}
public class Test01 {
	public static void main(String[] args) {
		Outer1 ot = new Outer1();
		ot.printAB(); 
        	//출력값 a:10, b:20
}
}

로컬내부 클래스

메소드안에 클래스가 만들어진 경우
메소드안에서만 사용가능하다.
외부 클래스의 멤버변수는 접근 가능하지만 메소드내의 지역변수는 접근할 수 없고 final 상수만 접근 가능하다.

예)

class Outer2 {
	private int a = 10;

	public void test() {
		int b = 20;
		b = 200;
		final int c = 30;
		class Inner2 {// 메소드내부에서 클래스가 정의됨 -->로컬내부클래스
			public void print() {
				System.out.println("a:" + a);
				// b=200; 지역 변수는 접근못함
				// System.out.println("b:"+b);
				System.out.println("c:" + c);
			}
		}
		Inner2 in2 = new Inner2();
		in2.print();
	}
}

public class Test02_localinner {
	public static void main(String[] args) {
		Outer2 outer2 = new Outer2();
		outer2.test();

	}
}

Anonymous

익명의 외부클래스
-이름이 없는 클래스
-추상클래스나 interface를 상속받아 만든 클래스가 딱 한번만 사용되고 더이사 사용되지 않을때 익명의 내부 클래스를 만들어 사용한다.

예)

형식)
인터페이스명(추상클래스명) 객체명 = new 인터페이스명(){
	추상메소드 오버라이딩(){}
	};
)
interface Shape{
	void draw();
}

	public class Anonymous{
	public static void main(String[] args) {
		class tri implements Shape{
    		public void draw(){
     		   	System.out.println("도형그리기");
    	    }
   		 }
   		 tri. t = new tri();
   		 t.draw();

   		 Shape s = new Shape(){//객체를 딱 한번만 사용 가능함
   		       public void draw(){
    				System.out.println("사각형그리기")
    		}
 	   };
  	   s.draw();
    
   		 new Shape(){
    		public void draw(){
    				System.out.println("직선그리기");
   		 	}
  	    }.draw();
        
		}
	}
    

0개의 댓글