单列集合

一、集合和数组既然都是容器,它们的区别:

  1. 数组的长度是固定的。集合的长度是可变的

  2. 数组中存储的是同一类型的元素,可以存储基本数据类型值。集合存储的都是对象。而且对象的类型可以不一致。在开发中一般当对象多的时候,使用集合进行存储

二、集合按照其存储结构可以分为两大类,分别是单列集合java.util.Collection和双列集合java.util.Map

Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,它有两个重要的子接口,分别是java.util.Listjava.util.Set。其中,List的特点是元素有序、元素可重复。Set的特点是元素无序,而且不可重复。List接口的主要实现类有java.util.ArrayListjava.util.LinkedListSet接口的主要实现类有java.util.HashSetjava.util.TreeSet

Collection是所有单列集合的父接口,因此在Collection中定义了单列集合(List和Set)通用的一些方法,这些方法可用于操作所有的单列集合。方法如下:
public boolean add(E e):把给定的对象添加到当前集合中
public void clear():清空集合中所有的元素
public boolean remove(E e): 把给定的对象在当前集合中删除。
public boolean contains(E e): 判断当前集合中是否包含给定的对象。
public boolean isEmpty(): 判断当前集合是否为空。
public int size(): 返回集合中元素的个数。
public Object[] toArray(): 把集合中的元素,存储到数组中。

三、List接口

特点:①有序 ②有索引 ③允许存储重复元素

List接口中带索引的方法(特有):
public void add(int index, E element): 将指定的元素,添加到该集合中的指定位置上。
public E get(int index):返回集合中指定位置的元素。
public E remove(int index): 移除列表中指定位置的元素, 返回的是被移除的元素。
public E set(int index, E element):用指定元素替换集合中指定位置的元素,返回值的更新前的元素。

注意: 操作索引的时候,一定要防止索引越界异常,IndexOutOfBoundsException:索引越界异常,集合会报 ArrayIndexOutOfBoundsException:数组索引越界异常 StringIndexOutOfBoundsException:字符串索引越界异常。

List接口的实现类:

  1. ArrayList,底层是数组结构。元素增删慢,查寻快

  2.LinkedList,底层链表结构。元素增删快,查询慢 ;里面包含了大量操作首尾的方法

  3.Vector,底层是数组结构,Vector是同步的,即单线程、速度慢,而ArrayList不是同步的

LinkedList中部分方法:

public void addFirst(E e):将指定元素插入此列表的开头。
public void addLast(E e):将指定元素添加到此列表的结尾。
public void push(E e):将元素推入此列表所表示的堆栈。

public E getFirst():返回此列表的第一个元素。
public E getLast():返回此列表的最后一个元素。

public E removeFirst():移除并返回此列表的第一个元素。
public E removeLast():移除并返回此列表的最后一个元素。
public E pop():从此列表所表示的堆栈处弹出一个元素,此方法相当于removeFirst

public boolean isEmpty():如果列表不包含元素,则返回true。

四、Set接口

特点:①不允许存储重复元素②没有索引,没有带索引的方法,也不能使用普通的for循环遍历

Set接口的实现类:

  1. HashSet,底层是哈希表结构(查询的速度非常快),不同步;是一个无序的集合,存储和取出元素的顺序可能不一致,两种遍历方式:增强for循环和迭代器遍历

  2. LinkedHashSet,底层是一个哈希表(数组+链表/红黑树)+链表:多了一条链表(记录元素的存储顺序),保证元素有序,有序,不允许存储重复元素

注意:
HashSet集合存储数据的结构(哈希表)
jdk1.8版本之前:哈希表=数组+链表
jdk1.8版本之后:
    哈希表=数组+链表
    哈希表=数组+红黑树(提高查询的速度)

set集合保证元素唯一:存储的元素(String、Integer、Student、Person.......),必须重写hashCode方法和equals方法;如:存储Person类型,同名统年龄的人视为同一个人,此时为保证元素唯一,就必须重写hashCode方法和equals方法

import java.util.Objects;

public class Person {
    String name;
    int age;

    public Person() {
    }

    public Person(String name, int age) {
        this.name = name;
        this.age = age;

    }

