J2EE&集合框架&List

简介: J2EE&集合框架&List

一.UML

集合类

②线下教育平台用例图

二.List集合特点

①学集合框架就是了解容器的数据结构(增删改查)

②有序的 可重复的

public static void main(String[] args) {
        List list = new ArrayList<>();
        //增加
        list.add("a");
        list.add("b");
        list.add("c");
       ① foreach
        for (Object object : list) {
            System.out.println(object);
        }
        ② iterator 迭代器
        Iterator it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        ③ for
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

三.遍历方式

① foreach

② iterator 迭代器

③ for

public static void main(String[] args) {
        List list = new ArrayList<>();
        //增加
        list.add("a");
        list.add("b");
        list.add("c");
       ① foreach
        for (Object object : list) {
            System.out.println(object);
        }
        ② iterator 迭代器
        Iterator it = list.iterator();
        while(it.hasNext()) {
            System.out.println(it.next());
        }
        ③ for
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
    }

四.LinkedList

①对比ArrayList是数据结构

Linkedlist: 链表 特点:查询修改慢,增加删除快
Arraylist: 数组 特点:查询修改快,增加删除慢

②堆栈 队列

/**
 * linkedList调优
 * 元素存储在集合的过程
 * ArrayList
 * 数组 长度不可变
 * 
 * 1.证明数据结构就是数组
 * 2.为什么数组长度不可变,集合List长度可变
 * 
 * 增长因子(一次性扩容多少) 0.5倍  扩容1.5倍  1+0.5
 * @author PC
 *
 */
public class Demo3 {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        ArrayList al = new ArrayList<>(50);
        for (int i = 0; i < 100; i++) {
            al.add(i);
            System.out.println(i+"\r");
            getCurrentArrLength(al);
        }
    }
   //获取ArrayList al对象底层数组的长度
    private static void getCurrentArrLength(ArrayList al) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Field f = al.getClass().getDeclaredField("elementData");
        f.setAccessible(true);
        Object[] Object = (java.lang.Object[]) f.get(al);
        System.out.println("当前集合底层数组的容器长度"+Object.length);
    }

五.增长因子论证

/**
 * linkedList调优
 * 元素存储在集合的过程
 * ArrayList
 * 数组 长度不可变
 * 
 * 1.证明数据结构就是数组
 * 2.为什么数组长度不可变,集合List长度可变
 * 
 * 增长因子(一次性扩容多少) 0.5倍  扩容1.5倍  1+0.5
 * @author PC
 *
 */
public class Demo3 {
    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        ArrayList al = new ArrayList<>(50);
        for (int i = 0; i < 100; i++) {
            al.add(i);
            System.out.println(i+"\r");
            getCurrentArrLength(al);
        }
    }
   //获取ArrayList al对象底层数组的长度
    private static void getCurrentArrLength(ArrayList al) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        Field f = al.getClass().getDeclaredField("elementData");
        f.setAccessible(true);
        Object[] Object = (java.lang.Object[]) f.get(al);
        System.out.println("当前集合底层数组的容器长度"+Object.length);
    }

六.集合框架ArrayList中的重复元素去重及其底层原理

/**
 * list底层对象去重原理    跟equals
 * @author PC
 *
 */
