0
点赞
收藏
分享

微信扫一扫

java集合(详解)

奋斗De奶爸 2022-04-24 阅读 42

      文章目录    

                  什么是集合?

                  Collection的基本使用

                  接口实现类 

                  Collections工具类

                  Map接口及其实现类

                  Map是不是集合?


什么是集合?

集合是指具有某种特定性质的具体的或抽象的对象汇总而成的集体,有时集合也称之为容器,java中在util包下存放了所有的基本集合。

 集合大致分为List,Set,Map三种类型(还有一种Queue本章不讲解).

  • List为一种有序可重复的接口集合
  • Set为一种无序不重复的接口集合
  • Map是采用键值对形式的接口集合

 

Collection的基本使用

通过集合的关系图我们可以知道Collection是集合的顶层父类,他定义了集合的基本方法如:

方法作用
int size();获取集合大小
boolean isEmpty();判断是否为空
boolean contains(Object var1);判断是否包含
Object[] toArray();将集合转换为数组
boolean add(E var1);向集合增加元素
boolean remove(Object var1);向集合移除元素
boolean containsAll(Collection<?> var1);判断是否包含另一个集合的元素
boolean addAll(Collection<? extends E> var1);添加一个集合的全部元素
boolean removeAll(Collection<?> var1);删除一个集合的全部元素
void clear();清空集合
boolean equals(Object var1);判断是否相同
default Spliterator<E> spliterator();得到该集合的分离器
default Stream<E> stream();转换为Stream流
default Stream<E> parallelStream();转换为Stream并行流

 测试:


public class Test {
    public static void main(String[] args) {
        //定义一个集合并向上转型
        Collection<String> obj = new ArrayList<>();
        //1.int size();	获取集合大小
        int size = obj.size();
        //2.boolean isEmpty();	判断是否为空
        boolean empty = obj.isEmpty();
        //3.boolean contains(Object var1);	判断是否包含
        boolean contains = obj.contains(null);
        //4.Object[] toArray();	将集合转换为数组
        Object[] objects = obj.toArray();
        //5.boolean add(E var1);	向集合增加元素
        boolean result = obj.add("Hello World");
        //6.boolean remove(Object var1);	向集合移除元素
        boolean remove = obj.remove(null);
        //7.boolean containsAll(Collection<?> var1);	判断是否包含另一个集合的元素
        boolean containsResult = obj.containsAll(new ArrayList<>());
        //8.boolean addAll(Collection<? extends E> var1);	添加一个集合的全部元素
        boolean addAllResult = obj.addAll(new ArrayList<>());
        //9.boolean removeAll(Collection<?> var1);	删除一个集合的全部元素
        boolean removeAllResult = obj.removeAll(new ArrayList<>());
        //10.void clear();	清空集合
        obj.clear();
        //11.boolean equals(Object var1);	判断是否相同
        boolean equalsResult = obj.equals(null);
        //12.default Spliterator<E> spliterator();	得到该集合的分离器
        Spliterator<String> spliterator = obj.spliterator();
        //13.default Stream<E> stream();	转换为Stream流
        Stream<String> stream = obj.stream();
        //14.default Stream<E> parallelStream();	转换为Stream并行流
        Stream<String> stringStream = obj.parallelStream();
    }
}

接口实现类 

到这里我们已经知道了集合的基本用法,那么来看看接口的实现类:

List接口:

可以看到List接口下有四个较为常见的实现类:

 Set接口

Collections工具类

同时java也提供了操作集合的工具类Collections,常用API:

方法作用
public static <T> int binarySearch(List<? extends Comparable<? super T>> var0, T var1);二分搜索找到返回下标没有则返回-1
public static void reverse(List<?> var0);List中的元素反转
public static void shuffle(List<?> var0);List中的元素随机重排
public static <T> Collection<T> synchronizedCollection(Collection<T> var0);将Collection转换为安全的集合
public static <T> Set<T> synchronizedSet(Set<T> var0);将Set集合转换为安全的Set集合
public static <T> List<T> synchronizedList(List<T> var0);将List转换为安全的List
public static <K, V> Map<K, V> synchronizedMap(Map<K, V> var0);将Map转换为安全的Map
public static <T> Iterator<T> emptyIterator();获取空迭代器

测试:

package com.xiao.dao;

import java.util.*;
import java.util.concurrent.CopyOnWriteArrayList;
import java.util.stream.Stream;

public class Test {
    public static void main(String[] args) {
        //定义Collection接口
        ArrayList<String> obj = new ArrayList<>();
        //1. 二分搜索找到返回下标没有则返回-1
        System.out.println(Collections.binarySearch(obj, "1"));
        //2.public static void reverse(List<?> var0);	List中的元素反转
        Collections.reverse(obj);
        //3.public static void shuffle(List<?> var0);	List中的元素随机重排
        Collections.shuffle(obj);
        //4.public static <T> Collection<T> synchronizedCollection(Collection<T> var0);	将Collection转换为安全的集合
        Collection<String> strings = Collections.synchronizedCollection(obj);
        //5.public static <T> Set<T> synchronizedSet(Set<T> var0);	将Set集合转换为安全的Set集合
        Set<Object> objects = Collections.synchronizedSet(new HashSet<>());
        //6.public static <T> List<T> synchronizedList(List<T> var0);	将List转换为安全的List
        List<String> strings1 = Collections.synchronizedList(obj);
        //7.public static <K, V> Map<K, V> synchronizedMap(Map<K, V> var0);	将Map转换为安全的Map
        Map<Object, Object> objectObjectMap = Collections.synchronizedMap(new HashMap<>());
        //8.public static <T> Iterator<T> emptyIterator();	获取空迭代器
        Iterator<Object> objectIterator = Collections.emptyIterator();
    }
}

Map接口及其实现类

  •  Map接口定义了键值对集合的基本方法,其中的存取方法(put,get)这里将不再叙述.
  •  Map的主要实现类有:HashMap与TreeMap,其中HashMap 类按哈希算法来存取键对象,而 TreeMap 类可以对键对象进行排序。

HshMap结构:

  • 在JDK8之前HshMap是采用数组加链表进行存储的
  • 在JDK8之后HahMap是采用数组加链表加红黑树进行存储的

HahMap的默认参数为长度16与加载因子为0.75,而现在他的底层实际有两种数据结构一种是链表形式的一种为红黑树:

 

 当16个空间不足以存储(会判断元素数量是否大于HashMap的阈值如果大于则扩容)这时,就会调用resize ()方法通过加载因子扩容,最大是为1073741824个空间。

Map是不是集合?

 在初学时很容易误以为只有实现了Collection接口的才是集合,而然并不是这样的,在

举报

相关推荐

0 条评论