Day_10 集合

Day 10 集合

集合的概念

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

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

每一种接口都从以下4个方面讲解:

​ 接口的特点、接口的方法、接口实现类、集合元素的遍历

集合的结构:

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

Collection接口的特点:存储对象,即存储数据类型Object。

Set接口的特点:用于存放任意Object对象,无序、无下标、元素不能重复。


Collection体系集合

Collection父接口

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

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

Collection接口中的方法:

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

实现类:Collection父接口没有直接的实现类。


List集合

List接口

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

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

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

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

实现类:

ArrayList:底层用数组实现,查询快、增删慢

遍历方法:下标遍历、forEach遍历

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

加注:

​ JDK1.6及之前,new即生成长度为10的数组

​ JDK1.7做了小优化(技术更迭),new时给一个长度为0的数组,第一次调用 add时生成长度为10的数组。

Vector:底层用数组实现,查询快、增删慢

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

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

List实现方式

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

泛型类:

​ 语法:class 类名<泛型类型标识符1,泛型类型标识符2>{

​ 泛型类型标识符1 变量名;

​ }

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

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

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

语法:

interface 接口名<泛型标识>{}
//示例
interface MyInter<T>{
  T.getVar();
}
//实现类
//第一种方式
class ClassC implements MyInter<String>{
  public String getVar(){
    return "good";
  }
}
//第二种方式
class ClassD<T> implements MyInter<T>{
  T value;
  public T getVar(){
    return value;
  }
}

Collections工具类

public static void reverse(List list);//对集合元素倒置
public static shuffel(List list);//对集合元素随机显示
public static void sort(List list);//对集合元素排序
//注意:如果集合元素是自定义类型的对象,必须实现java.util.Comparable接口,并实现compareTo方法。

集合结构

Set子接口:

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

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

实现类:HashSet

遍历方式:forEach遍历

HashSet添加元素原理:

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

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

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

​ 确保相同的对象返回相同的哈希码

​ 尽量保证不同的对象返回不同的哈希码

加注:

​ HashSet的初始容量为16,加载因子是0.75,不建议修改 。

​ 基于HashCode实现元素不重复,当HashCode相同会调用equals二次确认,为true拒绝后者插入。

TreeSet实现类:

SortedSet接口是Set子接口

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

实现类:TreeSet

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

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


Map体系集合

Map父接口

Map接口的特点:

​ 1.用于存储任意键值对(Key-Value)

​ 2.键:无序、无下标、不允许重复(唯一)

​ 3.值:无序、无下标、允许重复

方法:

​ V put(K key,V value) //往Map中存储一个键值对,如果Key在map中已经存在,则新值覆盖旧值;如果key在map中不存在,则直接存储,返回值为null。

​ V remove(K key)//根据键删除集合中对应的键值对,返回被删除的value。

​ V get(K key)//根据key查询对应的value

 int size()//获取集合中键值对的数量

​ boolean containsKey(K key)//判断map集合中是否包含key的键,返回true/false.

​ boolean containsValue(V value)//判断map集合中是否包含value的值,返回true/false.

实现类:HashMap

遍历: 键遍历:通过Set< K > keyset() 方法

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

​ 键值对遍历:通过Set< Map.Entry< K,V > > entrySet() 方法

HashMap【重点】:

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

Hashtable:0

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

Properties:

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

TreeMap:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值