微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

java 集合

 集合


目录

 集合

数组和集合的比较

顶级接口Collection

提供的方法:

List接口

继承自Collection接口的方法

List接口中的特殊方法

对应的实现类

Set集合

如果进行对象相等比较:

实现类:


Java集合类存放于 java.util 包中,是一个用来存放对象的容器
- 集合只能存放对象。比如存一个int型数据1放入集合中,其实它是自动转换成Integer 类后存入的(装箱操作),Java中每一种基本类型都有对应的引用类型
- 集合存放的是多个对象的引用,对象本身还是放在堆内存中
- 集合可以存放不同类型,不限数量的数据类型。定义集合变量时如果不指定数据类型,则认数据类型为Object

数组和集合的比较

针对Java中的数组定长,Java提出了集合框架,实现了一种变长存储数据的容器---集合
数组不是面向对象的,存在明显的缺陷,集合弥补了数组的缺点,比数组更灵活更实用,而且不同的集合框架类可适用不同场合。如下:

  • - 数组能存放基本数据类型和对象,而集合类存放的都是对象的引用,而非对象本身
  • - 数组容量固定无法动态改变,集合类容量动态改变
  • - 数组无法判断其中实际存有多少元素,length只告诉了数组的容量,而集合的size()可以确切知道元素的个数
  • - 集合有多种实现方式和不同适用场合,不像数组仅采用顺序表方式
  • - 集合以类的形式存在,具有封装、继承、多态等类的特性,通过简单的方法属性即可实现各种复杂操作,大大提高了软件的开发效率

Iterator迭代器
Iterator迭代器:走访器,可以理解为集合中元素的指针
它是Java集合的顶层接口(不包括map系列的集合,Map接口是map系列集合的顶层接口) 

Iterable接口用以表示实现类是可以迭代的

顶级接口Collection

无序、允许重复
public interface Collection<E> extends Iterable<E>一般说Collection是集合
框架的顶级接口,但是事实上并不是顶级接口

提供的方法:

  • int size();  获取集合中的元素个数   区分容积和元素个数
  • boolean isEmpty()判断集合中的元素个数是否为0   注意:只判断是否没有元素,但是并不判断集合对象是否为null
  • boolean contains(Object o)用于判断集合中是否包含对象 
  • boolean add(Object o)用于向集合中追加元素o,成功true失败false
  • boolean remove(Object o)删除集合中的指定元素o,成功true失败false
  • Iterator<E> iterator();获取迭代器,通过迭代器遍历集合中的每个元素
  • Object[] toArray();将集合转换为数组
  • void clear();删除集合中的所有元素 

List接口

有序 允许重复
public interface List<E> extends Collection<E>

继承自Collection接口的方法

  • - boolean add(E e);向集合末尾追加元素e对象 
  • - boolean remove(Object obj)删除一个和obj相等的元素,如果没有和obj相等元素,则报异常indexoutofboundsexception 

List接口中的特殊方法

  • - void add(int index, E element); 向指定索引位置index上添加元素element,原始数据自动后移
  • - E get(int index);  获取指定索引号对应的元素,index应该在[0,size-1]
  • - E set(int index, E element);  用于给指定索引位置上进行赋值,这个位置上必须有对应的数据(已经赋过值),这里实际上是修改操作,否则indexoutofboundsexception
  • - E remove(int index);删除指定位置的元素,可以返回原始位置上存储的元素
  • - int indexOf(Object o); 查找从左向右第一个o元素的下标索引,如果元素不存在返回-1
  • - int lastIndexOf(Object o);从右向左查找

对应的实现类

  1. ArrayList底层实现为数组,线程不安全
  2. Vector底层实现为数组,线程安全  synchronized
  3. LinkedList底层实现为链表,线程不安全 

Set集合

无序,不允许重复
public interface Set<E> extends Collection<E>
没有新方法
- boolean add(E e);向集合中追加元素e对象,如果出现重复则后添加
据直接丢弃

如果进行对象相等比较:

- 首先调用当前对象所属类中的hashCode方法获取当前对象的hashCode值
- 按照hashCode值进行比较,
 - 如果hashCode值不相等,则不会调用equals方法,直接得出结论两
个对象不相等
- 如果hashCode值相等,才调用equals方法进行进一步判断
- 如果equals为真则判断两个对象相等
潜规则:
java要求当两个对象的equals为true时,要求两个对象的hashCode值相等。
hashCode值相等并不一定equals为true

实现类:

  1. - HashSet
  2. - TreeSet
  3. - LinkedHashSet 

原文地址:https://www.jb51.cc/wenti/3288059.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