java_集合

java-集合

集合的概念

概念:是一种工具类,也是一个容器,可以用于存储数量不等的多个对象

所有的集合接口和相关实现类都在java.util包中

集合的结构

集合的结构

Collection父接口

​ 特点:存储对象,即存储的类型为Object

​ 方法:Collection接口是List和Set接口的父接口,该接口中定义的方法在List和Set中也肯定存在。

Collection接口中的方法:

//添加一个对象
boolean add(Obdect obj);
//清空此集合中的所有对象
void clear();               
//检查此集合中是否包含o对象
boolean contains(Object o); 
//检查此集合中是否包含c中的所有对象
boolean containsAll(Object o);
//判断此集合是否为空
boolean isEmpty();
//在此集合中移除o对象
boolean remove(Object o);
//在此集合中移除c中所有的对象
boolean removeAll(Collection c);
//返回此集合中的元素个数
int size();
//将此集合转换成数组
Object[] toArray();

List接口

特点:存储Object类型的对象,有序、有下标、元素可以重复

​ 下表范围:0~集合有效元素个数-1(即:size-1)

方法:List接口继承了Collection接口的方法,除此由于List是有序、有下标的,则List集合添加了一些根据下标操作集合元素的方法

//将o元素存储在制定下标index位置
void add(int index,Object o);
//将c中所有的元素存储在指定下标index位置
boolean add(int index,Cillection c);
//返回集合中指定位置的元素
Object get(int index);
//移除index位置上的元素,返回删除对象
Object remove(int index)
//替换index位置上的元素,返回修改前的元素
Object set(int index,Object element)
//返回集合中指定部分的元素
List subList(int fromIndex,int toIndex)
//返回对象第一次出现的下标,如果没有指定元素,则返回-1
int indexOf(Object o)
//返回对象最后一次出现的下标,如果没有返回-1
int lastIndexOf(Object o)

List实现类

ArrayList:

​ 底层用数组实现,查询快,增删慢;

​ JDK1.2版本,线程不安全,运行效率高

扫描二维码关注公众号,回复: 3051564 查看本文章

Vector:

​ 底层用数组实现,查询快,增删慢;

​ JDK1.0版本,线程安全,运行效率慢

LinkedList:

​ 底层用链表实现,增删快,查询慢

泛型集合:类型安全的集合,强制集合元素类型必须一致

泛型类:

class 类名<泛型类型标识符1,泛型类型标识符2>{
    泛型类型标识符1    变量名;
}

通常用:T/E/V/K作为泛型标识符

泛型对象:类名<具体类型> 对象名 = new 类名<具体类型>();


泛型接口:JDK5.0之后不仅可以在类上声明泛型,也可以在接口上声明泛型

​ 语法:interface 接口名<泛型标识>{}


Collections工具类

Java提供了一个操作集合的工具类:Collections,该工具类中提供了一些方法用来操作集合中的元素:

public static void reverse(List list):对集合元素倒置
public static void shuffle(List list):对集合元素随机显示
public static void sort(List list):对集合元素排序

注意:如果集合元素是自定义类型的对象,必须实现java.util.Comparable接口,并实现compareTo方法

Set子接口

特点:无序、无下标、元素不可重复

方法:全部继承自Collection中的方法

实现类:HashSet(底层是HashMap实例)

HashSet添加元素原理

将自定义类型的对象存入HashSet时,无法保证元素的不重复

解决办法:

为触发equals方法的调用,重写hashCode方法:

* 确保相同对象返回相同的哈希码,尽量保证不同的对象返回不同的哈希码*(减少equals方法的调用)

覆盖equals方法,保证“相同”对象的比较结果为true


通过哈希码辨别对象是否重复,若是哈希码一致,通过equals在此确认对象是否一致


TreeSet实现类

SortedSet接口是Set子接口

特点:存储Object对象,无序、无下标、元素不重复。可对集合元素自动排序

实现类:TreeSet

遍历方式:迭代遍历、forEach遍历

注意:TreeSet通过CompareTo方法返回值是否为“0”确定重复元素

Map体系集合

Map结构:映射,将键映射到值的对象

![Map结构](Map结构.jpg)

Map接口的特点:

①用于存储任意键值对(Key-value)
②键:无序、无下标、不允许重复(唯一)
③值:无序、无下标、允许重复

方法

/*
    往Map中存储一个键值对,如果key在map中已经存在,则新值覆盖旧值;
    如果key在map中不存在,则直接存储,返回值为null
*/
V put(K key,V value);
//根据键删除集合中对应的键值对,返回被删除的value
V remove(K key);
//根据key查询对应的value
V get(K key);
//获取集合中键值对的数量
int size();
//判断map集合中是否包含key的键,返回值是true/false
boolean containsKey(K key);
//判断map集合中是否包含value的值,返回true/false
boolean containsValue(V value);

Map的实现类:

HashMap,支持键为null,效率快,但是线程不安全

遍历:

​ 键遍历:通过Set keySet()方法

​ 值遍历:通过Collection values()方法

​ 键值对遍历:通过Set

Map集合的实现类

HashMap【重点】

​ JDK1.2版本,线程不安全,运行效率快;允许用null作为key或是value

Hashtable:

​ JDK1.0版本,线程安全,运行效率慢;不允许null作为key或是value

Properties:

​ Hashtable的子类,要求key和value都是String。通常用于配置文件的读取

TreeMap:

​ 实现了SortedMap接口(是Map的子接口),可以对key自动排序,实现comparable接口的compareTo方法

猜你喜欢

转载自blog.csdn.net/qq_38928944/article/details/79763848