栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java集合----Collection接口

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java集合----Collection接口

之前已经学过了一些Java的基础知识点,今天开始总结学习Java集合的相关知识吧,如果有遗漏不足之处,还请斧正,也可以去其他网站进行更加详细的学习!!!

 Java 集合类存放于 java.util 包中,是一个用于存放对象的容器

集合中只能存放对象,如果存入一个简单类型,实际上进行了自动转换【装箱】

集合中存放的是多个对象的引用,对象本身还是存放在堆内存

集合中可以存放不同类型、不限数量的数

Iterator 和 Iterable 接口

Collection 接口作为集合框架的顶级接口之一,继承于 Iterable 接口。

public interface Collection extends Iterable{

}
Iterable 接口

Iterable 接口用于引入可遍历的功能,要求接口的具体实现类必须提供 Iterator 的实现。

Iterator 接口 Iterator 迭代器,走访器,可以理解为集合中元素的指针,用于实现集合中所有元素的遍历访问
Collection接口 

一般来说 Collection 接口是集合框架的顶级接口,但是事实上不是。

特征:集合中的数据无序,允许重复。

public interface Collection extends Iterable{

}

常见接口中定义的方法:

size():int 获取集合中的元素个数

add(Object obj):boolean 向集合中添加元素 obj

isEmpty():boolean 判断集合中的元素个数是否为 0

contains(Object obj):boolean 判断当前集合中是否包含对象 obj

toArray():Object[]将集合转换为数组

addAll(Collection) 将另外一个集合中的所有元素添加到当前集合中

remove(Object obj):boolean 从集合中删除指定的元素 obj

clear():void 清空集合中的所有元素


List子接口

Collection 接口的子接口。

特征:数据有序【索引编号】允许重复。在 Collection 接口的基础上添加了每个元素的索引编号,编号从 0 开始到 size-1 结束。

public interface List extends Collection{

}

常见接口中定义的方法:

add(Object):boolean 向集合末尾追加元素

add(int index, E element):void 向指定索引位置

index 上添加元素 element,原始数据自动后移

remove(Object):boolean 删除第一个和 object 参数相等的元素

remove(int index):Object 删除指定索引值对应的元素,并返回被删除的元素。

get(int index):E 获取指定索引号对应的元素,要求 index 应该在[0,size-1]范围内,否则异常

set(int index, E element):E 用于给指定索引位置上进行赋值操作,这个位置上必须有对应的数据,已经赋过值了,这里实际上就是修改操作,否则越界异常

indexOf(Object obj):int 从前向后查询第一个元素和 obj 相等的元素的对应索引值。如果不存在相等的时候返回-1

lastIndexOf(Object obj):int 从后向前查询最后一个元素和 obj 相等的元素的对应索引值。如果不存在相等的时候返回-1

实现类:(ArrayList 、LinkedList、Vector)

ArrayList 底层数据结构就是数组,随机查询速度快、增删慢,线程不安全的,效率高,允许存放重复元素。

ArrayList 是实现了 List 接口的可扩容的数组【System.arrayCopy】,它的内部是基于数组实现的,相较于 Java中的数组,容量能动态增长。

ArrayList 实际上是通过数组保存数据,当构建 ArrayList 时,如果使用默认构造器,默认容积是 10,但是采用延迟构建;

当 ArrayList 容积不足以存放元素时,会自动进行 50%增容处理。新容积=原始容积*3/2;

ArrayList 克隆函数是将全局元素克隆到一个数组中。elementData 前面有 transient 修饰;

ArrayList 实现序列化时,先写出容积,再依次写出每个元素。

LinkedList 底层数据结构是双向链表,查询慢、增删快,线程不安全的,效率高,允许存放重复元素。

LinkedList 底层的数据结构是基于双向链表的结构。

Vector 底层数据结构是数组,随机查询速度快、增删慢,线程安全,效率低,允许存放重复元素。

内部实现仍旧是采用数组的方式实现,但是大部分方法上都有 synchronized 同步约束,所以当前类是一个线程安全的类。


Set子接口

Collection 接口的子接口。

特征:无序、不允许重复。

public interface Set extends Collection{

}
实现类:(HashSet、LinkedHashSet、TreeSet)

HashSet实现了Set接口,底层实际上是包装了一个HashMap实现的。

HashSet采用hash算法来存储集合中的元素,因此具有良好的读写性能。

调用add方法向HashSet中添加元素时,首先是针对对象的hashcode值进行比较。如果两个对象的 hashcode值相等时才会继续调用equals方法;如果两个对象的hashcode值不相等,则不会调用equals方法。

hashSet的特征

无序,不仅不能保证元素的插入顺序,而且在元素以后的顺序也可能会发生变化

如果需要访问的顺序和插入的顺序一致,则可以使用HashSet的子类LinkeHashSet

存储的元素不允许重复【equals和hashcode】

hashset中常见方法

contains(Object):boolean 判断set中是否存在指定对象,如果存在返回为true

iterator():Iterator 迭代访问元素----foreach写法要求必须实现Iterable接口

toArray():Object[] 放回包含所有元素的数组;如果需要指定返回数组的类型,可以使用toArray(类型[])

add(Object obj):boolean 如果set中不存在指定的元素obj,则向set中添加元素

remove(Object):boolean 删除指定元素

LinkedHashSet是HashSet的一个子类,LinkedHashSet也是根据hashCode值来决定元素的具体存储位置,但是同时它引入了一个链表可以维护元素的插入顺序。

底层采用链表和哈希表的算法,使用链表记录元素的添加位置,使用哈希表保证元素的唯一性。

LinkedHashSet是HashSet的子类,在HashSet的基础上添加了额外的链表,底层采用的是hash表的算法和链表的算法,既能保证元素的添加顺序,也保证了查询效率,当时整体性能要低于HashSet

判断元素相等采用的是equals方法,要求当equals为true时,hashCode值必须相等

要求存入HashSet中的元素必须覆盖定义equals()和hashCode()两个方法

TreeSet是一种排序的Set集合,数据存储采用的是NaviatableMap,底层实际上就是TreeMap实现的,本质上是一个红黑树原理。

Random r=new Random(); 
List list=new ArrayList<>(); 
Set set=new TreeSet<>(); 
while(set.size()<10){ 
    int k=r.nextInt(20); 
    list.add(k); 
    set.add(k); 
}
System.out.println("生成的数据为:"); 
System.out.println(list); 
System.out.println("插入TreeSet中的数据为:"); 
System.out.println(set);

Set,所以无重复。hashSet要求hashCode和equals方法,但是TreeSet不要求;

TreeSet不保证元素的添加顺序(LinkedHashSet),但是会对集合中的元素进行排序,需要 Comparable或者Comparator;

TreeSet底层采用红黑树算法(近似平衡排序二叉树),比较适合查询,但是添加的效率比较低。


今天的学习就先到这里吧,记得做好总结巩固哦!下一篇将继续学习Java集合中的Map接口的知识点!!!
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/913947.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号