Java集合-01

一、集合的分类

主要分为两种

单值集合:Collection  

双值集合:   Map

二、Collection

1. Collection接口的实现类有List和Set两种;

2. List中的元素是有序、可重复的;  Set中的元素是无序、不可重复的(有序与无序指的是插入顺序与取出顺序是否一致)

3. Collection接口没有直接的实现类,是通过他的子接口List和Set去实现的

4. Collection接口遍历元素的方式

(1)迭代器遍历

(2)增强for循环

(3)普通for循环

所有实现了Collection接口的集合类都有一个iterator() 方法,这个方法用来返回迭代器对象Iterator,即:

List list = new ArratList();
list.add("aaaa");
//开始遍历
Iterator it = list.iterator();  
//list集合由于是Collection接口的实现类,所以具有该iterator()方法,调用该方法会返回一个Iterator迭代器对象
if(it.hasNext()){
    Object str = it.next();
}
或者:
while (iterator.hasNext()) {//判断是否还有数据
 // 返回下一个元素,类型是 Object
    Object obj = iterator.next();
    System.out.println("obj=" + obj);
}

List集合 

public class ListExercise {
@SuppressWarnings({"all"})
    public static void main(String[] args) {
    /*
    添加 10 个以上的元素(比如 String "hello" ),在 2 号位插入一个元素"韩顺平教育",
    获得第 5 个元素,删除第 6 个元素,修改第 7 个元素,在使用迭代器遍历集合,
    要求:使用 List 的实现类 ArrayList 完成。
    */

        List list = new ArrayList();
        for (int i = 0; i < 12; i++) {
        list.add("hello" + i);
        }
        System.out.println("list=" + list);
        //在 2 号位插入一个元素"韩顺平教育"
        list.add(1, "韩顺平教育");
        System.out.println("list=" + list);
        //获得第 5 个元素
        System.out.println("第五个元素=" + list.get(4));
        //删除第 6 个元素
        list.remove(5);
        System.out.println("list=" + list);
        //修改第 7 个元素
        list.set(6, "三国演义");
        System.out.println("list=" + list);
        //在使用迭代器遍历集合
        Iterator iterator = list.iterator();
        while (iterator.hasNext()) {
        Object obj = iterator.next();
        System.out.println("obj=" + obj);
    }
}
    
    
//集合排序
public static void sort(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);
                }
        }
    }
}

三、ArrayList解读 

1.  ArrayList底层是由数组组成的,可以为多个null ,ArrayList基本上等同于Vector,但ArrayList是线程不安全的。

2.  ArrayList扩容机制:

         ①ArrayList 通过数组实现,一旦我们实例化 ArrayList 无参数构造函数默认为数组初始化长度为 10

         ②初始化时,如果是有参构造,则第一次初始化为当前已构造中指定好的长度,当再次扩容时,则直接扩容为当前的1.5倍

         ③add 方法底层实现如果增加的元素个数超过了 10 个,那么 ArrayList 底层会新生成一个数组,长度为原数组的 1.5 倍+1,然后将原数组的内容复制到新数组当中,并且后续增加

的内容都会放到新数组当中。当新数组无法容纳增加的元素时,重复该过程。是一旦数组超出长度,就开始扩容数组。

扩容数组调用的方法

Arrays.copyOf(objArr, objArr.length + 1);

四、Vector解读

1. Vector是线程安全的,底层也维护了一个Object类型的数组

2. Vector 类的操作方法都带有synchronized ,即Vector是线程安全的。

2.1 //下面这个方法就添加数据到 vector 集合
public synchronized boolean add(E e) {
    modCount++;
    ensureCapacityHelper(elementCount + 1);
    elementData[elementCount++] = e;
    return true;
}

 五、ArrayList与Vector集合的区别

 

七、LinkedList集合解读

1. LinkedList底层是一个双向链表,这条链表是有多个Node节点组成的,每个Node节点又维护了三个属性,即:prev/item/next; prev执行前一个Node,item是当前的Node,next指向下一个Node,以此来构成一条双向链表。

有两个特殊的Node节点,即首节点first和尾节点last

2. LinkedList允许重复,且有序,但线程不是安全的

 

posted @   许君闲乘悦  阅读(27)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)
点击右上角即可分享
微信分享提示