java集合学习整理

本文整理了关于Java ArrayList集合的学习笔记,涵盖了集合与数组的区别、ArrayList常用操作(增删改查)、ArrayList与List接口的关系、泛型使用以及多种遍历ArrayList的方法。详细解释了ArrayList的特性和使用技巧。

java集合(ArrayList)学习整理

整理一下在How2J学习网站学习java集合(ArrayList)的笔记,笔记整理如下:

一、集合与数组的区别

1. 使用数组的局限性

 如果要存放多个对象,可以使用数组,但是数组有局限性
 比如 声明长度是10的数组
 不用的数组就浪费了
 超过10的个数,又放不下

2. ArrayList存放对象

 为了解决数组的局限性,引入容器类的概念。 最常见的容器类就是 ArrayList 
 容器的容量会随着对象的增加,自动增长 
 只需要不断往容器里增加数据即可,不用担心会出现数组的边界问题

二、ArrayList常用方法

1. 增加

add 有两种用法

第一种是直接add对象,把对象加在最后面

例如:

ArrayList<Employee> arr=new ArrayList<Employee>();
  // 把5个对象加入到ArrayList中
        for (int i = 0; i < 5; i++) {
            arr.add(new Employee("employee" + i));
        }

第二种是在指定位置加对象

例如:

   Employee specialEmployee = new Employee("special employee");
   heros.add(3, specialEmployee );

2. 判断是否存在

通过方法contains 判断一个对象是否在容器中

判断标准: 是否是同一个对象,而不是name是否相同

 //虽然一个新的对象名字也叫 employee 1,但是contains的返回是false
        System.out.println(arr.contains(new Employee("employee 1")));
 //而对specialEmployee 的判断,contains的返回是true
        System.out.println(arr.contains(specialEmployee ));

3. 删除

remove用于把对象从ArrayList中删除

remove可以根据下标删除ArrayList的元素

例如:

arr.remove(2);

也可以根据对象删除

arr.remove(specialEmployee );

4. 获取指定位置的对象

通过get获取指定位置的对象,如果输入的下标越界,

会报IndexOutOfBoundsException异常

arr.get(5);

5. 获取对象所处的位置

indexOf用于判断一个对象在ArrayList中所处的位置

与contains一样,判断标准是对象是否相同,而非对象的name值

//新的英雄,但是名字是emloyee 1:arr.indexOf(new Employee("emloyee 1"))输出为-1

arr.indexOf(specialEmployee);

6. 替换

set用于替换指定位置的元素

 arr.set(5, new Employee("emloyee 5"));

7. 获取大小

size 用于获取ArrayList的大小

arr.size();

8. 转换为数组

toArray可以把一个ArrayList对象转换为数组。

需要注意的是,如果要转换为一个Employee数组,那么需要传递一

个Employee数组类型的对象给toArray(),这样toArray方法才知道你

希望转换为哪种类型的数组,否则只能转换为Object数组

        Employee ep[] = (Employee [])arr.toArray(new Employee []{});

9. 把另一个容器所有对象都加进来

addAll 把另一个容器所有对象都加进来

  	    ArrayList another= new ArrayList();
        another.add(new Employee("employee a"));
        another.add(new Employee("employee b"));
        another.add(new Employee("employee c"));
        arr.addAll(another);

10. 清空

clear 清空一个ArrayList

        arr.clear();

三、ArrayList和List

ArrayList实现了接口List
常见的写法会把引用声明为接口List类型
注意:是java.util.List,而不是java.awt.List

implements List<E>

四、泛型Generic

不指定泛型的容器,可以存放任何类型的元素
指定了泛型的容器,只能存放指定类型的元素以及其子类

1. 泛型的简写

为了不使编译器出现警告,需要前后都使用泛型,像这样:

List<Employee> genericheros = new ArrayList<Employee>();

不过JDK7提供了一个可以略微减少代码量的泛型简写方式

List<Employee> genericheros2 = new ArrayList<>();

后面的泛型可以用<>来代替

五、遍历

1. 用for循环遍历

用size()和get()分别得到大小,和获取指定位置的元素,结合for循环

就可以遍历出ArrayList的内容

		 List<Employee> arr= new ArrayList<Employee>();
 
         for (int i = 0; i < 5; i++) {
            arr.add(new Employee("employee name " + i));
        }
 
        // 第一种遍历 for循环
        System.out.println("--------for 循环-------");
        for (int i = 0; i < arr.size(); i++) {
            Employee e= arr.get(i);
            System.out.println(e);```

2. 迭代器遍历

在这里插入图片描述

 //第二种遍历,使用迭代器
        Iterator<Employee> it= arr.iterator();
        //从最开始的位置判断"下一个"位置是否有数据
        //如果有就通过next取出来,并且把指针向下移动
        //直到"下一个"位置没有数据
        while(it.hasNext()){
            Employee e = it.next();
            System.out.println(e);
        }
        //迭代器的for写法
        System.out.println("--------使用for的iterator-------");
        for (Iterator<Employee > iterator = arr.iterator(); iterator.hasNext();) {
            Employee employee= (Employee ) iterator.next();
            System.out.println(employee);
        }

3.用增强型for循环

使用增强型for循环可以非常方便的遍历ArrayList中的元素,这是很多

开发人员的首选。

不过增强型for循环也有不足:

无法用来进行ArrayList的初始化

无法得知当前是第几个元素了,

当需要只打印单数元素的时候,就做不到了,必须再自定下标变量。

 List<Employee > arr= new ArrayList<Employee >();
 
        for (int i = 0; i < 5; i++) {
            arr.add(new Employee ("employee name " + i));
        }
 
        // 第三种,增强型for循环
        System.out.println("--------增强型for循环-------");
        for (Employee e : arr) {
            System.out.println(e);
        }
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值