반응형
오브젝트의 사이즈 불러오기
package list.arraylist.implementation;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
arraylist numbers = new arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
//중간에 집어넣기
numbers.addMid(1, 15);
;
System.out.println(numbers.size());
}
}
package list.arraylist.implementation;
public class arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean addMid(int index, Object element){
//elementData[size] = elementData[size-1]
for(int i=size-1; i>=index; i--){
elementData[i+1] = elementData[i];
}
elementData[index] = element;
size++;
return true;
}
public boolean addFirst(int index, Object element){
return addMid(0, element);
}
//삭제하면서 리턴 값으로 삭제된 element를 출력할거임
public Object remove(int index){
Object removed = elementData[index];
//elementData[1] = elementData[2];
for(int i=index+1; i<=size-1; i++){
elementData[i-1] = elementData[i];
}
size--;
//맨 마지막꺼 삭제해주기 위해
elementData[size] = null;
return removed;
}
public String toString(){
String str = "[";
for (int i=0; i<size; i++){
str += elementData[i];
if(i < size-1){
str +=",";
}
}
return str + "]";
}
public Object removeFirst(){
return remove(0);
}
public Object removeLast(){
return remove(size-1);
}
public Object get(int index){
return elementData[index];
}
//사이즈 보내주는 메소드
public int size(){
return size;
}
}
객체를 받아서 인덱스번호 찾기
package list.arraylist.implementation;
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
arraylist numbers = new arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
//중간에 집어넣기
numbers.addMid(1, 15);
;
System.out.println(numbers.indexOf(10));
}
}
출력 0
//인덱스 찾기
public int indexOf(Object o){
for (int i=0; i < size; i++){
if(o.equals(elementData[i])) {
return i;
}
}
return -1;
}
Iterator
이터레이터(반복문) 메소드 만들기
next
hasNext
package list.arraylist.implementation;
public class Main {
public static void main(String[] args) {
arraylist numbers = new arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
//중간에 집어넣기
numbers.addMid(1, 15);
;
arraylist.ListIterator li = numbers.listIterator();
while(li.hasNext()){
System.out.println(li.next());
}
}
}
arraylist클래스 안에 ListIterator이라는 클래스를 하나 만들어 줄것이고,
li는 numbers.listiterator();이라는 메소드는 ListIterator이라는 새로운 데이터 타입을 반환해준다.
public ListIterator listIterator(){
return new ListIterator();
}
class ListIterator{
private int nextIndex = 0;
public Object next(){
// Object returnData = elementData[nextIndex];
// nextIndex++;
// return returnData;
return elementData[nextIndex++];
}
public boolean hasNext(){
return nextIndex < size();
}
}
주석처리된 3줄은 elementData[nextIndex++]를 풀어놓은 것이다.
결과는 for문으로 만들었을 때와 같이 10 15 20 30이 나온다.
previous
hasPrevious
arraylist.ListIterator li = numbers.listIterator();
while (li.hasNext()){
System.out.println(li.next());
}
while (li.hasPrevious()) {
System.out.println(li.previous());
}
출력
10
15
20
30
30
20
15
10
class ListIterator{
private int nextIndex = 0;
public Object next(){
// Object returnData = elementData[nextIndex];
// nextIndex++;
// return returnData;
return elementData[nextIndex++];
}
public boolean hasNext(){
return nextIndex < size();
}
public Object previous(){
return elementData[--nextIndex];
}
public boolean hasPrevious(){
return nextIndex > 0;
}
}
add
arraylist.ListIterator li = numbers.listIterator();
while (li.hasNext()){
int number = (int) li.next();
if(number == 20){
li.add(25);
}
}
=================================
public void add(Object element){
arraylist.this.add(nextIndex++, element);
}
remove
arraylist.ListIterator li = numbers.listIterator();
while (li.hasNext()){
int number = (int) li.next();
if(number == 20){
li.remove();
}
}
System.out.println(numbers);
=========================================
public void remove(){
arraylist.this.remove(nextIndex-1);
--nextIndex;
}
ARRAY LIST 마무리
package list.arraylist.implementation;
public class Main {
public static void main(String[] args) {
arraylist numbers = new arraylist();
numbers.addLast(10);
numbers.addLast(20);
numbers.addLast(30);
//중간에 집어넣기
numbers.add(1, 15);
;
arraylist.ListIterator li = numbers.listIterator();
while (li.hasNext()){
int number = (int) li.next();
if(number == 20){
li.remove();
}
}
System.out.println(numbers);
}
}
package list.arraylist.implementation;
import java.util.ArrayList;
public class arraylist {
private int size = 0;
private Object[] elementData = new Object[100];
public boolean addLast(Object element){
elementData[size] = element;
size++;
return true;
}
public boolean add(int index, Object element){
//elementData[size] = elementData[size-1]
for(int i=size-1; i>=index; i--){
elementData[i+1] = elementData[i];
}
elementData[index] = element;
size++;
return true;
}
public boolean addFirst(int index, Object element){
return add(0, element);
}
//삭제하면서 리턴 값으로 삭제된 element를 출력할거임
public Object remove(int index){
Object removed = elementData[index];
//elementData[1] = elementData[2];
for(int i=index+1; i<=size-1; i++){
elementData[i-1] = elementData[i];
}
size--;
//맨 마지막꺼 삭제해주기 위해
elementData[size] = null;
return removed;
}
public String toString(){
String str = "[";
for (int i=0; i<size; i++){
str += elementData[i];
if(i < size-1){
str +=",";
}
}
return str + "]";
}
public Object removeFirst(){
return remove(0);
}
public Object removeLast(){
return remove(size-1);
}
public Object get(int index){
return elementData[index];
}
//사이즈 보내주는 메소드
public int size(){
return size;
}
//인덱스 찾기
public int indexOf(Object o){
for (int i=0; i < size; i++){
if(o.equals(elementData[i])) {
return i;
}
}
return -1;
}
public ListIterator listIterator(){
return new ListIterator();
}
class ListIterator{
private int nextIndex = 0;
public Object next(){
// Object returnData = elementData[nextIndex];
// nextIndex++;
// return returnData;
return elementData[nextIndex++];
}
public boolean hasNext(){
return nextIndex < size();
}
public Object previous(){
return elementData[--nextIndex];
}
public boolean hasPrevious(){
return nextIndex > 0;
}
public void add(Object element){
arraylist.this.add(nextIndex++, element);
}
public void remove(){
arraylist.this.remove(nextIndex-1);
--nextIndex;
}
}
}
반응형
'개발공부 > 자료구조' 카테고리의 다른 글
Doubly linked list(양방향 연결 리스트) (0) | 2020.12.09 |
---|---|
자료구조(Linked list) 구현 (0) | 2020.12.04 |
자료구조(클래스의 인스턴스화, Arraylist 만들어보기) (0) | 2020.11.26 |
자료구조(ArrayList) (0) | 2020.11.25 |
자료구조(배열과 리스트) (0) | 2020.11.25 |