JAVA集合专题2 —— List专题

课前小练习

创建3个Dog {name,age} 对象,放入到ArrayList中,赋给List引用
用送代器和增强for循环两种方式来遍历
重写Dog的toString方法, 输出name和age

code
package cs.kaoyan.javase.com.list4;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 创建3个Dog {name,age} 对象,放入到ArrayList中,赋给List引用
 * 用送代器和增强for循环两种方式来遍历
 * 重写Dog的toString方法, 输出name和age
 */
public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Dog("小狐狸",8));
        list.add(new Dog("花花",3));
        list.add(new Dog("小黑",7));

        //遍历方式1:增强for循环
        for (Object dog : list) {
            System.out.println(dog);
        }

        System.out.println("------------------");

        //遍历方式2:迭代器
        Iterator iterator = list.iterator();
        //有下一个元素,才可以输出
        while (iterator.hasNext()) {
            Object dog = iterator.next();
            System.out.println(dog);
        }

        /*
        Dog{name='小狐狸', age=8}
        Dog{name='花花', age=3}
        Dog{name='小黑', age=7}
        ------------------
        Dog{name='小狐狸', age=8}
        Dog{name='花花', age=3}
        Dog{name='小黑', age=7}*/
    }
}

class Dog{
    private String name;
    private int age;

    //构造器
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

List接口基本介绍

  • List接口是Collection接口的子接口
  • List集合类中元素有序(即添加顺序和取出顺序一致)、且可重复
[java,tom,jack,java,mary,tom,zxy]//不报错
  • List集合中的每个元素都有其对应的顺序索引,即支持索引
list.get(i);

List的3中遍历方法

package cs.kaoyan.javase.com.list4;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 创建3个Dog {name,age} 对象,放入到ArrayList中,赋给List引用
 * 用送代器和增强for循环两种方式来遍历
 * 重写Dog的toString方法, 输出name和age
 */
public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Dog("小狐狸",8));
        list.add(new Dog("花花",3));
        list.add(new Dog("小黑",7));

        //遍历方式1:增强for循环
        for (Object dog : list) {
            System.out.println(dog);
        }

        System.out.println("------------------");

        //遍历方式2:迭代器
        Iterator iterator = list.iterator();
        //有下一个元素,才可以输出
        while (iterator.hasNext()) {
            Object dog = iterator.next();
            System.out.println(dog);
        }

        System.out.println("------------------");

        //遍历方式3:
        for (int i = 0; i < list.size(); i++) {
            Object dog = list.get(i);
            System.out.println(dog);
        }

        /*
        Dog{name='小狐狸', age=8}
        Dog{name='花花', age=3}
        Dog{name='小黑', age=7}
        ------------------
        Dog{name='小狐狸', age=8}
        Dog{name='花花', age=3}
        Dog{name='小黑', age=7}
        ------------------
        Dog{name='小狐狸', age=8}
        Dog{name='花花', age=3}
        Dog{name='小黑', age=7}*/
    }
}

class Dog{
    private String name;
    private int age;

    //构造器
    public Dog(String name, int age) {
        this.name = name;
        this.age = age;
    }

    @Override
    public String toString() {
        return "Dog{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

课堂小练习

使用List的实现类(ArrayList、LinkedList和Vector)添加三本图书,并遍历,打印如下效果
名称:XX
价格:xx
作者:xx
(要求按价格排序,从低到高)

code
package cs.kaoyan.javase.com.list5;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

/**
 * 使用List的实现类(ArrayList、LinkedList和Vector)添加三本图书,并遍历,打印如下效果
 * 名称:XX
 * 价格:xx
 * 作者:xx
 * (要求按价格排序,从低到高)
 */
public class Test {
    public static void main(String[] args) {
        List list = new ArrayList();
        list.add(new Book("三国演义","作者1",80));
        list.add(new Book("红楼一梦","作者1",76));
        list.add(new Book("西天取经","作者1",29));

        //冒泡排序
        bubbleSort(list);

        //使用迭代器遍历集合并输出
        //快捷键 : itit
        Iterator iterator = list.iterator();
        while (iterator.hasNext()){
            Object next = iterator.next();
            System.out.println(next);
        }
    }

    public static void bubbleSort(List list){
        int listSize = list.size();
        for (int i = 0; i < listSize - 1; i++) {
            for (int j = 0; j < listSize - 1 - i; j++) {
                //取出Book对象
                Book book1 = (Book)list.get(j);
                Book book2 = (Book)list.get(j + 1);
                if (book1.getPrice() > book2.getPrice()){
                    //按照价格从小到大排序
                    //若前一本书的价格大于后一本书的价格,那么交换位置
                    list.set(j,book2);
                    list.set(j + 1,book1);
                }
            }
        }
    }
}

class Book{
    private String name;//书名
    private String author;//作者
    private int price;//价格

    //构造器
    public Book(String name, String author, int price) {
        this.name = name;
        this.author = author;
        this.price = price;
    }

    //getter(以便获取图书的价格)
    public int getPrice() {
        return price;
    }

    //重写toString方法
    @Override
    public String toString() {
        //按照指定格式输出
        return "书名:" + name + "\t\t作者" + author + "\t\t价格" + price;
    }
}

ArrayList’s Detail

  • ArrayList可以加入(一个或者多个)null
  • ArrayList是由数组来实现数据存储的
  • ArrayList基本等同于Vector,执行效率更高,但是ArrayList是线程不安全的
  • 多线程情况下,不建议使用ArrayList

ArrayList扩容机制(面试重点)

  • 通过源码发现,ArrayList中维护了一个Object类型的数组elementData
  • 当创建ArrayList对象时,如果使用的是无参构造器ArrayList(),则初始elementData数组的容量为0,第1次添加,则扩容elementData为10,如需要再次扩容,则扩容elementData为1.5倍(15),如还需要扩容,则扩容elementData为15的1.5倍(33)
  • 如果使用的是指定大小的构造器ArrayList(int),则初始elementData数组的容量为指定大小,如果需要扩容则直接扩容elementData为1.5倍,如8 -> 12 -> 18 -> 27…
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值