J2EE集合框架(List集合)

简介: J2EE集合框架(List集合)

1. UMI(主要以下两个图片介绍它们之间的关系)

集合类图

线下教育平台用例图

2. list集合的特点


具备容器基本特点增删改查,元素有序且可重复。

(元素有序指该集合有下标,从0开始,我们按照什么顺序增删改查倒lsit集合的就是什么样子的顺序)。

//增删改查
public static void main(String[] args) {
            List list=new ArrayList<>();
            list.add("jun");
            list.add("lin");
            list.add("yi");
            System.out.println("目前容器中的元素:"+list);
            list.remove(0);
            System.out.println("删除后容器中的元素:"+list);
            list.set(1,"nb");
            System.out.println("修改后容器中的元素"+list);
            System.out.println("获取第一个容器元素:"+list.get(0));
        }

3. list遍历

3.1 foreach增强for循环

public static void main(String[] args) {
            List list=new ArrayList<>();
            list.add("jun");
            list.add("lin");
            list.add("yi");
            for (Object object : list) {
                System.out.println(object);
            }

3.2 迭代器

public static void main(String[] args) {
            List list=new ArrayList<>();
            list.add("jun");
            list.add("lin");
            list.add("yi");
            Iterator it=list.iterator();
            while(it.hasNext()) {
                System.out.println(it.next());
            }
        }   

3.3 for i 下标遍历

public static void main(String[] args) {
            List list=new ArrayList<>();
            list.add("jun");
            list.add("lin");
            list.add("yi");
            for (int i = 0; i < list.size(); i++) {
                System.out.println(list.get(i));
            }
        }   

三个结果同样是:

4. LinkedList特点

4.1 Linkedlist: 链表

如图所示:表明 特点:查询修改快,增加删除慢

4.2 Arraylist: 数组

ArrayList 是一个可以数组,与普通数组的区别就是它是没有固定大小的限制,我们可以添加或删除元素。

数据结构: Object数组。

特点: 有序、不唯一。查询修改慢,增加删除快。

5 . 堆栈与队列的认识

5.1 堆栈

如图所示:三人一个接一个掉入大坑,大坑很深但很狭窄只能站一个人,所以只能后调入的先上去,从后之前。(小编不太会画图请了解,故事虚构请勿相信)


表明特点:先进后出

5.2 队列

如图所示:三人一起进入地道,三人只能走前面入口,一个接着一个出去(故事虚构请勿相信}

表明特点:先进先出

5.3 用LinkedList完成一个堆栈容器和队列容器

public class demo3 {
    public static void main(String[] args) {
        LinkedList lk = new LinkedList<>();
        lk.add("jun");
        lk.add("lin");
        lk.add("yi");
        // 实例化堆栈对象
        DuiZhan dz = new DuiZhan(lk);
        // 定义一个方法
        System.out.println(dz.pop());
        System.out.println(dz.pop());
        System.out.println(dz.pop());
        // 实例化队列对象
        DuiLie dl = new DuiLie(lk);
        // 定义一个方法
        System.out.println(dl.duilie());
        System.out.println(dl.duilie());
        System.out.println(dl.duilie());
    }
}
class DuiZhan {
    private LinkedList lk;
    public DuiZhan(LinkedList lk) {
        this.lk = lk;
    }
    // 当这个方法被调用时,后存进的内容要先输出,先存入的内容后输出
    public Object pop() {
        return lk.removeLast();
    }
}
class DuiLie {
    private LinkedList lk; 
    public DuiLie(LinkedList lk) {
        this.lk = lk;
    }
    // 当这个方法被调用时,先存进的内容要先输出,后存入的内容后输出
    public Object duilie() {
        return lk.remove();
    }
}
    //输出结果:yi( 堆栈)jun(队列)
              lin       lin
              jun       yi

6.增长因子

以数组方式进行存储,数组长度是不可变的,但集合List长度可变。

public static void main(String[] args) throws Exception {
        ArrayList list = new ArrayList(50); //修改ArrayList(50) 默认长度就为50
        list.add("1");
        elementDataLength(list);
    }
    // 该方法是获取底层数组的长度
    private static void elementDataLength(ArrayList list) throws Exception {
        Field f = list.getClass().getDeclaredField("elementData");
        f.setAccessible(true);
        Object[] o = (Object[]) f.get(list);
        System.out.println("当前集合底层数组容量长度为:" + o.length);
    }

7.list去重原理

public static void main(String[] args) throws Exception {
            ArrayList list = new ArrayList();
            for (int i = 0; i < 50; i++) {
                list.add(i);
                System.out.print("集合长度为:"+i+"\r");
                elementDataLength(list);
            }
        }
        // 该方法是获取底层数组的长度
        private static void elementDataLength(ArrayList list) throws Exception {
            Field f = list.getClass().getDeclaredField("elementData");
            f.setAccessible(true);
            Object[] o = (Object[]) f.get(list);
            System.out.println("集合底层数组容量长度为:" + o.length);
        }

运行结果:

由此结论:

当添加内容超过默认数组长度会自动扩容,*增长因子为 ‘原容量的0.5倍 + 1+0.5=1.5倍’(每扩容一次叠加1,如扩容第二次就加2)*,因此我们可对其进行调优,根据需求修改默认底层数组长度减少扩容次数,从而提高效率。

目录
相关文章
|
1天前
|
存储 安全 算法
Java一分钟之-Java集合框架入门:List接口与ArrayList
【5月更文挑战第10天】本文介绍了Java集合框架中的`List`接口和`ArrayList`实现类。`List`是有序集合,支持元素重复并能按索引访问。核心方法包括添加、删除、获取和设置元素。`ArrayList`基于动态数组,提供高效随机访问和自动扩容,但非线程安全。文章讨论了三个常见问题:索引越界、遍历时修改集合和并发修改,并给出避免策略。通过示例代码展示了基本操作和安全遍历删除。理解并正确使用`List`和`ArrayList`能提升程序效率和稳定性。
7 0
|
1月前
|
存储 Java API
java集合Collection(List)和泛型
java集合Collection(List)和泛型
|
1月前
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)
|
1月前
|
算法
递归淘汰List集合头部数据,获取最终集合的起始坐标
递归淘汰List集合头部数据,获取最终集合的起始坐标
|
1月前
|
Java
list集合 使用java8同一列表获取前一条的数据放到当前对象中
list集合 使用java8同一列表获取前一条的数据放到当前对象中
|
2月前
|
存储 安全 Java
java集合框架及其特点(List、Set、Queue、Map)
java集合框架及其特点(List、Set、Queue、Map)
|
2天前
|
存储 安全 Java
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
Java容器类List、ArrayList、Vector及map、HashTable、HashMap
|
12天前
|
Java API
【亮剑】三种有效的方法来删除List中的重复元素Java的List
【4月更文挑战第30天】本文介绍了三种Java中删除List重复元素的方法:1) 使用HashSet,借助其不允许重复值的特性;2) 利用Java 8 Stream API的distinct()方法;3) 对自定义对象重写equals()和hashCode()。每种方法都附带了代码示例,帮助理解和应用。
|
1月前
|
Java
Java中拷贝list数组如何实现
Java中拷贝list数组如何实现
11 0
|
1月前
|
存储 安全 Java
Java集合详解(List、Map、Set)
Java集合详解(List、Map、Set)
34 4