    public String getName() {
        return name;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) return true;
        if (o == null || getClass() != o.getClass()) return false;
        Student student = (Student) o;
        return age == student.age &&
                Objects.equals(name, student.name);
    }

    @Override
    public int hashCode() {

        return Objects.hash(name, age);
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

原文地址:https://www.cnblogs.com/svipero/p/12443248.html

时间: 2024-11-01 18:06:18

单列集合的相关文章

单列集合的总结

Collection 单列集合的根接口 List 特点 有序 有索引 元素可重复 ArrayList 底层数据是数组 查询快 增删慢 线程不安全 效率高 LinkedList 底层数据是链表 查询慢 增删快 线程不安全 效率高 Vector 底层数据是数组 查询快 增删慢 线程安全 效率低 Set  特点 元素唯一 HashSet 底层数据是哈希表 查询和增删都比较快 无序  唯一  先比较hashCode方法 如果hashCode不同 将元素添加到集合 如果hashCode相同 继续比较equ

单列集合的框架简介

集合概述 集合:集合是java中提供的一种容器,可以用来存储多个数据. 集合和数组既然都是容器,它们有啥区别呢? 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值.集合存储的都是对象.而且对象的类型可以不一致.在开发中一般当对象多的时候,使用集合进行存储. 集合框架 集合按照其存储结构可以分为两大类, 单列集合java.util.Collection 双列集合java.util.Map Collection:单列集合类的根接口,集合本身是一个工具,它

获取单列集合,双列集合,数组的Stream流对象以及简单操作

获取流对象 获取单列集合,双列集合,数组的流对象 单列集合获取流对象: 1.java.util.Collection接口中加入了default方法stream()获取流对象,因此其所有实现类均可通过此方式获取流. public class StreamTest01 { List<String> list = new ArrayList<>(); Stream<String> stream1 = list.stream(); Set<String> set =

Collection单列集合中的常用实现类

Collection 集合层次的根接口 List 有序 有索引 可以重复 ArrayList 底层数据结构是数组 查询快 增删快 线程不安全 效率高 LinkedList 底层数据结构是链表 查询慢 增删快 线程不安全 效率高 Vector 底层数据是数组 查询和增删介于前两者之间 线程安全 效率低 Set 唯一 在调用add()方法时: 在底层中以map的形式存储,存储时调用元素的hashCode(),equals(),map会自动比较key值(就是hash值) 先比较hash值 如果对象的h

Collection单列集合 Map双列集合

Map集合:该集合存储键值对,一对一对往里存.而且要保证键的唯一性. 1.添加 put(K key, V value) putAll(Map<? extends K,? extends V> m) 2.删除 clear() remove(Object key) 3.判断 containsKey(Object key) containsValue(Object value) isEmpty() 4.获取 get(Object key) :获取值 size() values() entrySet(

java之Set接口(单列集合)

Set接口概述 java.util.Set 接口和 java.util.List 接口一样,同样继承自 Collection 接口,它与 Collection 接口中的方法基本一致,并没有对 Collection 接口进行功能上的扩充,只是比 Collection 接口更加严格了.与 List 接口不同的是, Set 接口中元素无序,并且都会以某种规则保证存入的元素不出现重复.Set 集合有多个子类,这里我们介绍其中的 java.util.HashSet . java.util.LinkedHa

单列集合List

List的常用子类 如果要执行大量的增删操作选择LinkedList,如果只是查询的话用ArrayList ArrayList集合 有序存储,继承了List的特性,平时常用来查询,遍历数据 底层是数组结构,所以增删慢,查询快,效率高意味着线程不安全 LinkedList集合 有序存储,继承了List的特性 底层是链表结构,所以增删快,查询慢,同样的效率高,但是线程不安全 LinkedList是一个双向链表 特有方法 public void addFirst(E e) :将指定元素插入此列表的开头

集合单列--Colletion

集合 学习集合的目标: 会使用集合存储数据 会遍历集合,把数据取出来 掌握每种集合的特性 集合和数组的区别 数组的长度是固定的.集合的长度是可变的. 数组中存储的是同一类型的元素,可以存储基本数据类型值.集合存储的都是对象.而且对象的类型可以不一致,在开发中一般当对象多的时候使用集合进行存储. 集合框架 JAVASE提供了满足各种需求的API,在使用这些API前,先了解其继承与接口操作架构,才能了解何时采用哪个类,以及类之间如何彼此合作,从而达到灵活应用. 集合按照其存储结构可以分为两,分别是单

Java 之集合

collection(单列集合) List(有序,可重复) ArrayList     底层数据结构是数组,查询快,增删慢,线程不安全,效率高 Vector     底层数据结构是数组,查询快,增删慢,线程安全,效率低 LinkedList  底层数据结构是链表,查询慢,增删快,线程不安全,效率高 Set(无序,唯一) HashSet   底层数据结构是哈希表,依赖hashCode()和equals() 执行顺序:判断hashCode()是否相同,相同继续执行equals(),返回true不添加