JAVA

[JAVA] HashSet / HashMap / ArrayList를 매개변수로 넣은 메서드 / Properties 클래스

sian han 2022. 3. 10. 22:56

 

※ HashSet

public interface Set<E> extends Collection<E> - <E>는 제네릭스를 의미함

=> set은 Collection 의 자식이다

   - HashSet : Set<E> 인터페이스를 구현하는 컬렉션 클래스

   - 순서 유지하지 않는다
   - 중복 저장 허용하지 않는다

 

▷ HashSet 생성하기 

HashSet<String> hset = new HashSet<String>();

 

▷ HashSet 값넣기

 - add 사용

	hset.add("first");

 

▷ 값읽어오기

 - iterator 사용 ( Vector 도 사용방법동일하다. Iterator 의 구버전이기 때문에 ! )

Iterator<String>iter = hset.iterator();

while(iter.hasNext()) {
	String s = iter.next(); 
		System.out.println(s);
            }

첫째줄부터 코드해석해보자면

iterator() 메서드로 Iterator 인터페이스 가져오기 (= hashset에 들어있는걸 Iterator 에 담는다고 생각하면 됨)

hasNext() 왈 : 다음요소있어 ? 있는(ture)동안 반복문 계속돌려 ~

   - boolean hasNext(): 읽어올 요소가 남아있는지 확인함. 있으면 true, 없으면 false

next() 왈 : 있네 ! 어 가져와 ~ 

  - Object next(): 다음 요소를 읽어옴

 

 

 

 

Iterator 란 ? 

 - 컬렉션에 저장된 요소를 접근하는데 사용되는 인터페이스

 - set 에는 순서가 없으니 for문을 이용해 값을 출력할 수 없다. 따라서 Iterator 를 이용한다 ! 

 

 비고 :  ArrayList 도 Iterator 가 있긴한데 굳이 쓸필요는 없다 
 ArrayList 는 그냥 for 쓰면된다
 어쨋든 가능하긴 하다 ! 

 

 

 

▽HashSet 값추가, 값삭제, 크기구하기, 데이터출력하기, 검색하기

https://crazykim2.tistory.com/474

 

 


 

※ HashMap

   - 키와 값을 한쌍으로 해서 저장하는 자료구조
   - 순서유지되지않는다
   - 키는 중복허용 안되고, 값은 중복허용

 

▷ HashMap 생성하기

HashMap<Integer,String>map = new HashMap<Integer,String>();

 

▷ HashMap 값넣기

map.put(7, "홍길동");

 

 

▷ 특정값꺼내기

 -  값 = 키()         형식으로 값을 꺼내오면 됨 ! 

 

	String s = map.get(7);
		System.out.println("7번 키의 값:"+s);

- key값 7의 value얻기

 

 

 

▷ 특정값지우기 

map.remove(9);

 - 9번키의 값이 지워진거임

 

 

 

▷ 값 읽어오기 - (1.Iterator 이용) 

 - HashMap도 HashSet 과 같이 순서가 없기때문에 Iterator 이용한다 ! 

Iterator<Integer> iter=map.keySet().iterator();
		while(iter.hasNext()) {
			int key=iter.next();
			String val=map.get(key);
			System.out.println("key="+key+", value="+ val);			
		}

특정 key값의 value를 가져오고싶다면 get(key)를 사용 

전체를 출력하려면 entrySet()이나 keySet()메소드를 활용하여 Map의 객체를 반환받은 후 출력하면 됩니다.

 

 

 

▷ 값 읽어오기 - (2. for문에서 키 이용)

  - 다시한번말하지만 map 은 순서가 없다.

    for문은 인덱스 값을 이용하는 것이 아니라 key 값을 넣어 value 를 출력하는 것이다.

for(int i = 0; i < map2.size(); i++){
			System.out.print(map2.get(i) +" ");
		}

 

 

 

 

 


ArrayList매개변수로 넣은 메서드를 만들어보자

 악마다 악마 ArrayList 버거운데 이걸 매개변수 넣어서 메서드를 만들어 ? 차암나 .. 앙.마.

 

▷ 메서드 만들기

	public void findSum(ArrayList<Integer>subject) {
		sum=0;
		for(int i=0;i<subject.size();i++) {
			int n=subject.get(i);
			sum+=n;
		}

 - ArrayList 안에 들어있는 값을 모두 더하는 메서드임

 

 

▶ 만든메서드 main()에서 사용해보기

 

 ▷ ArrayList 만들어서 안에 값 넣기 

   ( 배열 값 더하기 메서드를 사용해야하니까

        더할 것들을 만들어주는 작업 ) 

ArrayList<Integer> list = new ArrayList<Integer>();
Scanner sc = new Scanner(System.in);
System.out.println("국,영,수 점수 입력!");
for(int i=0;i<3;i++) {
			list.add(sc.nextInt());
		}

 

 

 

▷ 메서드 호출해서 사용하기

s.findSum(list);

 = 이렇게 하면 list 안에있는 값들이 모두 더해져서 sum 변수에 입력된상태 ! 

    return void 로 설정했기 때문에 println으로 호출해줘야 출력이 가능하다

 

▽이렇게 !

System.out.println("총점 : "+ s.getSum()");

 


※ Properties 클래스

 - HashMap의 구버전인 Hashtable을 상속받아 구현한 것

                                    ㄴ 키와 값을 (Object, Object)의 형태로 저장

 - (String, String)의 형태로 저장 > Hashtable 보다 간단 ! 

 -  주로 어플리케이션의 환경설정과 관련된 속성을 저장하는 데 사용
     데이터를 파일로부터 읽고 쓰는 기능 제공

 - 코드를 건들이지 않고도 정보를 변경할 수 있다는 강점이 있다.

 

 

▶ Properties 사용해서 값 읽어오기 (기본)

Properties prop = new Properties();
prop.setProperty("size", "10");

String size = prop.getProperty("size");
System.out.println("size="+size); // size = 10

= > getProperty() 메서드에 '키' 를 넣으면 '값' 이 도출된다

  - 근데 이 방법 보다는 아래 방법이 더 자주쓰여 중요하다.

 

 

 

▶ Properties 사용해서 값 읽어오기 (★★★★★)

Properties prop = new Properties();
		
		InputStream is;
		try {
			is = new FileInputStream("text/input.txt");
			prop.load(is);  //파일에 있는 데이터를 Properties 컬렉션에 저장
		} catch (FileNotFoundException e) {
			e.printStackTrace();
		} catch (IOException e) {
			e.printStackTrace();
		}
		
		String name=prop.getProperty("name");
		String data=prop.getProperty("data");
		System.out.println("name="+name);
		System.out.println("data="+data);

진짜 모르겠다 일단 외우자 !!! 

 - 파일을 직접 여는 클래스가 아니므로 FileReader 또는 FileInputStream 객체를 매개변수로 받음

 - load() 메소드를 통해 파일 정보를 넣어줌