java基础-集合

文章介绍了Java中的集合概念,作为存储对象数据的容器,集合不支持基本类型,但可以通过包装类存储。文章重点讨论了Collection接口下的ArrayList和LinkedList,ArrayList适合查询,不适合频繁增删;LinkedList则反之。此外,还提到了Set接口的无序、不重复特性以及Map体系的存储方式,如HashSet和TreeSet的差异。
摘要由CSDN通过智能技术生成

集合概述

集合是java中存储对象数据的一种容器。不支持基本类型数据的存储,只能存储引用类型的数据,如果要存储基本类型的数据可以选用包装类。集合大小不固定,启动后可以动态变化,类型也可以选择不固定。

集合分为单列(Collection)和双列(Map):

Collection体系

Collection是单列集合类型的父接口,它有两个子接口,一个List,一个Set。List接口有两个常用的实现类ArrayList和LinkedList。List集合的特点是有序、可重复、有索引,Set集合的特点是无序、不重复、无索引。

ArrayList集合在查询元素时速度很快,但在增加或者删除元素时效率较低。为了解决这一问题,可以使用删除或者增加元素效率更高的List的另一个实现类LinkedList。

简单的一些代码示例如下:

package collection;

import org.junit.Test;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.LinkedList;

public class Demo1 {
    public static void main(String[] args) {
        ArrayList arrayList = new ArrayList();  // 实例化一个ArrayList集合
        arrayList.add("张三");    // 向集合中添加一个元素
        arrayList.add("李四");
        arrayList.add("王五");
        arrayList.add("赵六");
        System.out.println("集合的长度为:"+arrayList.size());
        System.out.println("集合的第二个元素为:"+arrayList.get(1));
    }

    @Test
    public void test01(){
        System.out.println("LinkedList的学习");
        LinkedList linkedList = new LinkedList();
        linkedList.add("张三");
        linkedList.add("李四");
        linkedList.add("王五");
        linkedList.add("赵六");
        linkedList.add("钱七");
        System.out.println(linkedList);
        linkedList.add(3, "第四个元素");
        System.out.println(linkedList);
        linkedList.addFirst("第一个元素");
        System.out.println(linkedList);
        System.out.println(linkedList.getFirst());
        linkedList.remove(0);
        linkedList.removeFirst();
        System.out.println(linkedList);
    }

    @Test
    public void test02(){
        ArrayList list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        Iterator iterator = list.iterator();
        // 注意:如果在使用迭代器进行遍历的过程中需要删除元素的话,应该使用迭代器自带的remove方法 即:迭代器变量名.remove(obj)
        // 如果直接使用 集合.remove(obj) 来删除元素的话,会导致迭代器预期迭代次数与实际元素数不同,从而导致出错。
        while (iterator.hasNext()){
            Object o = iterator.next();
            // 想把名为李四的删除掉
            if (o.equals("李四")) {
                iterator.remove();
            }
            System.out.println(o);
        }
        System.out.println(list);
    }

    @Test
    public void test03(){
        ArrayList<String> list = new ArrayList();
        list.add("张三");
        list.add("李四");
        list.add("王五");
        list.add("赵六");
        // foreach 简化了可迭代对象的遍历操作,但也有局限性,即不可在遍历时对元素进行修改
        for (String s : list){
            System.out.println(s);
        }
    }
}

Set接口主要有两个实现类,分别是HashSet和TreeSet。其中,HashSet是根据对象的散列值来确定元素在集合中的存储位置,具有良好的存取和查找性能。TreeSet则是以二叉树的方式来存储元素,它可以实现对集合中的元素进行排序。

HashSet是Set接口的一个实现类,它所存储的元素是不可重复的,并且元素都是无序的。

Map体系

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

冉冉编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值