Java集合框架和泛型

131 阅读3分钟

1 认识集合

集合框架有哪几种

List接口
Set接口
Iterator接口
Map接口
Collections类

创建集合对象

  初始操作
  导入jar包
  import java.util.*
  所有的集合框架都在java.util包下
  

集合接口和实体类的对应关系

Collection接口下面有ListSet接口
List接口下面有ArrayListLinkedList两个接口实现类
Set接口下面有一个HashSet接口实习类
Map接口是平行与Collection接口的,下面有一个HashMap接口实现类

List接口

Conllection接口是最基本的集合接口,可以存储一组不唯一、无序的对象。List接口继承自Collection接口,是有序集合。用户可以使用索引访问List接口中的元素,类似数组。List接口中允许存放重复元素,也就是说List可以存储一组不唯一,有序的对象。
List接口常用的实现类有ArrayList,LinkedList
  • 使用ArrayList动态存储数据

      ArrayList集合类对数组进行了封装,实现了长度可变的数组,而且和数组采用相同的存储方式,在内存中开辟连续的空间,经常称ArrayList为动态数组。但他不等同与数组,ArrayList可以存储任意类型的数据,并且添加的数据都可以转换成Object类型,数组只能存储单一指定的类型。
    
方法说明
boolean add(Object 0)在列表末尾添加元素o,起始下标为0
void add(int index,Object 0)指定索引下添加元素o,index必须在0到列表元素个数之间
int size()返回列表的元素个数
Object get(int index)根据下标获取元素,下标在0-元素个数间,取到的值值需要进行强制转换
void set(int index,Object 0)替换指定下标的元素
boolean contains(Object 0)判断列表是否存在指定元素
int indexOf(Object 0)返回元素在集合中出现的索引位置
boolean remove(Object 0)从列表中删除元素0
Object remove(int index)从列表中删除指定位置的元素

示例演示

  1. 导入类
  2. 创建对象,添加数据
  3. 判断集合中是否包含某个元素
  4. 移除索引为1的元素
  5. 把索引为0的元素替换成其他的元素
  6. 输出某个元素所在位置的索引
  7. 清空列表数据
  8. 判断集合中是否包含数据
  9. 使用集合继续列表数据排序
package com.minetel.util;

import java.util.ArrayList; // 1 导入包

public class ArrayListDemo {
    public static void main(String[] args) {
        ArrayList<Integer> list = new ArrayList<>();  // 2  创建对象
        list.add(1); // 2 添加数据
        for (int i=0;i<5;i++){
            list.add(i*i+1);  //for 循环添加数据
        }
        boolean contains = list.contains(1); // 3 判断集合是否包含元素1,并输出索引
        if (contains){
            System.out.println("集合中包含该元素");
            System.out.println("下标:"+list.indexOf(1));
        }else {
            System.out.println("集合中不包含该元素");
        }
        Integer remove = list.remove(1); // 4 移除索引为1的元素
        System.out.println("移除的元素值:"+remove);

        list.set(0,3); // 5 替换指定索引的元素值
        System.out.println("替换后的元素"+list.get(0)+"获取元素3的索引"+list.indexOf(3)); //6 获取指定元素索引

        // 7 循环清空数据
        for (int i = 0; i<list.size();i++){
            list.remove(i);
        }
        list = new ArrayList<>(); //清空
        System.out.println(list.size());
        System.out.println(list.size() > 0 ? "包含" : "不包含"); //8 判断集合是否包含数据

        int nums = 0;
        while (nums<20){
            list.add((int) (Math.random()*10));
            nums ++;  //自增
        }
        System.out.println("排序前"+list.toString());
        //9 集合排序
        for (int i= 0;i<list.size();i++){
            for (int j= i+1;j<list.size();j++){
                if (list.get(i)>list.get(j)){
                    int temp = list.get(j);
                    list.set(j,list.get(i));
                    list.set(i,temp);
                }
            }
        }
        //输出结果
        System.out.println(list.toString());
    }
}

List处理类对象

现场景有蔬菜水果若干,需要存储进数组中进行统一管理 蔬菜水果类-> 编号,名称,数量,单价

package com.minetel.pojo;

public class GreenFruit {
    private Integer id;
    private String name;
    private String numbers;
    private double price;

    public Integer getId() {
        return id;
    }

    public void setId(Integer id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getNumbers() {
        return numbers;
    }

    public void setNumbers(String numbers) {
        this.numbers = numbers;
    }

    public double getPrice() {
        return price;
    }

    public void setPrice(double price) {
        this.price = price;
    }

    @Override
    public String toString() {
        return "GreenFruit{" +
                "id=" + id +
                ", name='" + name + ''' +
                ", numbers='" + numbers + ''' +
                ", price=" + price +
                '}';
    }
}
public static void setGreenFruit(){
    ArrayList<GreenFruit> greenFruits = new ArrayList<>();
    GreenFruit greenFruit = new GreenFruit();
    greenFruit.setId(1);
    greenFruit.setName("白菜");
    greenFruit.setNumbers("100");
    greenFruit.setPrice(8.99);
    GreenFruit greenFruit1 = new GreenFruit(2,"苹果","20",9.99);
    greenFruits.add(greenFruit); // 添加数据
    greenFruits.add(greenFruit1); // 添加数据
    System.out.println("品种数量"+greenFruits.size());
    System.out.println("蔬菜水果名:");
    for (GreenFruit fruit : greenFruits) {
        System.out.println(fruit.getName());
    }
}