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)*,因此我们可对其进行调优,根据需求修改默认底层数组长度减少扩容次数,从而提高效率。

目录
相关文章
|
5月前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
122 5
|
4月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
76 0
|
5月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
55 3
|
6月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
44 3
|
9月前
|
安全 Java
java线程之List集合并发安全问题及解决方案
java线程之List集合并发安全问题及解决方案
1143 1
|
8月前
|
Java API Apache
怎么在在 Java 中对List进行分区
本文介绍了如何将列表拆分为给定大小的子列表。尽管标准Java集合API未直接支持此功能,但Guava和Apache Commons Collections提供了相关API。
101 1
|
8月前
|
运维 关系型数据库 Java
PolarDB产品使用问题之使用List或Range分区表时,Java代码是否需要进行改动
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
8月前
|
存储 安全 Java
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
详解Java中集合的List接口实现的ArrayList方法 | Set接口实现的HashSet方法
101 3
|
9月前
|
Java API
使用 Java 来实现两个 List 的差集操作
使用 Java 来实现两个 List 的差集操作
308 3
|
8月前
|
存储 Java 索引
Java List接口实现原理与性能评估
Java List接口实现原理与性能评估