Java初学之ArrayList常用方法集合

集合

集合又称为容器,用于存储提取删除数据。JDK提供的集合API都包含在 java.util 包内,通过容器我们可以实现对于数据的增删查。

集合框架大分支:Collection接口Map接口

其中Collection接口之中有两个重要接口——list接口和set接口。

对于set接口:会有一个抽象的实现类是AbstractSet类,而AbstractSet类中有TreeSet和HashSet类,其中HashSet类和其子类LinkHashSet类完全实现了Set接口。

对于List接口:会有一个抽象的实现类是AbstractList类,而AbstractList类中有ArrayList和Vector类,这两个子类都完全实现了List接口。

现在我们总结ArrayList常用方法集合

1、add方法,用于向list集合容器之中添加元素。

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList list=new ArrayList<>();//创建一个列表
		list.add("tom");//用于向List集合容器中添加元素
    }
}

ArrayList list=new ArrayList<>();创建一个列表

2、size方法,用于获取集合中有多少个元素

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		    ArrayList list=new ArrayList<>();//创建一个列表
		    list.add("tom");//用于向List集合容器中添加元素
                    int length=list.size();
                    System.out.println(length);
    }
}

最后输出结果是1.

3、get方法,获取指定索引(从0开始)位置的元素

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		    ArrayList list=new ArrayList<>();//创建一个列表
		    list.add("tom");//用于向List集合容器中添加元素
                    int length=list.size();
                    System.out.println(length);
                    System.out.println(list.get(0));        
    }
}

输出结果

1

tom

4、clear方法,清空List集合中的所有元素

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		    ArrayList list=new ArrayList<>();//创建一个列表
		    list.add("tom");//用于向List集合容器中添加元素
                    int length=list.size();
                    System.out.println(length);
                    System.out.println(list.get(0));
                    list.clear();//清空List集合中的所有元素
		    length=list.size();
		    System.out.println(length);//输出0,进而说明clear用于清空集合元素        
    }
}

5、isEmpty方法,判断集合容器有没有元素。

 

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
		boolean flag = list.isEmpty();//集合容器没有元素,则true
		System.out.println(flag);   
    }
}

<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object 

 

6、contain方法,用来判断集合容器中是否含所有参数元素。

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
		boolean flag = list.isEmpty();//集合容器没有元素,则true
		System.out.println(flag);  
                list.add("Tom");
		list.add("Jim");
		
		String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
		System.out.println(list.get(0));
                flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素   
    }
}

思考

判断过程是什么?真正执行的ArrayListcontains方法,该方法源码如下:

 public boolean contains(Object o) {
        return indexOf(o) >= 0;
    }

    public int indexOf(Object o) {
        if (o == null) {
            for (int i = 0; i < size; i++)
                if (elementData[i]==null)
                    return i;
        } else {
            for (int i = 0; i < size; i++)
                if (o.equals(elementData[i]))
                    return i;
        }
        return -1;
    }

首先,传入方法的是一个Object类,但是,显然我们在创建list列表的时候就把其类型规定了

ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object

 

我们用泛型规定了list 的类型为String,因此这其实是一个隐藏的多态!

父类Object声明的对象指向了子类类型的变量。

因为list里面显然有数据,不等于null,因此进入else代码块,因此这里o.equal方法指向的是父类Object里面的equal方法,实际上运行的却是String类里面重写的equal方法。

7、remove方法,删除List集合元素,返回boolean,并让后面元素前移

remove(Object o) List集合中移除第一次出现的指定元素,移除成功返回true,否则返回false。当且仅当List集合中含有满足(o==null ? get(i)==null : o.equals(get(i)))条件的最低索引i的元素时才会返回true

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
		boolean flag = list.isEmpty();//集合容器没有元素,则true
		System.out.println(flag);  
                list.add("Tom");
		list.add("Jim");
		
		String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
		System.out.println(list.get(0));
                flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素

		list.remove("Tom");//删除List集合元素,返回boolean,并后面元素前移
		System.out.println(list.get(0));   
    }
}

最后一行代码的输出结果是Jim

8、add(,)方法,在指定位置添加元素,原来位置的元素后置。

      set(,)方法,替换指定位置的元素。

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();//<String>泛型;用于约束集合容器中元素的数据类型,如果省略,则默认为Object
		boolean flag = list.isEmpty();//集合容器没有元素,则true
		System.out.println(flag);  
                list.add("Tom");
		list.add("Jim");
		
		String str = list.remove(0);//删除指定索引(从0开始)位置的元素,并将元素返回,并后面元素前移
		System.out.println(list.get(0));
                flag = list.contains("Jim");//用来判断集合容器中是否含所有参数元素

		list.remove("Tom");//删除List集合元素,返回boolean,并后面元素前移
		System.out.println(list.get(0)); 
		list.add(0, "Kate");//在指定位置添加元素,原来位置的元素后置
		System.out.println(list.get(1));
		list.set(1, "Lucy");//替换指定位置的元素
		System.out.println(list.get(1));  
    }
}

 最后四行代码输出结果是

Jim

Lucy

集合遍历

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("Tom");
		list.add("Jim");
		list.get(0);
		list.get(1);
		
		//在数组中按照存入数据的先后顺序存储
		int [] scores = new int[3];
		scores[0] = 100;
		scores[1] = 0;
		
		for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		
		for(String name:list) {
			System.out.println(name);
		}
    }
}

简单的就是这两种,for循环和foreach。

 用构造器iterator实现列表遍历

import java.util.ArrayList;
public class Test {
	public static void main(String[] args) {
		ArrayList<String> list = new ArrayList<String>();
		list.add("Tom");
		list.add("Jim");
		list.get(0);
		list.get(1);
		
		//在数组中按照存入数据的先后顺序存储
		int [] scores = new int[3];
		scores[0] = 100;
		scores[1] = 0;
		
		for(int i=0;i<list.size();i++) {
			System.out.println(list.get(i));
		}
		
		System.out.println("~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
		
		for(String name:list) {
			System.out.println(name);
		}
		Iterator<String> iterator = list.iterator();
		while (iterator.hasNext()) {
			System.out.println(iterator.next());
		}
    }
}

Iterator<String> iterator = list.iterator();——→将List集合中元素转到iterator变量中

iterator.hasNext()——→判断当前“指针”下面是否还有元素

System.out.println(iterator.next())——→如果指针下面有元素,则移动指针并获取相应位置的元素

如下图,本来hasNext方法中指针指向空位置,判断是下面否有数据,如果有返回ture,我们设定的对象之中显然是有的,因此执行while方法块里面的语句,即System.out.println(iterator.next()),iterator.next()的作用是输出下一个数据的值,然后指针往下移动一位,这是就形成循环,hasNxet又探测到下面有数据,方法再次执行,直到没有数据。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值