Set extends Collection
-구현 클래스
HashSet
집합에서는 중복되는 원소를 포함할 수 없는 것처럼
HashSet이라는 자료구조는 중복되는 값을 무시한다.
저장된 값들은 인덱스가 없기 때문에 순서가 없다.
값의 유무 검사에 특화되어 있는 자료구조이고
해시코드로 유무 검사가 진행되기 때문에 속도가 상대적으로 좋다.
Iterator()-순서 부여
순서가 없는 객체에 순서를 부여하거나, 순서가 있어도 iterator 방식의 순서로
변경하고자 할때 사용한다.
hasNext()를 통해 다음 값이 있는 지 검사하고, next()를 사용해서 값을 가져온다.
package hashSetTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
//HashSet 자료구조는 중복값을 무시
//iterator : iterator만의 순서로 정렬
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> bloodTypeSet = new HashSet<String>();
bloodTypeSet.add("A");
bloodTypeSet.add("B");
bloodTypeSet.add("O");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
System.out.println(bloodTypeSet); //중복 제거 확인
Iterator<String> iter = bloodTypeSet.iterator();
System.out.println(bloodTypeSet.toString()); //iterater 재정의
// HashSet에 iterator에서 [로 시작하고 각 값을 , 로 이어주고 ] 로 닫아주게 설계되어있다
while(iter.hasNext()) {
System.out.println(iter.next());
}
-출력결과에서 중복이 제거된걸 알 수 있다.
package hashSetTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
//HashSet 자료구조는 중복값을 무시
//iterator : iterator만의 순서로 정렬
public class HashSetTest {
public static void main(String[] args) {
//arraylist 중복 제거
ArrayList<Integer> datas = new ArrayList<Integer>(Arrays.asList(10, 30, 30, 30, 20, 10, 90));
HashSet<Integer> dataSet = new HashSet<Integer>(datas); // hashset 생성자에 datas를 넣고
datas = new ArrayList<Integer>(dataSet); //arraylist 생성자 hashset 객체를 넣어주면
System.out.println(datas); // 중복제거
}
}
package hashSetTest;
public class Student {
private int number;
private String name;
//기본 생성자
public Student() {;}
//초기화 생성자
public Student(int number, String name) {
super();
this.number = number;
this.name = name;
}
//getter, setter
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
//toString 재정의
@Override
public String toString() {
return "Student [number=" + number + ", name=" + name + "]";
}
//equals 재정의
@Override
public boolean equals(Object obj) {//학생의 번호를 검사
if(this == obj) {return true;}
if(obj instanceof Student) {
Student student = (Student) obj; // 다운캐스팅하여 번호를 가저옴
if(this.number == student.getNumber()) {
return true;
}
}
return false;
}
}
package hashSetTest;
//Student test
import java.util.HashSet;
import hashMapTest.Student;
public class HashCodeTest {
public static void main(String[] args) {
Student student = new Student(1, "송태섭");
System.out.println(student.equals(new Student(1,"송태섭")));//주소가 아닌 번호 비교 true
HashSet<Student> studentSet = new HashSet<Student>(); // equals 재정의를 안할시 false
}
}
package hashSetTest;
//Student test
import java.util.HashSet;
public class HashCodeTest {
public static void main(String[] args) {
Student student1 = new Student(1, "송태섭");
Student student2 = new Student(1, "송태섭");
// 각각 선언했기때문에 값은 같을지언정 주소는 다르다
System.out.println(student1.equals(student2));
HashSet<Student> studentSet = new HashSet<Student>();
studentSet.add(student1);
studentSet.add(student2);
System.out.println(studentSet.size());
}
}
↑ 중복제거가 되지않았을때
↓Student class 에 해당 hashcode를 재정의 후
@Override
public int hashCode() {
return this.number;
}
↑ 중복제거된 모습
contains
-set 에 특화된 검사 메서드
package hashSetTest;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
//HashSet 자료구조는 중복값을 무시
//iterator : iterator만의 순서로 정렬
public class HashSetTest {
public static void main(String[] args) {
HashSet<String> bloodTypeSet = new HashSet<String>();
bloodTypeSet.add("A");
bloodTypeSet.add("B");
bloodTypeSet.add("O");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
bloodTypeSet.add("AB");
if(bloodTypeSet.contains("A")) { // 요소안에 'A'가 포함되어잇나
System.out.println("있음");
}
}
}
Map
-구현 클래스
★HashMap(서버 간 데이터 교환에 사용)
key(Set)와 Value(Collection) 두개의 자료구조 한 쌍(Entry)으로 저장되며, 검색의 목적을 가지고 있다.
key에 중복된 값을 넣으면 Value가 최근 값으로 수정되고,
중복되지 않은 값을 넣으면 새롭게 추가된다. Key 값은 중복이 불가능하지만 Value는 중복이 가능하다.
HashTable로 Key와 Value가 연결이되어있다
index 나 Key값으로 선택하여 value를 찾는것이 목적
ex)
과자 | 가격 |
새우깡 | 1600 |
바나나킥 | 2000 |
맛동산 | 1800 |
에서 새우깡이 얼마인지 찾을때 사용
JSON
자바 스크립트의 객체 형식을 기반으로 만들어진 데이터를 표현하는 방식
심플하고 가벼워 송신과 수신 간에 데이터 교환시 사용이 용이하다.
toString 재정의가 되어 JSON 형식으로 리턴되게 설계되어있다.
언어에 제약이 없으며 객체형태로 사용한다.
package hashMapTest;
import java.util.HashMap;
import org.json.JSONException;
import org.json.JSONObject;
public class HashMapTest {
public static void main(String[] args) {
// 아이디, 비밀번호, 이름, 나이
HashMap<String, Object> userMap = new HashMap<String, Object>();
// Integer써야해서 Object
JSONObject userJSON = null;
// 초기화해야하는데 생성자를 호출하지 못하기때문에 usermap에 데이터가 들어가고 전달이 가능
String json = null;
//문자열 값을 JSON으로 바꾸기 위해 선언
userMap.put("id", "sts");
userMap.put("password", "1234");
userMap.put("name", "송태섭");
userMap.put("age", "20");
System.out.println("↓JSON 사용시");
userJSON = new JSONObject(userMap); //usermap에 데이터가 들어가고 나서 객체화!
System.out.println(userJSON);
//JSON 오브젝트가 잘못된 형식으로 작성되거나 잘못된 키or 값이 전달되었을경우 예외처리
try {
userJSON.put("gender", "none"); //key와 값 추가, 순서가 정해지지않는다
// 사용시 try catch 필수
System.out.println(userJSON); //추가된 값 출력
json = userJSON.toString();// usermap 객체에있는걸 문자열값으로 json에 담은것
} catch (JSONException e) { //예외 처리
e.printStackTrace();//예외 발생 원인을 파악하는 메서드(예외 객체의 스택 트레이스 정보를 출력)
}
try {
System.out.println(userJSON.get("id")); // 사용시 try catch 필수
} catch (Exception e) {
e.printStackTrace();
}
try {
userJSON = new JSONObject(json); //json이 아닐수 있어서 try catch 강제
System.out.println(userJSON.get("id")); // 사용시 try catch 필수
} catch (Exception e1) {
e1 .printStackTrace();
}
}
}
package hashMapTest;
//상품 클래스 선언(상품 번호, 상품 이름, 상품 가격, 상품 재고)
// Product 클래스에 tostring, 기본생성자, 초기화생성자 getter setter 정의,
// product id는 1++되게끔 sequence
//1. 상품 1개를 제작하여 JSON 형식으로 변경
//2. JSON 형식의 상품 정보 중 상품 재고 출력
//3. 할인 중인 상품 정보 제작
//4. 할인 중인 상품의 KEY값은 discount로 설정
//5. JSON 형식으로 변경
//6. JSON에 할인율 필드 추가
//7. JSON 형식의 상품 정보 중 할인율 출력
import org.json.JSONException;
import org.json.JSONObject;
public class JSONTask {
public static void main(String[] args) {
// 상품 클래스 선언(상품 번호, 상품 이름, 상품 가격, 상품 재고)
// 1. 상품 1개를 제작하여 JSON 형식으로 변경
Product product = new Product("감자", 1500, 85);
JSONObject productJSON = new JSONObject(product);
// 2. JSON 형식의 상품 정보 중 상품 재고 출력
try {
System.out.println(productJSON.get("productStock"));
} catch (JSONException e) {
e.printStackTrace();
}
System.out.println("");
// 3. 할인 중인 상품 정보 제작
Product discount = new Product("고구마", 800, 100);
JSONObject discountJSON = new JSONObject(discount);
//json을 다시 json에 넣기위한 생성자
JSONObject products = new JSONObject();
// 4. 할인 중인 상품의 KEY값은 discount,product로 설정
try {
// json객체 안에 json " 키값" , value
products.put("product", productJSON);
products.put("discount", discountJSON);
} catch (JSONException e) {
e.printStackTrace();
}
// 5. JSON 형식으로 변경
System.out.println("할인중인 상품:"+products.toString());
System.out.println("");
// 6. JSON에 할인율 필드 추가
try {
// JSON객체 down casting 사용법
// discountJSON = ((JSONObject)products.get("discount")).put("discount", 50);
// down캐스팅 없이 객체 사용법
discountJSON = products.getJSONObject("discount").put("discount", 50); //discount(할인율) 50 추가
System.out.println(discountJSON);
products.put("discount", discountJSON); // products에 "discount"키의 value 변경사항 반영(수정)
System.out.println("");
// 7. JSON 형식의 상품 정보 중 할인율 출력
//"discount" 키값의 새로 추가한 value : discount: 50의 값을 출력
System.out.println(products.getJSONObject("discount").get("discount"));
} catch (JSONException e) {
e.printStackTrace();
}
}
}
출력결과 :
85
할인중인 상품:{"product":{"productId":1,"productStock":85,"productname":"감자","productPrice":1500},"discount":{"productId":2,"productStock":100,"productname":"고구마","productPrice":800}}
{"productId":2,"productStock":100,"productname":"고구마","discount":50,"productPrice":800}
50
'웹개발 수업 > JAVA' 카테고리의 다른 글
웹개발_JAVA 22 (4) | 2023.03.11 |
---|---|
웹개발_JAVA 21 (0) | 2023.03.06 |
웹개발_JAVA 19 (0) | 2023.02.15 |
웹개발_JAVA 18 (2) | 2023.02.15 |
웹개발_JAVA 17 (0) | 2023.02.14 |
댓글