ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • JAVA ์ž๋ฐ” List๊ณ„์—ด ArrayList
    JAVA 2020. 8. 13. 22:19

    ๐ŸŽฏ ์ž๋ฐ” List ์ปฌ๋ ‰์…˜์˜ ArrayList๋ฅผ ์—ฐ์Šตํ•ด๋ณธ๋‹ค.

     

     

     

     

    ArrayList

    ์ปฌ๋ ‰์…˜์˜ ๋˜ ๋‹ค๋ฅธ ํ•˜์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ธ List๋Š” ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•  ๋•Œ ์ˆœ์„œ๊ฐ€ ์žˆ์–ด์„œ ์ค‘๋ณต ์ €์žฅ์ด ๊ฐ€๋Šฅํ•˜๋‹ค. ์ €์žฅ๋œ ์œ„์น˜๊ฐ’์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์ปฌ๋ ‰์…˜ ์ค‘๊ฐ„์— ๊ฐ’์„ ์‚ฝ์ž…ํ•˜๊ฑฐ๋‚˜ ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—… ๋“ฑ Set๋ณด๋‹ค ํ›จ์”ฌ ๋‹ค์–‘ํ•œ ๊ธฐ๋Šฅ์„ ์ฒ˜๋ฆฌํ•˜๋Š” ๋ฉ”์†Œ๋“œ๋ฅผ ์ œ๊ณตํ•œ๋‹ค. List๋Š” ์ธํ„ฐํŽ˜์ด์Šค์ด๊ธฐ ๋•Œ๋ฌธ์— ArrayList ํด๋ž˜์Šค๋ฅผ ํ†ตํ•ด ๊ตฌํ˜„ํ•ด์„œ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ArrayList ํด๋ž˜์Šค ์‚ฌ์šฉํ•˜๊ธฐ

    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.List;
    
    public class Ex10_7 {
    	public static void main(String[] args) {
    		List<String> list = new ArrayList<String>();
    		list.add("ํ™๊ธธ๋™");
    		list.add("์ด์ˆœ์‹ ");
    		list.add("์œ ๊ด€์ˆœ");
    		list.add("ํ™๊ธธ๋™");
    		list.add("ํ™๊ธธ๋™");
    		
    		System.out.println("0์œ„์น˜๊ฐ’ ์ถœ๋ ฅ: "+list.get(0));
    		System.out.println("toString() ์ „์ฒด ์ถœ๋ ฅ: "+list);
    		
    		for(String data : list) {
    			System.out.println("forEach ์ „์ฒด ์ถœ๋ ฅ: "+data);
    		}
    		
    		Iterator<String> ite = list.iterator();
    		while(ite.hasNext()) {
    			String data = ite.next();
    			System.out.println("Iterator:"+data);
    		}
    		
    		System.out.println("Set์˜ ๋ฐ์ดํ„ฐ ๊ฐฏ์ˆ˜? "+ list.size());
    		System.out.println("Set์ด ๋น„์–ด์žˆ๋ƒ? "+ list.isEmpty());
    		System.out.println("Set์— ์ด์ˆœ์‹  ํฌํ•จ์—ฌ๋ถ€? "+list.contains("์ด์ˆœ์‹ "));
    		
    		Object [] arr = list.toArray();
    		System.out.println("๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ ํ›„ ์ถœ๋ ฅ: "+Arrays.toString(arr));
    		
    		System.out.println("์ „์ฒด ์‚ญ์ œ ์‹คํ–‰");
    		list.clear();
    		System.out.println("toString() ์ „์ฒด์ถœ๋ ฅ:"+list);
    	}
    	
    }

    ArrayList ํด๋ž˜์Šค์˜ ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ์ŠคํŠธ๋ง ํƒ€์ž…๋งŒ ๋ฐ›๋Š” ์ œ๋„ค๋ฆญ์„ ์ง€์ •ํ–ˆ๋‹ค. ๋‹คํ˜•์„ฑ์„ ์ ์šฉํ•ด์„œ ์ƒ์œ„ ์ธํ„ฐํŽ˜์ด์Šค์ธ Listํƒ€์ž…์œผ๋กœ ์ƒ์„ฑํ–ˆ๋‹ค. ์…‹๊ณผ ๋‹ฌ๋ฆฌ ๋ฆฌ์ŠคํŠธ์—” ์ค‘๋ณต๋œ ๊ฐ’๋“ค์ด ์ €์žฅ๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ํ™๊ธธ๋™์ด ์—ฌ๋Ÿฌ ๋ฒˆ ์ €์žฅ๋˜์—ˆ๋‹ค. ๋ฆฌ์ŠคํŠธ๋Š” ๋ฐฐ์—ด์˜ index์ฒ˜๋Ÿผ ์ˆœ์„œ๊ฐ€ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ์œ„์น˜๊ฐ’์ธ index์™€ get()๋ฉ”์†Œ๋“œ๋ฅผ ํ†ตํ•ด ์›ํ•˜๋Š” ๊ฐ’์„ ์–ป์–ด์˜ฌ ์ˆ˜ ์žˆ๋‹ค.

    toArray() ๋ฉ”์†Œ๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๋ฉด ๋ฆฌ์ŠคํŠธ๋ฅผ ๋ฐฐ์—ด๋กœ ๋ณ€ํ™˜ ํ›„ ์ถœ๋ ฅํ•  ์ˆ˜ ์žˆ๋‹ค.

     

     

    ArrayList ํด๋ž˜์Šค๋กœ ๋ฐ์ดํ„ฐ ์‚ฝ์ž…, ์ถ”๊ฐ€, ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๊ธฐ

    import java.util.ArrayList;
    import java.util.List;
    
    public class Ex10_8 {
    	public static void main(String[] args) {
    		List<String> list = new ArrayList<String>();
    		list.add("ํ™๊ธธ๋™");
    		list.add("์ด์ˆœ์‹ ");
    		list.add("๊ฐ•๊ฐ์ฐฌ");
    		list.add("์œ ๊ด€์ˆœ");	
    		System.out.println("์ˆ˜์ •ํ•˜๊ธฐ ์ „ ์ „์ฒด ์ถœ๋ ฅ: "+list);
            
    		//๋ฐ์ดํ„ฐ ์‚ฝ์ž…
    		list.add(1, "์ •๋„์ „");
    		
    		//๋ฐ์ดํ„ฐ ์ˆ˜์ •
    		list.set(0,  "์ž„๊บฝ์ •");
    		
    		//์ธ๋ฑ์Šค๋ฅผ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    		list.remove(3);
    		
    		//๊ฐ’์„ ์ด์šฉํ•œ ๋ฐ์ดํ„ฐ ์‚ญ์ œ
    		list.remove("์ด์ˆœ์‹ ");
    		System.out.println("์ˆ˜์ •ํ•˜๊ธฐ ํ›„ ์ „์ฒด ์ถœ๋ ฅ"+list);
    	}	
    }

    List๋Š” ์ธ๋ฑ์Šค๋ฅผ ๊ฐ–๊ธฐ ๋•Œ๋ฌธ์— ๋ฐ์ดํ„ฐ๋ฅผ ๊ฒ€์ƒ‰, ์‚ฝ์ž…, ์‚ญ์ œ, ์ˆ˜์ •ํ•˜๋Š” ์ž‘์—…์„ ํ•  ์ˆ˜ ์žˆ๋‹ค. ์ธ๋ฑ์Šค 1์— ์ •๋„์ „ ์ด๋ฆ„์„ ์‚ฝ์ž…ํ•˜๊ณ , ์ธ๋ฑ์Šค 0์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์ž„๊บฝ์ •์œผ๋กœ ์ˆ˜์ •ํ•˜๊ณ , ์ธ๋ฑ์Šค3์˜ ๋ฐ์ดํ„ฐ๋ฅผ ์‚ญ์ œํ•œ๋‹ค.

     

     

    Comparator์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด์„œ ArrayList ์ •๋ ฌํ•˜๊ธฐ

    import java.util.ArrayList;
    import java.util.Collections;
    import java.util.Comparator;
    import java.util.List;
    
    class Person{
    	String name;
    	int age;
    	public Person(String name, int age) {
    		this.name = name;
    		this.age = age;
    	}
    	@Override
    	public String toString() {
    		return super.toString();
    	}
    }//end Person
    
    class PersonComp implements Comparator<Person>{
    	@Override
    	public int compare(Person o1, Person o2) {
    		int result = 1;
    		if(o1.age >= o2.age) result = -1;  //๋‚ด๋ฆผ์ฐจ์ˆœ
    		return result;
    		
    	/*	int result = -1;
    		if(o1.age >= o2.age) result = 1;  //์˜ค๋ฆ„์ฐจ์ˆœ
    		return result;  */
    	}
    }
    
    public class Ex10_9 {
    	public static void main(String[] args) {
    		List<Person> list = new ArrayList<Person>();
    		list.add(new Person("ํ™๊ธธ๋™", 20));
    		list.add(new Person("์ด์ˆœ์‹ ", 44));
    		list.add(new Person("์œ ๊ด€์ˆœ", 18));
    		list.add(new Person("๊ฐ•๊ฐ์ฐฌ", 66));
    		
    		//age๋ฅผ ์ •๋ ฌ
    		Collections.sort(list, new PersonComp());
    		for (Person person : list) {
    			System.out.println(person);
    		}
    	}
    }

     

    ์ง€๋‚œ๋ฒˆ์— Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์‚ฌ์šฉํ•ด ๋ฐฐ์—ด์„ ์ •๋ ฌํ•ด๋ณด์•˜๋‹ค. ๊ฐ™์€ ๋ฐฉ๋ฒ•์œผ๋กœ ArrayList๋ฅผ ํŠน์ •๊ฐ’์„ ๊ธฐ์ค€์œผ๋กœ ์ •๋ ฌํ•  ์ˆ˜ ์žˆ๋‹ค. Comparator ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” PersonComp ์ผ๋ฐ˜ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ œ๋„ค๋ฆญ์€ <Person>ํด๋ž˜์Šค ํƒ€์ž…์ด๋‹ค. Comparator ์ธํ„ฐํŽ˜์ด์Šค์˜ ๋ฉ”์†Œ๋“œ compare() ๋ฉ”์†Œ๋“œ๋ฅผ ์˜ค๋ฒ„๋ผ์ด๋”ฉํ•ด์„œ ํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ๋ฐ›์€ ๋‘ ๊ฐ’์„ ๋น„๊ตํ•˜์—ฌ ๋ฆฌํ„ด๊ฐ’์ด ์Œ์ˆ˜๋ฉด ๋‚ด๋ฆผ์ฐจ์ˆœํ•˜๊ณ  ์–‘์ˆ˜ ๋˜๋Š” 0์ด๋ฉด ์˜ค๋ฆ„์ฐจ์ˆœ์œผ๋กœ ๋ฆฌํ„ดํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

    mainํ•จ์ˆ˜ ์•ˆ์— ArrayList ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•œ๋‹ค. ์ปฌ๋ ‰์…˜์„ ์ •๋ ฌํ•ด์„œ ๋ฐ˜ํ™˜ํ•˜๋Š” Collections.sort() ๋ฉ”์†Œ๋“œ์— ์ธ์ž๋กœ ๋ฆฌ์ŠคํŠธ์™€ ์ •๋ ฌ๊ธฐ์ค€์„ ๊ตฌํ˜„ํ•œ PersonComp ๊ฐ์ฒด๋ฅผ ๋„ฃ๊ณ  ํ˜ธ์ถœํ•œ ๋’ค forEach ๋ฐ˜๋ณต๋ฌธ์„ ๋Œ๋ ค ๋ฆฌ์ŠคํŠธ์˜ ๋ชจ๋“  ์ •๋ณด๋ฅผ ๋‚˜์ด์ˆœ์œผ๋กœ ๋‚ด๋ฆผ์ฐจ์ˆœํ•œ ๊ฒฐ๊ณผ๋ฅผ ํ”„๋ฆฐํŠธํ•œ๋‹ค.

     

     

    ArrayList ์—ฐ์Šตํ•˜๊ธฐ

    ์ถ”์ƒํด๋ž˜์Šค Ship์„ ๊ตฌํ˜„ํ•˜๋Š” ๋‘ ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ ๋‹ค. ์ผ์ •๊ฑฐ๋ฆฌ ์šดํ•ญ ์‹œ ๋ณ€ํ™”๋œ ์—ฐ๋ฃŒ๋Ÿ‰์„ ์ถœ๋ ฅํ•œ๋‹ค.

    public abstract class Ship {
    	String shipName;
    	int fuelTank;
    	public Ship() {}
    	public Ship(String shipName, int fuelTank) {
    		super();
    		this.shipName = shipName;
    		this.fuelTank = fuelTank;
    	}
    	public abstract void sail(int dist);
    	public abstract void refuel(int fuel);
    	public String getShipName() {
    		return shipName;
    	}
    	public void setShipName(String shipName) {
    		this.shipName = shipName;
    	}
    	public int getFuelTank() {
    		return fuelTank;
    	}
    	public void setFuelTank(int fuelTank) {
    		this.fuelTank = fuelTank;
    	}
    }

    ์ถ”์ƒํด๋ž˜์Šค Ship์€  sail๊ณผ refuel ๋ผ๋Š” ์ถ”์ƒ๋ฉ”์†Œ๋“œ๋ฅผ ๊ฐ–๊ณ ์žˆ๋‹ค.

    public class Boat extends Ship {
    	public Boat() {}
    	public Boat(String shipName, int fuelTank) {
    		super(shipName, fuelTank);
    	}
    	@Override
    	public void sail(int dist) {
    		setFuelTank(getFuelTank() - (dist *10));
    	}
    	@Override
    	public void refuel(int fuel) {
    		setFuelTank(getFuelTank() + (fuel *10));		
    	}		
    }
    public class Cruise extends Ship {
    	public Cruise() {}
    	public Cruise(String shipName, int fuelTank) {
    		super(shipName, fuelTank);
    	}
    	@Override
    	public void sail(int dist) {
    		setFuelTank(getFuelTank() - (dist *13));
    	}
    	@Override
    	public void refuel(int fuel) {
    		setFuelTank(getFuelTank() + (fuel * 8));
    	}
    }

    Boat์™€ Cruise ํด๋ž˜์Šค๋Š” ์ถ”์ƒํด๋ž˜์Šค Ship์„ ๊ตฌํ˜„ํ•œ๋‹ค. Boat๋Š” ํ•œ ๋ฒˆ ์šดํ–‰ํ•˜๋ฉด ์—ฐ๋ฃŒ๊ฐ€ 10๋งŒํผ ๊ฐ์†Œํ•˜๊ณ  Cruise๋Š” 10๋งŒํผ ์ฆ๊ฐ€ํ•œ๋‹ค. ํ•œ ๋ฒˆ์˜ ์ฃผ์œ  ์‹œ Boat๋Š” ์—ฐ๋ฃŒ๊ฐ€ 10๋งŒํผ ์ฆ๊ฐ€ํ•˜๊ณ  Cruise๋Š” ์—ฐ๋ฃŒ๊ฐ€ 8๋งŒํผ ์ฆ๊ฐ€ํ•˜๋„๋ก ๊ตฌํ˜„ํ•œ๋‹ค.

    import java.util.ArrayList;
    
    public class ShipTest {
    	public static void main(String[] args) {
    		Boat boat = new Boat("Boat", 500);
    		Cruise cruise = new Cruise("Cruise", 1000);
    		//ArrayList์— ๋‘ ์„ ๋ฐ• add
    		ArrayList<Ship> list = new ArrayList<Ship>();
    		list.add(boat);
    		list.add(cruise);
    		
    		//๋‘ ์„ ๋ฐ•์˜ ์ด๋ฆ„๊ณผ ํ˜„์žฌ ์—ฐ๋ฃŒ๋Ÿ‰ ์ถœ๋ ฅ
    		System.out.println(boat.getShipName()+" "+boat.getFuelTank());
    		System.out.println(cruise.getShipName()+" "+cruise.getFuelTank());
    		//๋‘ ์„ ๋ฐ•์˜  sailํ•จ์ˆ˜ ํ˜ธ์ถœ .sail(10)
    		boat.sail(10);
    		cruise.sail(15);
    		
    		//๋‘ ์„ ๋ฐ•์˜ ์ด๋ฆ„๊ณผ ํ˜„์žฌ ์—ฐ๋ฃŒ๋Ÿ‰ ์ถœ๋ ฅํ•˜์—ฌ ์„œ๋กœ ์—ฐ๋ฃŒ๋Ÿ‰์ด ๋‹ฌ๋ผ์กŒ๋Š”์ง€ ํ™•์ธ
    		System.out.println(boat.getShipName()+" "+boat.getFuelTank());
    		System.out.println(cruise.getShipName()+" "+cruise.getFuelTank());
    		
    		//for์ด์šฉ ๋‘ ์„ ๋ฐ•์„ ๊ฒ€์‚ฌํ•˜์—ฌ boat๋ฉด .refuel(20), cruise๋ฉด refuel(30)์„ค์ •
    		for(Ship x : list) {
    			if(x.getShipName()=="Boat") {
    				boat.refuel(20);
    			}else if(x.getShipName()=="Cruise") {
    				boat.refuel(30);
    			}
    		}
    		System.out.println(boat.getShipName()+" "+boat.getFuelTank());
    		System.out.println(cruise.getShipName()+" "+cruise.getFuelTank());
    	}
    }

    Boat์™€ Cruise ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๋ฉด์„œ ์ดˆ๊ธฐ๊ฐ’์„ ๋„ฃ์–ด์ค€๋‹ค. ArrayList ๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋‘ ํด๋ž˜์Šค ๊ฐ์ฒด๋ฅผ ์ €์žฅํ•œ๋‹ค. ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•ด ์šดํ–‰ ๊ฑฐ๋ฆฌ์™€ ์ฃผ์œ ๋Ÿ‰์„ ์ธ์ž๋กœ ๋ณด๋‚ด์„œ ๋‘ ์„ ๋ฐ•์˜ ์—ฐ๋ฃŒ๋Ÿ‰์„ ํ™•์ธํ•œ๋‹ค.

     

     

     

    ๐Ÿ˜œ NEXT :  Map๊ณ„์—ด HashMap ๊ณต๋ถ€ํ•˜๊ธฐ

    ๋ฐ˜์‘ํ˜•

    ๋Œ“๊ธ€

๊ฐœ๋ฐœ๊ณต๋ถ€