public class Demo4 {
    public static void main2(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        List list = new ArrayList<>();
        list.add("a");
        list.add("b");
        list.add("c");
        System.out.println("目前集合容器中的"+list);
        //去重
        if(!list.contains("b")) {
            list.add("b");
        }
        System.out.println("目前集合容器中的"+list);
    }
    public static void main(String[] args) throws NoSuchFieldException, SecurityException, IllegalArgumentException, IllegalAccessException {
        List list = new ArrayList<>();
        list.add(new Student(1,"zs"));
        list.add(new Student(2,"ls"));
        list.add(new Student(3,"lx"));
        System.out.println("目前集合容器中的"+list);
        //去重
        if(!list.contains(new Student(3,"lx"))) {
            list.add(new Student(3,"lx"));
        }
        System.out.println("目前集合容器中的"+list);
    }
}
class Student{
    private int id;
    private String name;
    public int getId() {
        return id;
    }
    public void setId(int id) {
        this.id = id;
    }
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Student() {
        // TODO Auto-generated constructor stub
    }
    public Student(int id, String name) {
        super();
        this.id = id;
        this.name = name;
    }
    @Override
    public String toString() {
        return "Student [id=" + id + ", name=" + name + "]";
    }
    @Override
    public boolean equals(Object obj) {
        System.out.println("被调了。。。");
        if (this == obj)
            return true;
        if (obj == null)
            return false;
        if (getClass() != obj.getClass())
            return false;
        Student other = (Student) obj;
        if (id != other.id)
            return false;
        if (name == null) {
            if (other.name != null)
                return false;
        } else if (!name.equals(other.name))
            return false;
        return true;
    }


相关文章
|
3月前
|
存储 安全 Java
【Java集合类面试二十五】、有哪些线程安全的List?
线程安全的List包括Vector、Collections.SynchronizedList和CopyOnWriteArrayList,其中CopyOnWriteArrayList通过复制底层数组实现写操作,提供了最优的线程安全性能。
|
3月前
|
安全
List集合特有功能
List集合特有功能
38 2
|
3月前
|
Java
【Java集合类面试二十三】、List和Set有什么区别?
List和Set的主要区别在于List是一个有序且允许元素重复的集合,而Set是一个无序且元素不重复的集合。
|
3月前
|
存储 Java
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
Java学习笔记 List集合的定义、集合的遍历、迭代器的使用
|
27天前
|
安全 Java 程序员
深入Java集合框架:解密List的Fail-Fast与Fail-Safe机制
本文介绍了 Java 中 List 的遍历和删除操作,重点讨论了快速失败(fail-fast)和安全失败(fail-safe)机制。通过普通 for 循环、迭代器和 foreach 循环的对比,详细解释了各种方法的优缺点及适用场景,特别是在多线程环境下的表现。最后推荐了适合高并发场景的 fail-safe 容器,如 CopyOnWriteArrayList 和 ConcurrentHashMap。
53 5
|
1月前
|
存储 分布式计算 NoSQL
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
大数据-40 Redis 类型集合 string list set sorted hash 指令列表 执行结果 附截图
27 3
|
2月前
|
NoSQL Java Redis
List集合按照由小到大排序或者由大到小排序
List集合按照由小到大排序或者由大到小排序
22 3
|
3月前
|
Java
用JAVA架建List集合为树形结构的代码方法
这段代码定义了一个表示树形结构的 `Node` 类和一个用于构建树形结构的 `TreeController`。`Node` 类包含基本属性如 `id`、`pid`、`name` 和 `type`,以及子节点列表 `children`。`TreeController` 包含初始化节点列表并将其转换为树形结构的方法。通过过滤和分组操作实现树形结构的构建。详情可见:[代码示例链接1](http://www.zidongmutanji.com/zsjx/43551.html),[代码效果参考链接2](https://www.257342.com/sitemap/post.html)。
44 5
|
3月前
|
存储 NoSQL 算法
Redis6入门到实战------ 三、常用五大数据类型(列表(List)、集合(Set)、哈希(Hash)、Zset(sorted set))
这是关于Redis 6入门到实战的文章,具体内容涉及Redis的五大数据类型:列表(List)、集合(Set)、哈希(Hash)、有序集合(Zset(sorted set))。文章详细介绍了这些数据类型的特点、常用命令以及它们背后的数据结构。如果您有任何关于Redis的具体问题或需要进一步的帮助,请随时告诉我。
|
3月前
|
测试技术 索引 Python
Python接口自动化测试框架(基础篇)-- 常用数据类型list&set()
本文介绍了Python中list和set两种数据类型的使用,包括它们的创建、取值、增删改查操作、排序以及内置函数的使用,还探讨了list的比较函数和set的快速去重功能。
34 0

热门文章

最新文章

下一篇
无影云桌面