Java基础之集合基础

159 阅读3分钟

「这是我参与2022首次更文挑战的第17天,活动详情查看:2022首次更文挑战

1.1 集合介绍

  • 集合提供一种存储空间可变的存储模型,存储的数据容量可以改变
  • ArrayLis<>:
    • 可调整大小的数组实现
    • <>:是一种特殊的数据类型,泛型
    • 可储存重复元素
  • 怎么使用呢
    • 在出现E的地方我们使用引用数据类型替换即可
    • 举例:ArrayList<String>、ArrayList<Student>

1.2 集合类型

Collection 接口的接口 对象的集合(单列集合)

  • List 接口:元素按进入先后有序保存,可重复
    • LinkedList 接口实现类, 链表, 插入删除, 没有同步, 线程不安全
    • ArrayList 接口实现类, 数组, 随机访问, 没有同步, 线程不安全
    • Vector 接口实现类 数组, 同步, 线程安全
    • Stack 是Vector类的实现类
  • Set 接口: 仅接收一次,不可重复,并做内部排序
    • HashSet 使用hash表(数组)存储元素
    • LinkedHashSet 链表维护元素的插入次序
    • TreeSet 底层实现为二叉树,元素排好序

Map 接口 键值对的集合 (双列集合)

  • Hashtable 接口实现类, 同步, 线程安全
  • HashMap 接口实现类 ,没有同步, 线程不安全-
    • LinkedHashMap 双向链表和哈希表实现
    • WeakHashMap
  • TreeMap 红黑树对所有的key进行排序
  • IdentifyHashMap

1.3 集合与数组的区别

1、数组声明了它容纳的元素的类型,而集合不声明。

2、数组的长度是固定的,集合长度是可以改变的。

数组是静态的,一个数组实例具有固定的大小,一旦创建了就无法改变容量了。而集合是可以动态扩展容量,可以根据需要动态改变大小,集合提供更多的成员方法,能满足更多的需求。

3、数组的存放的类型只能是一种(基本类型/引用类型),集合存放的类型可以不是一种(不加泛型时添加的类型是Object)。

4、数组是java语言中内置的数据类型,是线性排列的,执行效率或者类型检查都是最快的。

5、集合以接口和类的形式存在,具有封装,继承和多态等类的特性,通过简单的方法和属性调用即可实现各种复杂的操作,大大提高软件的开发效率。

  • 共同点:都是存储数据的容器
  • 不同点:数组的容量是固定的,集合的容量是可变的

1.4 ArrayList 构造方法和添加方法

在这里插入图片描述

import java.util.ArrayList;

public class Demo {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array = new ArrayList<>();
        System.out.println(array); //[]

        //添加到集合末尾
        array.add("hello");
        array.add("word");
        array.add("java");
        System.out.println(array); //[hello, word, java]

        //指定位置,添加元素
        array.add(1,"javase");
        System.out.println(array); //[hello, javase, word, java]

        array.add(4,"javaee");
        System.out.println(array); //[hello, javase, word, java, javaee]

        array.add(6,"javaweb"); 
        System.out.println(array); //IndexOutOfBoundsException,不能中间跳一个位置
    }
}

1.5 ArrayList 常用方法

方法名说明
public boolean remove(Object o)删除指定的元素,返回删除是否成功
public E remove(int index)删除指定索引处的元素,返回被删除的元素
public E set(int index,E element)修改指定索引处的元素,返回被修改的元素
public E get(int index)返回指定索引处的元素
public int size()返回集合中元素的个数
  • 范例:
import java.util.ArrayList;

public class Demo {
    public static void main(String[] args) {
        //创建集合对象
        ArrayList<String> array = new ArrayList<>();
        System.out.println(array); //[]

        //添加到集合末尾
        array.add("hello");
        array.add("word");
        array.add("java");
        System.out.println(array); //[hello, word, java]

        //1,public boolean remove(Object o) 	删除指定的元素,返回删除是否成功
//        System.out.println(array.remove("hello")); //true; 集合变为[word, java]
//        System.out.println(array.remove("javase")); //false; 集合变为[hello, word, java]

        //2,public E remove(int index) 	删除指定索引处的元素,返回被删除的元素
//        System.out.println(array.remove(1)); //word,集合变为[hello, java]

        //3,public E set(int index,E element) 	修改指定索引处的元素,返回被修改的元素
//        System.out.println(array.set(1,"javase")); //word;集合变为[hello, javase, java]

        //4,public E get(int index) 	返回指定索引处的元素
//        System.out.println(array.get(0)); //hello
//        System.out.println(array.get(1)); //word
//        System.out.println(array.get(2)); //java

        //5,public int size() 	返回集合中元素的个数
        System.out.println(array.size()); //3
    }
}