출처 |
https://www.youtube.com/watch?v=iVX4uGfGXck&list=PLHpaQi-LiUCx-vcbcnpU5Tzv2X99WCowN
기본형 배열
배열은 기본형 배열과 참조형 배열로 나뉜다.
기본형 배열이란 boolean, byte, short, char ,int, long , float, double 타입의 변수를 여러개 선언할 필요가 있을 때 사용한다.
public class Main {
public static void main(String[] args) {
int[] array1;
int array2[];
int array3[];
array1 = new int[5];
array2 = new int[5];
array3 = new int[0];
}
}
}
array1 = new int[5];
array2 = new int[5];
array3 = new int[0];
1,2번쨰는 정수 5개를 가질 수 있는 배열 참조
3번째는 배열을 담지 못한다. [아무것도 가질 수 없다]
2)
public class Exam {
public static void main(String[] args)
{
int[] array1, array2; .... 1
int array3[], array4; .... 2
}
}
1번은 array1,2 둘 다 배열 vs 밑은 array3만 배열 4는 변수
public class Exam {
public static void main(String[] args)
{
int[] array1 = new int[5];
array1[0] = 1;
array1[1] = 2;
array1[2] = 3;
array1[3] = 4;
array1[4] = 5;
int[] array2 = new int[] {1,2,3,4,5}; // 숫자값이 안 들어감
int[] array3 = {1,2,3,4,5};
System.out.println("array1의 값 출력");
for(int i = 0; i < 5; i++)
{
System.out.println(array1[i]);
}
System.out.println("array2의 값 출력");
for(int i = 0; i < 5; i++)
{
System.out.println(array2[i]);
}
System.out.println("array3의 값 출력");
for(int i = 0; i < 5; i++)
{
System.out.println(array3[i]);
}
}
}
참조형 배열이란 배열의 타입이 기본형이 아닌 경우를 말한다.
배열 변수가 참조하는 배열의 공간이 값을 저장하는 것이 아니라 참조한다는 것을 의미한다.
public class ItemForArray { //불변 Class
private int price;
private String name;
public ItemForArray(int price, String name){
this.price = price;
this.name = name;
}
public int getPrice()
{
return price;
}
public String getName()
{
return name;
}
}
public class Array04 {
public static void main(String[] args)
{
ItemForArray[] array1;
ItemForArray array2[];
array1 = new ItemForArray[5];
array2 = new ItemForArray[5];
array1[0] = new ItemForArray(500, "item01");
array1[1] = new ItemForArray(1500, "item02");
System.out.println(array1[1].getName());
}
}
public class Array05 { //psvm ctrl + space
public static void main(String[] args) {
ItemForArray[] array1 = new ItemForArray[3];
array1[0] = new ItemForArray(500, "사과");
array1[1] = new ItemForArray(600, "바나나");
array1[2] = new ItemForArray(700, "수박");
ItemForArray[] array2 = new ItemForArray[]{new ItemForArray(500,"사과"), new ItemForArray(600,"바나나"), new ItemForArray(700,"수박")};
ItemForArray[] array3 = {new ItemForArray(500,"사과"), new ItemForArray(600,"바나나"), new ItemForArray(700,"수박")};
System.out.println(array1[0].getName());
System.out.println(array1[0].getPrice());
System.out.println(array1[1].getName());
System.out.println(array1[1].getPrice());
System.out.println(array1[2].getName());
System.out.println(array1[2].getPrice());
}
}
public class Array06 {
public static void main(String[] args) {
double[] array1 = new double[5];
double[] array2 = {1.5,2.4,3.5};
double[] array3;
double[] array4 = null;
System.out.println(array1.length);
System.out.println(array2.length);
}
}
public class Array08 {
public static void main(String[] args) {
int[][] array = new int[2][3];
array[0][0] = 0;
array[0][1] = 1;
array[0][2] = 2;
array[1][0] = 3;
array[1][1] = 4;
array[1][2] = 5;
for(int i = 0; i < array.length; i++) //2까지
{
for(int j = 0; j < array[i].length; i++) //012 -> 3까지
{
System.out.println(array[i][j] + "\t");
}
System.out.println();
}
}
}
public class Array09 {
public static void main(String[] args) {
int[][] array = {{0,1,2}, {3,4,5}};
for(int i = 0; i < array.length; i++)
{
for(int j = 0; j < array[i].length; j++)
{
System.out.println(array[i][j] + "\t");
}
System.out.println();
}
}
}
public class Array10 {
public static void main(String[] args) {
int[][] array = new int[2][];
array[0] = new int[2];
array[1] = new int[3];
array[0][0] = 0;
array[0][1] = 1;
array[0][2] = 2;
array[1][0] = 3;
array[1][1] = 4;
array[1][2] = 5;
for(int i = 0; i < array.length; i++) //2까지
{
for(int j = 0; j < array[i].length; i++) //012 -> 3까지
{
System.out.println(array[i][j] + "\t");
}
System.out.println();
}
}
}
public class Array11 {
public static void main(String[] args){
int[] array = {1,2,3,4,5};
for(int i : array) //array배열로부터 하나씩 꺼내라는 말
{
System.out.println(i);
}
}
}
public class Array12 {
public static void main(String[] args) {
ItemForArray[] array = new ItemForArray[3];
array[0] = new ItemForArray(500, "사과");
array[1] = new ItemForArray(300, "참외");
array[2] = new ItemForArray(600, "수박");
for(ItemForArray item : array)
{
System.out.println(item.getName());
System.out.println(item.getPrice());
}
}
}
import java.nio.file.Files;
import java.util.Arrays;
public class Array14 {
public static void main(String[] args) {
int[] copyFrom = {1,2,3};
int[] copyTo = Arrays.copyOf(copyFrom, copyFrom.length);
if(copyTo == copyFrom)
{
System.out.println("copyTo == copyFrom");
}
else
{
System.out.println("copyTo != copyFrom");
}
for(int c : copyTo)
{
System.out.println(c);
}
System.out.println("----------------------------");
int[] copyTo2 = Arrays.copyOf(copyFrom, 5);
for(int c : copyTo2)
{
System.out.println(c);
}
}
}
배열을 참조하는 곳이 다르기 때문에 같지 않다. System.out.println("copyTo != copyFrom");
같은 걸 참조하느냐? copyFrom == copyTo3는 True
배열을 복사하는 것은 다른 부분
public class Array15 {
public static void main(String[] args) {
char[] copyFrom = {'h', 'e', 'l', 'l', 'o', '!'};
char[] copyTo = java.util.Arrays.copyOfRange(copyFrom,1,3);
for(char c : copyTo)
{
System.out.println(c);
}
}
}
import java.util.Arrays;
public class Array16 {
public static void main(String[] args) {
int[] array1 = {1,2,3,4,5};
int[] array2 = {1,2,3,4,5,6};
int compare = Arrays.compare(array1, array2);
// 비교 할 때는 양수, 0 , 음수 기억하자.
// x-y = 결과가 양수가 나온다면?
//
System.out.println(compare);
}
}
import java.util.Arrays;
public class Array172 {
public static void main(String[] args) {
Item[] items = new Item[5];
items[0] = new Item("java", 5000);
items[1] = new Item("파이썬", 7000);
items[2] = new Item("C#", 10000);
items[3] = new Item("자바스크립트", 17000);
items[4] = new Item("Peal", 15000);
// sort(Object[]) - Object는 모든 객체의 조상이니깐. 어떤 객체의 배열이든 올 수 있다.
Arrays.sort(items);
for(Item item : items)
{
System.out.println(item);
}
}
}
// Comparable는 어떤 Item이 큰지, 직은지 기준을 정하는 interface
class Item implements Comparable
{
private String name;
private int price;
public Item(String name, int price) { //생성자
this.name = name;
this.price = price;
}
public void setName(String name) {
this.name = name;
}
public void setPrice(int price) {
this.price = price;
}
public String getName() {
return name;
}
public int getPrice() {
return price;
}
@Override
public String toString() {
return "Item{" +
"name='" + name + '\'' +
", price=" + price +
'}';
}
@Override //파라미터로 들어온 Object와 내 자신을 비교하는 메소드
//CompareTo에는 Object를 받아들이도록 했지만 실제로 Item이 들어온다.
public int compareTo(Object o) {
Item d = (Item)o;
return this.name.compareTo(d.name); // 자기 자신의 이름과 this.name vs d.name 비교
// 비교할 땐, 양수, 0, 음수로 비교한다.
}
}
import java.util.Arrays;
import java.util.Comparator;
public class Array172 {
public static void main(String[] args) {
Item[] items = new Item[5];
items[0] = new Item("java", 5000);
items[1] = new Item("파이썬", 7000);
items[2] = new Item("C#", 10000);
items[3] = new Item("자바스크립트", 17000);
items[4] = new Item("Peal", 15000);
// sort(Object[]) - Object는 모든 객체의 조상이니깐. 어떤 객체의 배열이든 올 수 있다.
Arrays.sort(items, new ItemSorter()); //Arrays.sort(items, 정렬방법정의);
for(Item item : items)
{
System.out.println(item);
}
}
}
class ItemSorter implements Comparator {
public int compare(Object o1, Object o2) { // o1 - o2
Item item1 =(Item)o1;
Item item2 =(Item)o2;
return 0;
}
}
public class ObjectBox {
private Object object;
public void set(Object obj)
{
this.object = obj;
}
public Object get() //obj 리턴한다.
{
return this.object;
}
}
public class ObjectBoxMain {
public static void main(String[] args) {
ObjectBox box = new ObjectBox();
box.set("kim");
String str = (String)box.get();
System.out.println(str.toUpperCase());
box.add(new Integer(5));
Integer i = (Integer)box.get();
System.out.println(i.intValue());
}
}
사용하는 이유는 ObjectBox는 어떤 Object든 저장할 수 있고, 어떤 Object를 꺼낼 수 있다. 꺼내서 사용할 때는 원래 타입으로 변환시키는 번거로운 과정이 필요하다.
public class GenericBox <T>{
//t타입을 꺼낸다. 아직 정해져있지 않다.
private T t;
public void add(T obj)
{
this.t = obj;
}
public T get()
{
return this.t;
}
}
public class GenericBoxMain {
public static void main(String[] args) {
GenericBox<String> genericbox = new GenericBox<>();
//<string> T라는 아직 정해져있지 않은 클래스를 제네릭 박스로 쓰겠다. T = String으로 다 통일되어 취급된다.
genericbox.add("kim");
String str = genericbox.get();
System.out.println(str.toUpperCase());
GenericBox<Object> objectbox = new GenericBox<>();
objectbox.add("hello");
String str2 = (String)objectbox.get();
System.out.println(str2);
}
}
T는 제네릭과 관련된 부분이다.
제네릭은 클래스 이름 뒤나, 메소드의 리턴타입 앞에 붙을 수 있다.
부분은 T라는 이름의 제네릭 타입을 선언한다는 것을 의미한다.
T는 Type의 약자기 때문에 많이 사용되는 문자이지 T를 쓸필요는 없다.
T가 아니라 E나 D등의 단어를 사용해도 된다.
java Collections Framework라고 불리워지는 Collections API는 Java 2부터 추가 된 자료구조 클래스 패키지를 말한다.
자료를 다룰 때 반드시 필요한 클래스의 모음으로써 JAVA프로그래머라면 꼭!!! 숙지해야한다.
import java.util.ArrayList;
public class ListExam01 {
public static void main(String[] args) {
ArrayList list = new ArrayList();
list.add("Kim");
list.add("Lee");
list.add("hong");
String str1 = (String)list.get(0);
String str2 = (String)list.get(1);
String str3 = (String)list.get(2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
import java.util.ArrayList;
public class ListExam02 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList();
list.add("Kim");
list.add("Lee");
list.add("hong");
String str1 = list.get(0);
String str2 = list.get(1);
String str3 = list.get(2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
결과
Kim
Lee
hong
형 변환
을 하지 않아도 된다. import java.util.ArrayList;
import java.util.Collection;
import java.util.Iterator;
public class ListExam03 {
public static void main(String[] args) {
Collection<String> collection = null; // collection을 구현하고 있는 자료구조
collection.add("Ohj");
collection.add("KKIM");
collection.add("Rong");
System.out.println(collection.size());
Iterator<String> iter = collection.iterator(); // iterator는 collection 안에 들어있는 모든 원소를 받는다.
while(iter.hasNext()) // 꺼낼게 있다는 말
{
String str = iter.next();
System.out.println(str);
}
}
}
import java.util.ArrayList;
import java.util.List;
public class ListExam02 {
public static void main(String[] args) {
List<String> list = new ArrayList();
list.add("Kim");
list.add("Lee");
list.add("hong");
String str1 = list.get(0);
String str2 = list.get(1);
String str3 = list.get(2);
System.out.println(str1);
System.out.println(str2);
System.out.println(str3);
}
}
import java.util.*;
public class SetExam {
public static void main(String[] args) {
Set<String> set = new HashSet<>();
boolean flag1 = set.add("Hello");
boolean flag2 = set.add("hi");
boolean flag3 = set.add("hong");
boolean flag4 = set.add("hong");
System.out.println(flag1);
System.out.println(flag2);
System.out.println(flag3);
System.out.println(flag4);
Iterator<String> iter = set.iterator();
while(iter.hasNext() )
{
String str = iter.next();
System.out.println(str);
}
}
}
import java.util.HashMap;
import java.util.Map;
public class MapExam {
public static void main(String[] args) {
Map<String,String> map = new HashMap<>();
map.put("k1", "hello");
map.put("k2", "heo");
map.put("k3", "he");
System.out.println(map.get("k1"));
System.out.println(map.get("k2"));
System.out.println(map.get("k3"));
}
}