key
와 value
를 한쌍으로 저장하고 관리하는 클래스이다.
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
(자료형 변수명:배열또는 컬렉션){
반복문장
...
}
예)
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();
}
}
익명의 외부클래스
-이름이 없는 클래스
-추상클래스나 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();
}
}